summaryrefslogtreecommitdiffstats
path: root/src/renderer/runtime/controller/gamecontext.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer/runtime/controller/gamecontext.ts')
-rw-r--r--src/renderer/runtime/controller/gamecontext.ts53
1 files changed, 21 insertions, 32 deletions
diff --git a/src/renderer/runtime/controller/gamecontext.ts b/src/renderer/runtime/controller/gamecontext.ts
index 9a68e25..1b17314 100644
--- a/src/renderer/runtime/controller/gamecontext.ts
+++ b/src/renderer/runtime/controller/gamecontext.ts
@@ -1,7 +1,7 @@
import { CollidableGroup, collide, mkCollision } from './collision';
import { EntityContext } from './entitycontext';
-import { MapData } from '../model/data/map';
+import { MapData, MapDataInput } from '../model/data/map';
import { ButtonCode, GameInputHandler } from '../view/input/gameinput';
import { MapView } from '../view/map';
@@ -26,17 +26,11 @@ export class GameContext implements CollidableGroup {
vec2.set(player.pos, 7, 6);
vec2.set(entity.pos, 4, 3);
- return new GameContext(
- renderer,
- mapView,
- player,
- [entity],
- mapCollision,
- );
+ return new GameContext(renderer, mapView, player, [entity], mapCollision);
}
private static async loadMap(renderer: Renderer, name: string): Promise<[MapView, Collidable[]]> {
- const map = new MapData(await getJSON(`resources/map/${name}.json`));
+ const map = new MapData((await getJSON(`resources/map/${name}.json`)) as MapDataInput);
return [await MapView.load(renderer, map), mkCollision(map.collision)];
}
@@ -50,7 +44,7 @@ export class GameContext implements CollidableGroup {
private readonly input: GameInputHandler;
private readonly playerDir: vec2 = vec2.fromValues(0, 1);
- private speed: number = 0;
+ private speed = 0;
private readonly collisionRadius = 15 / 32;
private readonly interactLength = 1 / 32;
@@ -65,19 +59,18 @@ export class GameContext implements CollidableGroup {
this.input = new GameInputHandler();
this.input.addListener((input) => {
switch (input.type) {
- case 'button':
- if (input.button === ButtonCode.Action)
- this.interact();
- break;
-
- case 'direction':
- if (vec2.sqrLen(input.direction) > 0) {
- vec2.copy(this.playerDir, input.direction);
- this.speed = this.maxSpeed;
- } else {
- this.speed = 0;
- }
- break;
+ case 'button':
+ if (input.button === ButtonCode.Action) this.interact();
+ break;
+
+ case 'direction':
+ if (vec2.sqrLen(input.direction) > 0) {
+ vec2.copy(this.playerDir, input.direction);
+ this.speed = this.maxSpeed;
+ } else {
+ this.speed = 0;
+ }
+ break;
}
});
@@ -108,8 +101,7 @@ export class GameContext implements CollidableGroup {
private interact(): void {
for (const e of this.entities) {
- if (!this.canInteract(e))
- continue;
+ if (!this.canInteract(e)) continue;
e.interact();
break;
@@ -136,8 +128,7 @@ export class GameContext implements CollidableGroup {
const newDest = vec2.create();
while (this.updateStepCollide(newDest, dest)) {
- if (vec2.equals(newDest, this.player.pos))
- return;
+ if (vec2.equals(newDest, this.player.pos)) return;
vec2.copy(dest, newDest);
}
@@ -153,21 +144,19 @@ export class GameContext implements CollidableGroup {
return;
}
- for (let i = 0; i < diff; i++)
- this.updateStep();
+ for (let i = 0; i < diff; i++) this.updateStep();
}
private render(): void {
this.renderer.setCenter(this.player.pos);
this.renderer.clear();
- for (const r of [this.mapView, ...this.entities, this.player])
- r.render(this.time);
+ for (const r of [this.mapView, ...this.entities, this.player]) r.render(this.time);
}
private async renderLoop(): Promise<void> {
while (true) {
- this.update(await nextAnimationFrame() - this.initTime);
+ this.update((await nextAnimationFrame()) - this.initTime);
this.render();
}
}