diff options
Diffstat (limited to 'src/view/entity.ts')
-rw-r--r-- | src/view/entity.ts | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/src/view/entity.ts b/src/view/entity.ts deleted file mode 100644 index ec91503..0000000 --- a/src/view/entity.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { EntityData } from '../model/data/entity'; -import { Renderer } from './renderer/renderer'; -import { SpriteCoords, SpriteView, SpriteViewBuilder } from './sprite'; -import { loadImage, mkTexture } from './util/image'; - -import { getJSON } from '../util'; - -import { vec2 } from 'gl-matrix'; - -export class EntityView { - public static async load(r: Renderer, name: string): Promise<EntityView> { - const data = new EntityData(await getJSON(`resources/entity/${name}.json`)); - const tile = await loadImage(`resources/sprite/entity/${data.sprite}.png`); - - const [texture, size] = mkTexture(r, tile); - const frameSize = [size[0], size[1] / data.frames]; - - const offset = vec2.mul(vec2.create(), frameSize, data.anchor); - r.snapToGrid(offset, offset); - - const coords: SpriteCoords = [ - -offset[0], - -offset[1], - -offset[0] + frameSize[0], - -offset[1] + frameSize[1], - ]; - - const sprites: SpriteView[] = []; - - for (let frame = 0; frame < data.frames; frame++) { - const builder = new SpriteViewBuilder(r, texture); - builder.addSprite(coords, [0, frame / data.frames, 1, (frame + 1) / data.frames]); - sprites.push(builder.build()); - } - - return new EntityView( - data, - sprites, - ); - } - - private readonly totalTime: number; - - private constructor( - public readonly data: EntityData, - public readonly sprites: SpriteView[], - ) { - if (data.animation) - this.totalTime = data.animation.sequence.reduce((a, s) => a + s[0], 0); - else - this.totalTime = 0; - } - - public getSpriteByTime(time: number): SpriteView { - time %= this.totalTime; - - if (this.data.animation) { - for (const [len, sprite] of this.data.animation.sequence) { - time -= len; - if (time < 0) - return this.sprites[sprite]; - } - } - - return this.sprites[0]; - } - - public renderByTime(time: number) { - this.getSpriteByTime(time).render(); - } - -} |