summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2018-10-31 23:13:52 +0100
committerMatthias Schiffer <mschiffer@universe-factory.net>2018-10-31 23:25:26 +0100
commit1ae0884a7376a87a2df4a77d1ba861cd58a4dda7 (patch)
treefa70185d4163d6a2a6132f4246ba550d38e831e5 /src
parent5372d1b4173234a5066010a4ca973a5b1ad2a629 (diff)
downloadrpgedit-1ae0884a7376a87a2df4a77d1ba861cd58a4dda7.tar
rpgedit-1ae0884a7376a87a2df4a77d1ba861cd58a4dda7.zip
controller: clean up GameContext a bit
Diffstat (limited to 'src')
-rw-r--r--src/controller/gamecontext.ts19
-rw-r--r--src/view/renderer/Renderer.ts13
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);
}
}