import { EntityData } from '../model/data/entity'; import { Renderer } from './renderer/renderer'; import { SpriteCoords, SpriteView, SpriteViewBuilder } from './sprite'; import { loadImage, mkTexture } from './util/image'; import { vec2 } from 'gl-matrix'; export async function loadEntity( r: Renderer, data: EntityData, ): Promise { 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 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]); return builder.build(); }