diff options
Diffstat (limited to 'src/view/entity.ts')
-rw-r--r-- | src/view/entity.ts | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/src/view/entity.ts b/src/view/entity.ts index b59bf92..7600826 100644 --- a/src/view/entity.ts +++ b/src/view/entity.ts @@ -8,21 +8,28 @@ import { vec2 } from 'gl-matrix'; export async function loadEntity( r: Renderer, data: EntityData, -): Promise<SpriteView> { +): Promise<SpriteView[]> { const tile = await loadImage(`resources/sprite/entity/${data.sprite}.png`); - const [texture, size, coords] = mkTexture(r, tile); - const offset = vec2.mul(vec2.create(), data.anchor, size); - r.snapToGrid(offset, offset); + const sprites: SpriteView[] = []; - const anchorCoords: SpriteCoords = [ - coords[0] - offset[0], - coords[1] - offset[1], - coords[2] - offset[0], - coords[3] - offset[1], - ]; + for (let frame = 0; frame < data.frames; frame++) { + const [texture, size, coords] = mkTexture(r, tile, frame, data.frames); - const builder = new SpriteViewBuilder(r, texture); - builder.addSprite(anchorCoords, [0, 0, 1, 1]); - return builder.build(); + const offset = vec2.mul(vec2.create(), data.anchor, size); + r.snapToGrid(offset, offset); + + const anchorCoords: SpriteCoords = [ + coords[0] - offset[0], + coords[1] - offset[1], + coords[2] - offset[0], + coords[3] - offset[1], + ]; + + const builder = new SpriteViewBuilder(r, texture); + builder.addSprite(anchorCoords, [0, 0, 1, 1]); + sprites.push(builder.build()); + } + + return sprites; } |