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];
    }
}