diff options
Diffstat (limited to 'client/src')
-rw-r--r-- | client/src/JumpStorm.ts | 54 | ||||
-rw-r--r-- | client/src/components/GameCanvas.svelte | 9 | ||||
-rw-r--r-- | client/src/components/LeaderBoard.svelte | 2 | ||||
-rw-r--r-- | client/src/components/LeaderBoardCard.svelte | 2 |
4 files changed, 59 insertions, 8 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; + } +} diff --git a/client/src/components/GameCanvas.svelte b/client/src/components/GameCanvas.svelte index 766a08a..d7abecf 100644 --- a/client/src/components/GameCanvas.svelte +++ b/client/src/components/GameCanvas.svelte @@ -1,11 +1,8 @@ <script lang="ts"> import { onMount } from "svelte"; - import { Game } from "../../lib/Game"; - import { Render } from "../../lib/systems"; - import { Floor } from "../../lib/entities"; - import { loadAssets } from "../../lib/config"; - import { JumpStorm } from "../../lib/JumpStorm"; - + import { loadAssets } from "@engine/config"; + import { JumpStorm} from "../Jumpstorm"; + let canvas: HTMLCanvasElement; let ctx: CanvasRenderingContext2D; diff --git a/client/src/components/LeaderBoard.svelte b/client/src/components/LeaderBoard.svelte index d6e4ce3..880e64a 100644 --- a/client/src/components/LeaderBoard.svelte +++ b/client/src/components/LeaderBoard.svelte @@ -1,5 +1,5 @@ <script lang="ts"> - import { type LeaderBoardEntry } from "../../lib/interfaces"; + import { type LeaderBoardEntry } from "@engine/interfaces"; import LeaderBoardCard from "./LeaderBoardCard.svelte"; const MAX_ENTRIES = 8; diff --git a/client/src/components/LeaderBoardCard.svelte b/client/src/components/LeaderBoardCard.svelte index 446d734..f46c000 100644 --- a/client/src/components/LeaderBoardCard.svelte +++ b/client/src/components/LeaderBoardCard.svelte @@ -1,5 +1,5 @@ <script lang="ts"> - import { type LeaderBoardEntry } from "../../lib/interfaces"; + import { type LeaderBoardEntry } from "@engine/interfaces"; export let entry: LeaderBoardEntry = { name: "simponic", |