summaryrefslogtreecommitdiffstats
path: root/src/view/entity.ts
blob: b59bf92ee3d526c99d9f3252d2c1839d0ec1da09 (plain)
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
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 [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();
}