diff options
Diffstat (limited to 'client/src/JumpStorm.ts')
-rw-r--r-- | client/src/JumpStorm.ts | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/client/src/JumpStorm.ts b/client/src/JumpStorm.ts new file mode 100644 index 0000000..45ea163 --- /dev/null +++ b/client/src/JumpStorm.ts @@ -0,0 +1,54 @@ +import { Floor, Player } from "@engine/entities"; +import { Game } from "@engine/Game"; +import { + WallBounds, + FacingDirection, + Render, + Physics, + Input, + Collision, +} from "@engine/systems"; + +export class JumpStorm { + private game: Game; + + constructor(ctx: CanvasRenderingContext2D) { + this.game = new Game(); + + [ + this.createInputSystem(), + new FacingDirection(), + new Physics(), + new Collision(), + new WallBounds(ctx.canvas.width), + new Render(ctx), + ].forEach((system) => this.game.addSystem(system)); + + [new Floor(160), new Player()].forEach((entity) => + this.game.addEntity(entity) + ); + } + + public play() { + this.game.start(); + + const loop = (timestamp: number) => { + this.game.doGameLoop(timestamp); + requestAnimationFrame(loop); // tail call recursion! /s + }; + requestAnimationFrame(loop); + } + + private createInputSystem(): Input { + const inputSystem = new Input(); + + window.addEventListener("keydown", (e) => { + if (!e.repeat) { + inputSystem.keyPressed(e.key); + } + }); + window.addEventListener("keyup", (e) => inputSystem.keyReleased(e.key)); + + return inputSystem; + } +} |