Spaces:
Sleeping
Sleeping
| // Level Manager - handles multiple levels and level transitions | |
| import { Level } from './types'; | |
| import { createLevel1 } from './Level'; | |
| import { createLevel2 } from './Level2'; | |
| import { createLevel3 } from './Level3'; | |
| export type LevelTheme = 'overworld' | 'underground' | 'castle'; | |
| export interface LevelInfo { | |
| id: number; | |
| name: string; | |
| theme: LevelTheme; | |
| createLevel: () => Level; | |
| } | |
| export class LevelManager { | |
| private levels: LevelInfo[] = [ | |
| { | |
| id: 1, | |
| name: 'World 1-1', | |
| theme: 'overworld', | |
| createLevel: createLevel1, | |
| }, | |
| { | |
| id: 2, | |
| name: 'World 1-2', | |
| theme: 'underground', | |
| createLevel: createLevel2, | |
| }, | |
| { | |
| id: 3, | |
| name: 'World 1-3', | |
| theme: 'castle', | |
| createLevel: createLevel3, | |
| }, | |
| ]; | |
| private currentLevelIndex: number = 0; | |
| getCurrentLevel(): Level { | |
| return this.levels[this.currentLevelIndex].createLevel(); | |
| } | |
| getCurrentLevelInfo(): LevelInfo { | |
| return this.levels[this.currentLevelIndex]; | |
| } | |
| getLevelCount(): number { | |
| return this.levels.length; | |
| } | |
| getCurrentLevelNumber(): number { | |
| return this.currentLevelIndex + 1; | |
| } | |
| setLevel(levelIndex: number): Level | null { | |
| if (levelIndex >= 0 && levelIndex < this.levels.length) { | |
| this.currentLevelIndex = levelIndex; | |
| return this.getCurrentLevel(); | |
| } | |
| return null; | |
| } | |
| nextLevel(): Level | null { | |
| if (this.currentLevelIndex < this.levels.length - 1) { | |
| this.currentLevelIndex++; | |
| return this.getCurrentLevel(); | |
| } | |
| return null; // No more levels - game complete! | |
| } | |
| previousLevel(): Level | null { | |
| if (this.currentLevelIndex > 0) { | |
| this.currentLevelIndex--; | |
| return this.getCurrentLevel(); | |
| } | |
| return null; | |
| } | |
| resetToFirstLevel(): Level { | |
| this.currentLevelIndex = 0; | |
| return this.getCurrentLevel(); | |
| } | |
| isLastLevel(): boolean { | |
| return this.currentLevelIndex === this.levels.length - 1; | |
| } | |
| getAllLevels(): LevelInfo[] { | |
| return [...this.levels]; | |
| } | |
| } | |