blob: 824895dd9e66a8892bc079fefcd8a839f62899a9 (
plain)
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
|
import { SystemNames, System } from ".";
import { Game } from "..";
import { type Level as LevelType, LEVELS, LEVEL_PROGRESSION } from "../levels";
export class Level extends System {
private unlockedLevels: Set<string> = new Set();
private currentLevel: LevelType | null = null;
private moveToLevel: string | null;
private levelMap: Map<string, LevelType>;
constructor(initialLevel: string) {
super(SystemNames.Level);
this.levelMap = new Map();
LEVELS.forEach((level) => {
this.levelMap.set(level.name, level);
});
this.moveToLevel = initialLevel;
}
public setLevel(level: string) {
this.moveToLevel = level;
}
public reset(game: Game) {
game.resetState();
this.currentLevel?.init(game);
}
public update(_dt: number, game: Game) {
if (this.moveToLevel === this.currentLevel?.name || !this.moveToLevel) {
return;
}
if (this.currentLevel) {
game.resetState();
}
const unlockedLevels = LEVEL_PROGRESSION[this.moveToLevel];
if (unlockedLevels && unlockedLevels.length > 0) {
unlockedLevels.forEach((levelName) => {
if (!this.unlockedLevels.has(levelName)) {
this.unlockedLevels.add(levelName);
}
});
}
if (!this.unlockedLevels.has(this.moveToLevel)) {
this.unlockedLevels.add(this.moveToLevel);
}
this.currentLevel = this.levelMap.get(this.moveToLevel)!;
this.currentLevel.init(game);
this.moveToLevel = null;
}
public getUnlockedLevels() {
return this.unlockedLevels;
}
}
|