diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2018-11-10 20:24:25 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2018-11-10 20:24:25 +0100 |
commit | c9000b7c385b530bddf87cfed4b580b5d1a2d6d2 (patch) | |
tree | 7afdbdf1435c20f694c1eaeca6d7aa54c62d8e64 /src/view/entity.ts | |
parent | fa3dad090c7abd8b13ad107e4dcb406012b63243 (diff) | |
download | rpgedit-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.ts | 18 |
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(); } |