summaryrefslogtreecommitdiff
path: root/src/engine/levels/LevelSelection.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/levels/LevelSelection.ts')
-rw-r--r--src/engine/levels/LevelSelection.ts33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/engine/levels/LevelSelection.ts b/src/engine/levels/LevelSelection.ts
new file mode 100644
index 0000000..a970d9c
--- /dev/null
+++ b/src/engine/levels/LevelSelection.ts
@@ -0,0 +1,33 @@
+import { LEVELS, Level, LevelNames } from ".";
+import { Game } from "..";
+import { Player, Portal } from "../entities";
+import { Grid, Level as LevelSystem, SystemNames } from "../systems";
+
+export class LevelSelection extends Level {
+ constructor() {
+ super(LevelNames.LevelSelection);
+ }
+
+ public init(game: Game): void {
+ const gridSystem = game.getSystem<Grid>(SystemNames.Grid);
+ const center = gridSystem.getCenterGrid();
+
+ const levelSystem = game.getSystem<LevelSystem>(SystemNames.Level);
+ const unlocked = levelSystem.getUnlockedLevels();
+
+ LEVELS.forEach((level, i) => {
+ if (
+ !unlocked.has(level.name) ||
+ level.name === LevelNames.LevelSelection
+ ) {
+ return;
+ }
+
+ const portal = new Portal(level.name, { x: i, y: 7 });
+ game.addEntity(portal);
+ });
+
+ const player = new Player(center);
+ game.addEntity(player);
+ }
+}