view: make entity anchor point configurable, default to center
This commit is contained in:
parent
1f9cd7a110
commit
b08479af40
2 changed files with 15 additions and 14 deletions
16
src/index.ts
16
src/index.ts
|
@ -8,8 +8,7 @@ import DirectionHandler from './view/input/DirectionHandler';
|
|||
import { loadMap } from './view/map';
|
||||
import Renderer from './view/renderer/Renderer';
|
||||
|
||||
const entityCenter = vec2.create();
|
||||
const entityTranslation = vec2.create();
|
||||
const entityPos = vec2.create();
|
||||
const entityMovement = vec2.create();
|
||||
|
||||
window.onload = async () => {
|
||||
|
@ -42,18 +41,17 @@ window.onload = async () => {
|
|||
diff = time - prevTime;
|
||||
prevTime = time;
|
||||
|
||||
vec2.scaleAndAdd(entityCenter, entityCenter, entityMovement, diff / 100);
|
||||
vec2.scale(entityCenter, entityCenter, res);
|
||||
vec2.round(entityCenter, entityCenter);
|
||||
vec2.scale(entityCenter, entityCenter, 1 / res);
|
||||
vec2.scaleAndAdd(entityPos, entityPos, entityMovement, diff / 100);
|
||||
vec2.scale(entityPos, entityPos, res);
|
||||
vec2.round(entityPos, entityPos);
|
||||
vec2.scale(entityPos, entityPos, 1 / res);
|
||||
|
||||
renderer.setCenter(entityCenter);
|
||||
renderer.setCenter(entityPos);
|
||||
renderer.clear();
|
||||
|
||||
mapView.render();
|
||||
|
||||
vec2.sub(entityTranslation, entityCenter, [0.5, 0.5]);
|
||||
renderer.setTranslation(entityTranslation);
|
||||
renderer.setTranslation(entityPos);
|
||||
entity.render();
|
||||
|
||||
window.requestAnimationFrame(render);
|
||||
|
|
|
@ -2,14 +2,17 @@ import Renderer from './renderer/Renderer';
|
|||
import { SpriteCoords, SpriteView, SpriteViewBuilder } from './sprite';
|
||||
import { loadImage, mkTexture } from './util/image';
|
||||
|
||||
export async function loadSimpleEntity(r: Renderer, sprite: string): Promise<SpriteView> {
|
||||
export async function loadSimpleEntity(
|
||||
r: Renderer,
|
||||
sprite: string,
|
||||
anchor: [number, number] = [0.5, 0.5],
|
||||
): Promise<SpriteView> {
|
||||
const tile = await loadImage(`resources/sprite/entity/${sprite}.png`);
|
||||
const texture = mkTexture(r.getContext(), tile);
|
||||
|
||||
const [x, y] = anchor;
|
||||
|
||||
const builder = new SpriteViewBuilder(r, texture);
|
||||
|
||||
const coords: SpriteCoords = [0, 0, 1, 1];
|
||||
builder.addSprite(coords, coords);
|
||||
|
||||
builder.addSprite([-x, -y, 1 - x, 1 - y], [0, 0, 1, 1]);
|
||||
return builder.build();
|
||||
}
|
||||
|
|
Reference in a new issue