summaryrefslogtreecommitdiffstats
path: root/src/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/index.ts')
-rw-r--r--src/index.ts48
1 files changed, 47 insertions, 1 deletions
diff --git a/src/index.ts b/src/index.ts
index b4109e6..b6bcd26 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,17 +1,63 @@
import MapData from './model/data/MapData';
+import { vec2 } from 'gl-matrix';
+
import { getJSON } from './util';
+import { loadSimpleEntity } from './view/entity';
+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 entityMovement = vec2.create();
+
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);
const map = new MapData(await getJSON('resources/map/test.json'));
const mapView = await loadMap(renderer, map);
- mapView.render();
+
+ 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(entityCenter, entityCenter, entityMovement, diff / 100);
+ vec2.scale(entityCenter, entityCenter, res);
+ vec2.round(entityCenter, entityCenter);
+ vec2.scale(entityCenter, entityCenter, 1 / res);
+
+ renderer.setCenter(entityCenter);
+ renderer.clear();
+
+ mapView.render();
+
+ vec2.sub(entityTranslation, entityCenter, [0.5, 0.5]);
+ renderer.setTranslation(entityTranslation);
+ entity.render();
+
+ window.requestAnimationFrame(render);
+ };
+
+ window.requestAnimationFrame(render);
};