55 lines
1.2 KiB
TypeScript
55 lines
1.2 KiB
TypeScript
|
import { Floor, Player } from "./entities";
|
||
|
import { Game } from "./Game";
|
||
|
import {
|
||
|
WallBounds,
|
||
|
FacingDirection,
|
||
|
Render,
|
||
|
Physics,
|
||
|
Input,
|
||
|
Collision,
|
||
|
} from "./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;
|
||
|
}
|
||
|
}
|