Spaces:
Sleeping
Sleeping
File size: 2,293 Bytes
4539eae |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
// 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];
}
}
|