summaryrefslogtreecommitdiffstats
path: root/src/controller/entitycontext.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/controller/entitycontext.ts')
-rw-r--r--src/controller/entitycontext.ts45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/controller/entitycontext.ts b/src/controller/entitycontext.ts
new file mode 100644
index 0000000..c11c698
--- /dev/null
+++ b/src/controller/entitycontext.ts
@@ -0,0 +1,45 @@
+import { EntityData } from '../model/data/entity';
+
+import { loadEntity } from '../view/entity';
+import { Renderer } from '../view/renderer/renderer';
+import { SpriteView } from '../view/sprite';
+
+import { Collidable } from '../math/collision';
+
+import { getJSON } from '../util';
+import { CollidableGroup, mkCollision } from './collision';
+
+import { vec2 } from 'gl-matrix';
+
+export class EntityContext implements CollidableGroup {
+ public static async load(renderer: Renderer, name: string): Promise<EntityContext> {
+ const entity = new EntityData(await getJSON(`resources/entity/${name}.json`));
+
+ return new EntityContext(
+ renderer,
+ await loadEntity(renderer, entity),
+ mkCollision(entity.collision),
+ );
+ }
+
+ public readonly pos: vec2 = vec2.create();
+
+ private constructor(
+ private readonly renderer: Renderer,
+ private readonly view: SpriteView,
+ public readonly collision: Collidable[],
+ ) {}
+
+ public render() {
+ this.renderer.setTranslation(this.pos);
+ this.view.render();
+ }
+
+ public getTranslation(): vec2 {
+ return this.pos;
+ }
+
+ public getCollidables(): Collidable[] {
+ return this.collision;
+ }
+}