diff options
-rw-r--r-- | src/controller/gamecontext.ts | 19 | ||||
-rw-r--r-- | src/view/renderer/Renderer.ts | 13 |
2 files changed, 16 insertions, 16 deletions
diff --git a/src/controller/gamecontext.ts b/src/controller/gamecontext.ts index 76ca7cc..4d86abf 100644 --- a/src/controller/gamecontext.ts +++ b/src/controller/gamecontext.ts @@ -10,14 +10,6 @@ import { getJSON } from '../util'; import { vec2 } from 'gl-matrix'; -function snapToGrid(out: vec2, a: vec2): void { - const res = 64; - - vec2.scale(out, a, res); - vec2.round(out, out); - vec2.scale(out, out, 1 / res); -} - export class GameContext { public static async load(renderer: Renderer): Promise<GameContext> { const [ @@ -66,10 +58,7 @@ export class GameContext { } private updateTime(time: number): number { - let diff = 0; - if (this.time !== null) - diff = time - this.time; - + const diff = this.time !== null ? time - this.time : 0; this.time = time; return diff; @@ -78,8 +67,10 @@ export class GameContext { private update(time: number): void { const diff = this.updateTime(time); - vec2.scaleAndAdd(this.entityPos, this.entityPos, this.entityMovement, diff * this.speed); - snapToGrid(this.entityPos, this.entityPos); + if (vec2.sqrLen(this.entityMovement) > 0) + vec2.scaleAndAdd(this.entityPos, this.entityPos, this.entityMovement, diff * this.speed); + else + this.renderer.snapToGrid(this.entityPos, this.entityPos); } private render = (time: number) => { diff --git a/src/view/renderer/Renderer.ts b/src/view/renderer/Renderer.ts index 344bccf..75dc265 100644 --- a/src/view/renderer/Renderer.ts +++ b/src/view/renderer/Renderer.ts @@ -3,6 +3,8 @@ import { mat4, vec2 } from 'gl-matrix'; import Shaders from './Shaders'; export default class Renderer { + private readonly viewScale = 64; + private readonly gl: WebGLRenderingContext; private readonly shaders: Shaders; @@ -49,11 +51,12 @@ export default class Renderer { } public setCenter(v: vec2|number[]) { - vec2.copy(this.center, v); + this.snapToGrid(this.center, v); } public setTranslation(v: vec2|number[]) { vec2.sub(this.translation, v, this.center); + this.snapToGrid(this.translation, this.translation); this.gl.uniform2fv(this.shaders.translateLoc, this.translation); } @@ -63,6 +66,12 @@ export default class Renderer { this.setTranslation([0, 0]); } + public snapToGrid(out: vec2, a: vec2|number[]): void { + vec2.scale(out, a, this.viewScale); + vec2.round(out, out); + vec2.scale(out, out, 1 / this.viewScale); + } + private mkContext(): WebGLRenderingContext { const gl = ( this.canvas.getContext('webgl') || this.canvas.getContext('experimental-webgl') @@ -81,7 +90,7 @@ export default class Renderer { this.clear(); mat4.identity(this.viewport); - mat4.scale(this.viewport, this.viewport, [2 * 64 / w, -2 * 64 / h, 1.0]); + mat4.scale(this.viewport, this.viewport, [2 * this.viewScale / w, -2 * this.viewScale / h, 1.0]); this.gl.uniformMatrix4fv(this.shaders.viewportLoc, false, this.viewport); } } |