| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- import { sys } from 'cc';
- /**
- * 关卡管理器
- * 负责关卡数据的保存、加载和切换
- * 注意:这是一个纯数据管理类,不需要挂载到节点上
- */
- export class LevelManager {
- private static instance: LevelManager = null;
-
- private currentLevel: number = 1;
- private maxUnlockedLevel: number = 1;
- private levelData: any = {};
- private initialized: boolean = false;
- private constructor() {
- // 私有构造函数,确保单例模式
- }
- public static getInstance(): LevelManager {
- if (LevelManager.instance === null) {
- LevelManager.instance = new LevelManager();
- LevelManager.instance.initialize();
- }
- return LevelManager.instance;
- }
- // 初始化关卡管理器
- private initialize() {
- if (this.initialized) return;
-
- this.loadLevelData();
- this.initialized = true;
- }
- // 加载关卡数据
- 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 || {};
- } catch (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));
- } catch (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();
- }
- }
- // 完成关卡
- public completeLevel(level: number, score: number = 0) {
- // 解锁下一关
- 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;
- }
- currentData.completed = true;
- currentData.completionTime = Date.now();
- this.saveLevelData();
- }
- // 获取关卡数据
- public getLevelData(level: number): any {
- return this.levelData[level] || {
- completed: false,
- bestScore: 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 resetAllProgress() {
- this.resetLevelData();
- }
- // 解锁所有关卡(调试用)
- public unlockAllLevels(maxLevel: number = 100) {
- this.maxUnlockedLevel = maxLevel;
- this.saveLevelData();
- }
- }
|