From 5eae6f29a80cd47e268cb6eaefa96a0ab0a63e54 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 8 Nov 2018 22:03:08 +0100 Subject: Implement more flexible handling of entities and collidables --- src/controller/entitycontext.ts | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/controller/entitycontext.ts (limited to 'src/controller/entitycontext.ts') 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 { + 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; + } +} -- cgit v1.2.3