summaryrefslogtreecommitdiffstats
path: root/src/controller/entitycontext.ts
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2018-11-08 22:03:08 +0100
committerMatthias Schiffer <mschiffer@universe-factory.net>2018-11-08 22:25:53 +0100
commit5eae6f29a80cd47e268cb6eaefa96a0ab0a63e54 (patch)
tree2631f7b3a9d55adc7d07408b30aecb7b714c25be /src/controller/entitycontext.ts
parent40339947d1a2407a6be95fad58215cdaf7d4c2c9 (diff)
downloadrpgedit-5eae6f29a80cd47e268cb6eaefa96a0ab0a63e54.tar
rpgedit-5eae6f29a80cd47e268cb6eaefa96a0ab0a63e54.zip
Implement more flexible handling of entities and collidables
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;
+ }
+}