diff options
Diffstat (limited to 'src/index.ts')
-rw-r--r-- | src/index.ts | 48 |
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); }; |