LevelSessionManager.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. export interface LevelRuntimeData {
  2. levelId: number; // 本局关卡
  3. wallHealth: number; // 当前墙血
  4. enemiesTotal: number; // 本关总敌人
  5. enemiesKilled: number; // 已击杀
  6. currentWave: number; // 当前波
  7. //drops: DropItemData[]; // 已掉落的道具
  8. startTime: number;
  9. sessionCoins: number; // 本局金币(购买方块)
  10. }
  11. export class LevelSessionManager {
  12. private static _inst: LevelSessionManager;
  13. public static get inst() { return this._inst || (this._inst = new LevelSessionManager()); }
  14. private data: LevelRuntimeData = null;
  15. /** 准备本关运行期数据 */
  16. public initialize(levelId: number, wallHealth: number) {
  17. this.data = {
  18. levelId,
  19. wallHealth,
  20. enemiesTotal: 0,
  21. enemiesKilled: 0,
  22. currentWave: 1,
  23. //drops: [],
  24. startTime: Date.now(),
  25. sessionCoins: 45
  26. };
  27. console.log(`[LevelSessionManager] 初始化完成,sessionCoins设置为: ${this.data.sessionCoins}`);
  28. }
  29. public get runtime() { return this.data; }
  30. /** 关卡结束后调用,让 GC 自动回收 */
  31. public clear() { this.data = null; }
  32. // ======== 本局金币接口 ========
  33. public getCoins(): number {
  34. const coins = this.data?.sessionCoins ?? 0;
  35. console.log(`[LevelSessionManager] getCoins() 返回: ${coins}, data存在: ${!!this.data}`);
  36. return coins;
  37. }
  38. public addCoins(amt:number){ if(this.data) this.data.sessionCoins += amt; }
  39. /** 成功返回true */
  40. public spendCoins(amt:number):boolean{ if(!this.data || amt<=0) return false; if(this.data.sessionCoins<amt) return false; this.data.sessionCoins-=amt; return true; }
  41. }