This repository has been archived on 2025-03-02. You can view files and clone it, but cannot push or open issues or pull requests.
rpgedit/src/index.ts

62 lines
1.5 KiB
TypeScript
Raw Normal View History

import MapData from './model/data/MapData';
import { vec2 } from 'gl-matrix';
2018-10-31 15:33:52 +01:00
import { getJSON } from './util';
import { loadSimpleEntity } from './view/entity';
import DirectionHandler from './view/input/DirectionHandler';
2018-10-31 15:10:40 +01:00
import { loadMap } from './view/map';
import Renderer from './view/renderer/Renderer';
const entityPos = vec2.create();
const entityMovement = vec2.create();
2018-10-31 15:33:52 +01:00
window.onload = async () => {
const canvas = document.getElementById('rpgedit') as HTMLCanvasElement;
if (!canvas)
return;
const input = new DirectionHandler();
input.addListener((v) => {
if (vec2.sqrLen(v) > 0)
vec2.normalize(entityMovement, v);
else
vec2.copy(entityMovement, [0, 0]);
});
const renderer = new Renderer(canvas);
2017-09-12 09:20:19 +02:00
2018-10-31 15:33:52 +01:00
const map = new MapData(await getJSON('resources/map/test.json'));
const mapView = await loadMap(renderer, map);
const entity = await loadSimpleEntity(renderer, 'simple_square');
let prevTime: number|null = null;
const render = (time: number) => {
const res = 64;
let diff = 0;
if (prevTime !== null)
diff = time - prevTime;
prevTime = time;
vec2.scaleAndAdd(entityPos, entityPos, entityMovement, diff / 100);
vec2.scale(entityPos, entityPos, res);
vec2.round(entityPos, entityPos);
vec2.scale(entityPos, entityPos, 1 / res);
renderer.setCenter(entityPos);
renderer.clear();
mapView.render();
renderer.setTranslation(entityPos);
entity.render();
window.requestAnimationFrame(render);
};
window.requestAnimationFrame(render);
2017-09-12 09:20:19 +02:00
};