2018-10-26 21:59:46 +02:00
|
|
|
import MapData from './model/data/MapData';
|
2017-09-09 02:52:01 +02:00
|
|
|
|
2018-10-31 21:12:22 +01:00
|
|
|
import { vec2 } from 'gl-matrix';
|
|
|
|
|
2018-10-31 15:33:52 +01:00
|
|
|
import { getJSON } from './util';
|
2018-10-31 21:12:22 +01:00
|
|
|
import { loadSimpleEntity } from './view/entity';
|
|
|
|
import DirectionHandler from './view/input/DirectionHandler';
|
2018-10-31 15:10:40 +01:00
|
|
|
import { loadMap } from './view/map';
|
2018-10-24 23:05:13 +02:00
|
|
|
import Renderer from './view/renderer/Renderer';
|
2017-09-09 02:52:01 +02:00
|
|
|
|
2018-10-31 22:10:54 +01:00
|
|
|
const entityPos = vec2.create();
|
2018-10-31 21:12:22 +01:00
|
|
|
const entityMovement = vec2.create();
|
|
|
|
|
2018-10-31 15:33:52 +01:00
|
|
|
window.onload = async () => {
|
2017-09-09 02:52:01 +02:00
|
|
|
const canvas = document.getElementById('rpgedit') as HTMLCanvasElement;
|
|
|
|
if (!canvas)
|
|
|
|
return;
|
|
|
|
|
2018-10-31 21:12:22 +01:00
|
|
|
const input = new DirectionHandler();
|
|
|
|
input.addListener((v) => {
|
|
|
|
if (vec2.sqrLen(v) > 0)
|
|
|
|
vec2.normalize(entityMovement, v);
|
|
|
|
else
|
|
|
|
vec2.copy(entityMovement, [0, 0]);
|
|
|
|
});
|
|
|
|
|
2017-09-11 23:24:13 +02:00
|
|
|
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);
|
2018-10-31 21:12:22 +01:00
|
|
|
|
|
|
|
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;
|
|
|
|
|
2018-10-31 22:10:54 +01:00
|
|
|
vec2.scaleAndAdd(entityPos, entityPos, entityMovement, diff / 100);
|
|
|
|
vec2.scale(entityPos, entityPos, res);
|
|
|
|
vec2.round(entityPos, entityPos);
|
|
|
|
vec2.scale(entityPos, entityPos, 1 / res);
|
2018-10-31 21:12:22 +01:00
|
|
|
|
2018-10-31 22:10:54 +01:00
|
|
|
renderer.setCenter(entityPos);
|
2018-10-31 21:12:22 +01:00
|
|
|
renderer.clear();
|
|
|
|
|
|
|
|
mapView.render();
|
|
|
|
|
2018-10-31 22:10:54 +01:00
|
|
|
renderer.setTranslation(entityPos);
|
2018-10-31 21:12:22 +01:00
|
|
|
entity.render();
|
|
|
|
|
|
|
|
window.requestAnimationFrame(render);
|
|
|
|
};
|
|
|
|
|
|
|
|
window.requestAnimationFrame(render);
|
2017-09-12 09:20:19 +02:00
|
|
|
};
|