import { JsonAsset } from 'cc'; import { BundleLoader } from './BundleLoader'; export interface LevelRuntimeData { levelId: number; // 本局关卡 wallHealth: number; // 当前墙血 enemiesTotal: number; // 本关总敌人 enemiesKilled: number; // 已击杀 currentWave: number; // 当前波 //drops: DropItemData[]; // 已掉落的道具 startTime: number; sessionCoins: number; // 本局金币(购买方块) addBallUsageCount: number; // 添加小球使用次数 refreshUsageCount: number; // 刷新方块使用次数 addCoinUsageCount: number; // 观看广告奖励使用次数 } export class LevelSessionManager { private static _inst: LevelSessionManager; public static get inst() { return this._inst || (this._inst = new LevelSessionManager()); } private data: LevelRuntimeData = null; /** 准备本关运行期数据 */ public async initialize(levelId: number, wallHealth: number) { // 从关卡配置读取初始金币 const initialCoins = await this.loadInitialCoins(levelId); this.data = { levelId, wallHealth, enemiesTotal: 0, enemiesKilled: 0, currentWave: 1, //drops: [], startTime: Date.now(), sessionCoins: initialCoins, addBallUsageCount: 0, refreshUsageCount: 0, addCoinUsageCount: 0 }; console.log(`[LevelSessionManager] 初始化完成,关卡${levelId}初始金币设置为: ${this.data.sessionCoins}`); } /** 从关卡配置文件加载初始金币数量 */ private async loadInitialCoins(levelId: number): Promise { try { const resourcePath = `levels/Level${levelId}`; console.log(`[LevelSessionManager] 尝试从data Bundle加载关卡配置: ${resourcePath}`); const levelConfig = await BundleLoader.getInstance().loadDataJson(resourcePath); if (levelConfig && levelConfig.json && typeof levelConfig.json.initialCoins === 'number') { console.log(`[LevelSessionManager] 关卡${levelId}初始金币配置: ${levelConfig.json.initialCoins}`); return levelConfig.json.initialCoins; } else { console.warn(`[LevelSessionManager] 关卡${levelId}配置中未找到initialCoins字段,使用默认值45`); return 45; // 默认值 } } catch (error) { console.warn(`[LevelSessionManager] 加载关卡${levelId}配置失败,使用默认初始金币45:`, error); return 45; // 默认值 } } public get runtime() { return this.data; } /** 关卡结束后调用,让 GC 自动回收 */ public clear() { this.data = null; } // ======== 本局金币接口 ======== public getCoins(): number { const coins = this.data?.sessionCoins ?? 0; console.log(`[LevelSessionManager] getCoins() 返回: ${coins}, data存在: ${!!this.data}`); return coins; } public addCoins(amt:number){ if(this.data) this.data.sessionCoins += amt; } /** 成功返回true */ public spendCoins(amt:number):boolean{ if(!this.data || amt<=0) return false; if(this.data.sessionCoins