diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2018-11-08 22:03:08 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2018-11-08 22:25:53 +0100 |
commit | 5eae6f29a80cd47e268cb6eaefa96a0ab0a63e54 (patch) | |
tree | 2631f7b3a9d55adc7d07408b30aecb7b714c25be /src/controller/entitycontext.ts | |
parent | 40339947d1a2407a6be95fad58215cdaf7d4c2c9 (diff) | |
download | rpgedit-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.ts | 45 |
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; + } +} |