summaryrefslogtreecommitdiffstats
path: root/src/view/entity.ts
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2018-11-10 20:24:25 +0100
committerMatthias Schiffer <mschiffer@universe-factory.net>2018-11-10 20:24:25 +0100
commitc9000b7c385b530bddf87cfed4b580b5d1a2d6d2 (patch)
tree7afdbdf1435c20f694c1eaeca6d7aa54c62d8e64 /src/view/entity.ts
parentfa3dad090c7abd8b13ad107e4dcb406012b63243 (diff)
downloadrpgedit-c9000b7c385b530bddf87cfed4b580b5d1a2d6d2.tar
rpgedit-c9000b7c385b530bddf87cfed4b580b5d1a2d6d2.zip
view: add support for non-square, non-power-of-2 sprites
Diffstat (limited to 'src/view/entity.ts')
-rw-r--r--src/view/entity.ts18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/view/entity.ts b/src/view/entity.ts
index 421a238..b59bf92 100644
--- a/src/view/entity.ts
+++ b/src/view/entity.ts
@@ -1,18 +1,28 @@
import { EntityData } from '../model/data/entity';
import { Renderer } from './renderer/renderer';
-import { SpriteView, SpriteViewBuilder } from './sprite';
+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 = mkTexture(r.getContext(), tile);
+ const [texture, size, coords] = mkTexture(r, tile);
+
+ const offset = vec2.mul(vec2.create(), data.anchor, size);
+ r.snapToGrid(offset, offset);
- const [x, y] = data.anchor;
+ 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([-x, -y, -x + 1, -y + 1], [0, 0, 1, 1]);
+ builder.addSprite(anchorCoords, [0, 0, 1, 1]);
return builder.build();
}