summaryrefslogtreecommitdiff
path: root/client/src
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-07-20 20:47:32 -0700
committerElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-07-20 20:47:32 -0700
commit72c6c7de12e9833f52bf2d0718d70f044f8ab57e (patch)
tree152f5f31d59011bb8c617bfbcfc44cc8f47ecad5 /client/src
parent0fd9fb097552686f2257c1aa689d797e80057bd1 (diff)
downloadjumpstorm-72c6c7de12e9833f52bf2d0718d70f044f8ab57e.tar.gz
jumpstorm-72c6c7de12e9833f52bf2d0718d70f044f8ab57e.zip
a bit of refactoring; importing engine into bun for server
Diffstat (limited to 'client/src')
-rw-r--r--client/src/JumpStorm.ts54
-rw-r--r--client/src/components/GameCanvas.svelte9
-rw-r--r--client/src/components/LeaderBoard.svelte2
-rw-r--r--client/src/components/LeaderBoardCard.svelte2
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",