1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
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<SpriteView[]> {
const tile = await loadImage(`resources/sprite/entity/${data.sprite}.png`);
const sprites: SpriteView[] = [];
for (let frame = 0; frame < data.frames; frame++) {
const [texture, coords] = mkTexture(r, tile, frame, data.frames);
const offset = vec2.fromValues(coords[2] - coords[0], coords[3] - coords[1]);
vec2.mul(offset, offset, data.anchor);
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;
}
|