import { resources, JsonAsset } from 'cc'; export interface LevelRuntimeData { levelId: number; // 本局关卡 wallHealth: number; // 当前墙血 enemiesTotal: number; // 本关总敌人 enemiesKilled: number; // 已击杀 currentWave: number; // 当前波 //drops: DropItemData[]; // 已掉落的道具 startTime: number; sessionCoins: 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 }; console.log(`[LevelSessionManager] 初始化完成,关卡${levelId}初始金币设置为: ${this.data.sessionCoins}`); } /** 从关卡配置文件加载初始金币数量 */ private async loadInitialCoins(levelId: number): Promise { try { const jsonPath = `data/levels/Level${levelId}`; console.log(`[LevelSessionManager] 尝试加载关卡配置: ${jsonPath}`); return new Promise((resolve) => { resources.load(jsonPath, JsonAsset, (err, asset) => { if (err) { console.warn(`[LevelSessionManager] 加载关卡${levelId}配置失败,使用默认初始金币45:`, err); resolve(45); // 默认值 return; } const levelConfig = asset.json; if (levelConfig && typeof levelConfig.initialCoins === 'number') { console.log(`[LevelSessionManager] 关卡${levelId}初始金币配置: ${levelConfig.initialCoins}`); resolve(levelConfig.initialCoins); } else { console.warn(`[LevelSessionManager] 关卡${levelId}配置中未找到initialCoins字段,使用默认值45`); resolve(45); // 默认值 } }); }); } catch (error) { console.error(`[LevelSessionManager] 加载关卡${levelId}初始金币配置时发生错误:`, 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