import { _decorator, Component, sys } from 'cc'; const { ccclass, property } = _decorator; /** * 关卡管理器 * 负责关卡数据的保存、加载和切换 */ @ccclass('LevelManager') export class LevelManager extends Component { private static instance: LevelManager = null; private currentLevel: number = 1; private maxUnlockedLevel: number = 1; private levelData: any = {}; onLoad() { if (LevelManager.instance === null) { LevelManager.instance = this; this.loadLevelData(); } else if (LevelManager.instance !== this) { this.destroy(); return; } } onDestroy() { if (LevelManager.instance === this) { LevelManager.instance = null; } } public static getInstance(): LevelManager { return LevelManager.instance; } // 加载关卡数据 private loadLevelData() { const savedData = sys.localStorage.getItem('levelData'); if (savedData) { try { const data = JSON.parse(savedData); this.currentLevel = data.currentLevel || 1; this.maxUnlockedLevel = data.maxUnlockedLevel || 1; this.levelData = data.levelData || {}; console.log('关卡数据加载成功'); } catch (error) { console.error('关卡数据解析失败:', error); this.resetLevelData(); } } else { this.resetLevelData(); } } // 保存关卡数据 private saveLevelData() { const data = { currentLevel: this.currentLevel, maxUnlockedLevel: this.maxUnlockedLevel, levelData: this.levelData }; try { sys.localStorage.setItem('levelData', JSON.stringify(data)); console.log('关卡数据保存成功'); } catch (error) { console.error('关卡数据保存失败:', error); } } // 重置关卡数据 private resetLevelData() { this.currentLevel = 1; this.maxUnlockedLevel = 1; this.levelData = {}; this.saveLevelData(); } // 获取当前关卡 public getCurrentLevel(): number { return this.currentLevel; } // 获取最大解锁关卡 public getMaxUnlockedLevel(): number { return this.maxUnlockedLevel; } // 设置当前关卡 public setCurrentLevel(level: number) { if (level <= this.maxUnlockedLevel && level >= 1) { this.currentLevel = level; this.saveLevelData(); console.log(`切换到关卡 ${level}`); } else { console.warn(`关卡 ${level} 未解锁或无效`); } } // 完成关卡 public completeLevel(level: number, score: number = 0, stars: number = 1) { // 解锁下一关 if (level === this.maxUnlockedLevel) { this.maxUnlockedLevel = level + 1; } // 保存关卡成绩 if (!this.levelData[level]) { this.levelData[level] = {}; } const currentData = this.levelData[level]; if (!currentData.bestScore || score > currentData.bestScore) { currentData.bestScore = score; } if (!currentData.bestStars || stars > currentData.bestStars) { currentData.bestStars = stars; } currentData.completed = true; currentData.completionTime = Date.now(); this.saveLevelData(); console.log(`关卡 ${level} 完成,得分: ${score},星级: ${stars}`); } // 获取关卡数据 public getLevelData(level: number): any { return this.levelData[level] || { completed: false, bestScore: 0, bestStars: 0 }; } // 检查关卡是否已解锁 public isLevelUnlocked(level: number): boolean { return level <= this.maxUnlockedLevel; } // 检查关卡是否已完成 public isLevelCompleted(level: number): boolean { const data = this.getLevelData(level); return data.completed || false; } // 获取关卡最佳成绩 public getLevelBestScore(level: number): number { const data = this.getLevelData(level); return data.bestScore || 0; } // 获取关卡最佳星级 public getLevelBestStars(level: number): number { const data = this.getLevelData(level); return data.bestStars || 0; } // 重置所有关卡进度 public resetAllProgress() { this.resetLevelData(); console.log('所有关卡进度已重置'); } // 解锁所有关卡(调试用) public unlockAllLevels(maxLevel: number = 100) { this.maxUnlockedLevel = maxLevel; this.saveLevelData(); console.log(`已解锁所有关卡(最大关卡: ${maxLevel})`); } }