diff options
author | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2024-03-07 22:49:43 -0700 |
---|---|---|
committer | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2024-03-07 22:49:43 -0700 |
commit | ebae24f5a3a251654a1e41be58f52ba2a777d9d7 (patch) | |
tree | 6641c3e5a5ec5d812c54be2bb38196f85f4e36c2 /src/engine/systems/Level.ts | |
parent | 808a44e8542ebc7542d833e5a30b51b7fb8f80d5 (diff) | |
download | the-abstraction-engine-ebae24f5a3a251654a1e41be58f52ba2a777d9d7.tar.gz the-abstraction-engine-ebae24f5a3a251654a1e41be58f52ba2a777d9d7.zip |
level system!
Diffstat (limited to 'src/engine/systems/Level.ts')
-rw-r--r-- | src/engine/systems/Level.ts | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/engine/systems/Level.ts b/src/engine/systems/Level.ts new file mode 100644 index 0000000..87e12a5 --- /dev/null +++ b/src/engine/systems/Level.ts @@ -0,0 +1,57 @@ +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>; + private currentLevel: LevelType | 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.currentLevel = null; + this.moveToLevel = initialLevel; + this.unlockedLevels = new Set(); + } + + public setLevel(level: string) { + this.moveToLevel = level; + } + + 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; + } +} |