super-mario / lib /engine /LevelManager.ts
asemxin
Add multiple levels and sound effects system
4539eae
// 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];
}
}