Spaces:
Running on Zero
Running on Zero
| /** | |
| * Level Manager - Manages game level order and navigation | |
| * | |
| * USAGE: | |
| * 1. Add your level scene keys to LEVEL_ORDER array | |
| * 2. Use getNextLevelScene() to get the next level | |
| * 3. Use isLastLevel() to check if current is the final level | |
| * | |
| * The LEVEL_ORDER array defines the sequence of levels in your game. | |
| * VictoryUIScene and GameCompleteUIScene use this to determine navigation. | |
| */ | |
| export class LevelManager { | |
| // ============================================================================ | |
| // LEVEL ORDER CONFIGURATION | |
| // ============================================================================ | |
| /** | |
| * TODO-LEVELS: Replace with YOUR scene keys from GDD Section 0 (Architecture). | |
| * Order matters: first entry = first scene after TitleScreen, last = final scene. | |
| * Every key here MUST also be registered in main.ts via game.scene.add(). | |
| * | |
| * @example | |
| * // For a ui_heavy game with character select → battle → endings: | |
| * static readonly LEVEL_ORDER: string[] = [ | |
| * "CharacterSelectScene", | |
| * "BattleScene", | |
| * "VictoryScene", | |
| * "DefeatScene", | |
| * ]; | |
| */ | |
| static readonly LEVEL_ORDER: string[] = [ | |
| 'RoleRevealScene', | |
| 'MainTableScene', | |
| 'EndgameScene', | |
| ]; | |
| // ============================================================================ | |
| // NAVIGATION METHODS | |
| // ============================================================================ | |
| /** | |
| * Get the key of the next level scene | |
| * | |
| * @param currentSceneKey - The current level scene key | |
| * @returns Next level scene key, or null if at last level | |
| */ | |
| static getNextLevelScene(currentSceneKey: string): string | null { | |
| const currentIndex = LevelManager.LEVEL_ORDER.indexOf(currentSceneKey); | |
| // If it's the last level or current level not found, return null | |
| if ( | |
| currentIndex === -1 || | |
| currentIndex >= LevelManager.LEVEL_ORDER.length - 1 | |
| ) { | |
| return null; | |
| } | |
| return LevelManager.LEVEL_ORDER[currentIndex + 1]; | |
| } | |
| /** | |
| * Check if the current level is the last level | |
| * | |
| * @param currentSceneKey - The current level scene key | |
| * @returns True if this is the final level | |
| */ | |
| static isLastLevel(currentSceneKey: string): boolean { | |
| const currentIndex = LevelManager.LEVEL_ORDER.indexOf(currentSceneKey); | |
| return currentIndex === LevelManager.LEVEL_ORDER.length - 1; | |
| } | |
| /** | |
| * Get the key of the first level scene | |
| * | |
| * @returns First level scene key, or null if no levels defined | |
| */ | |
| static getFirstLevelScene(): string | null { | |
| return LevelManager.LEVEL_ORDER.length > 0 | |
| ? LevelManager.LEVEL_ORDER[0] | |
| : null; | |
| } | |
| /** | |
| * Get the current level index (1-based for display) | |
| * | |
| * @param currentSceneKey - The current level scene key | |
| * @returns Level number (1-based), or 0 if not found | |
| */ | |
| static getLevelNumber(currentSceneKey: string): number { | |
| const index = LevelManager.LEVEL_ORDER.indexOf(currentSceneKey); | |
| return index >= 0 ? index + 1 : 0; | |
| } | |
| /** | |
| * Get total number of levels | |
| * | |
| * @returns Total level count | |
| */ | |
| static getTotalLevels(): number { | |
| return LevelManager.LEVEL_ORDER.length; | |
| } | |
| /** | |
| * Check if a scene key is a valid level scene | |
| * | |
| * @param sceneKey - Scene key to check | |
| * @returns True if this is a registered level scene | |
| */ | |
| static isLevelScene(sceneKey: string): boolean { | |
| return LevelManager.LEVEL_ORDER.includes(sceneKey); | |
| } | |
| } | |