| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- 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<number> {
- 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<amt) return false; this.data.sessionCoins-=amt; return true; }
-
- // ======== 使用次数接口 ========
- public getAddBallUsageCount(): number { return this.data?.addBallUsageCount ?? 0; }
- public getRefreshUsageCount(): number { return this.data?.refreshUsageCount ?? 0; }
- public getAddCoinUsageCount(): number { return this.data?.addCoinUsageCount ?? 0; }
-
- public incrementAddBallUsageCount(): void { if(this.data) this.data.addBallUsageCount++; }
- public incrementRefreshUsageCount(): void { if(this.data) this.data.refreshUsageCount++; }
- public incrementAddCoinUsageCount(): void { if(this.data) this.data.addCoinUsageCount++; }
- }
|