diff --git a/src/js/common.js b/src/js/common.js
index 2511fe2..75f1d8a 100644
--- a/src/js/common.js
+++ b/src/js/common.js
@@ -10,6 +10,9 @@ export class Vec2 {
this.x = x;
this.y = y;
}
+ from(scalar) {
+ return new Vec2(scalar, scalar);
+ }
static ZERO() {
return new Vec2(0, 0);
}
@@ -99,6 +102,9 @@ export class Vec3 {
this.y = y;
this.z = z;
}
+ from(scalar) {
+ return new Vec3(scalar, scalar, scalar);
+ }
addScalar(scalar) {
this.x += scalar;
this.y += scalar;
@@ -199,6 +205,9 @@ export class Vec4 {
this.z = z;
this.w = w;
}
+ from(scalar) {
+ return new Vec4(scalar, scalar, scalar, scalar);
+ }
static ZERO() {
return new Vec4(0, 0, 0, 0);
}
diff --git a/src/js/common.ts b/src/js/common.ts
index a776612..dcfd012 100644
--- a/src/js/common.ts
+++ b/src/js/common.ts
@@ -9,6 +9,8 @@ export function initializeContext(canvasId: string): WebGL2RenderingContext | nu
interface Vector
{
copy(): T;
+ from(scalar: number): T;
+
add(other: T): void;
addNew(other: T): T;
@@ -26,6 +28,7 @@ interface Vector
{
reduce(): P;
extend(value: number): N;
+
}
export class Vec2 implements Vector {
@@ -37,6 +40,10 @@ export class Vec2 implements Vector {
this.y = y;
}
+ from(scalar: number): Vec2 {
+ return new Vec2(scalar, scalar);
+ }
+
static ZERO(): Vec2 {
return new Vec2(0, 0);
}
@@ -156,6 +163,10 @@ export class Vec3 implements Vector {
this.z = z;
}
+ from(scalar: number): Vec3 {
+ return new Vec3(scalar, scalar, scalar);
+ }
+
addScalar(scalar: number): void {
this.x += scalar;
this.y += scalar;
@@ -288,6 +299,10 @@ export class Vec4 implements Vector {
this.w = w;
}
+ from(scalar: number): Vec4 {
+ return new Vec4(scalar, scalar, scalar, scalar);
+ }
+
static ZERO(): Vec4 {
return new Vec4(0, 0, 0, 0);
}
diff --git a/src/js/draw.js b/src/js/draw.js
index de302b3..be8a00f 100644
--- a/src/js/draw.js
+++ b/src/js/draw.js
@@ -136,6 +136,9 @@ export function drawIsometricGrid(gfx, camera, grid) {
DrawTag.ISO,
]);
let mt = Mat4.translate(camera.position.multScalarNew(-1.0));
+ let ms = Mat4.scale(new Vec3(1 / camera.scale, 1 / camera.scale, 0));
+ let mc = Mat4.translate(new Vec3((gfx.ctx.canvas.width / 2 - camera.position.x), (gfx.ctx.canvas.height / 2 - camera.position.y), 1.0));
+ let mr = Mat4.translate(new Vec3(-(gfx.ctx.canvas.width / 2 - camera.position.x), -(gfx.ctx.canvas.height / 2 - camera.position.y), 1.0));
let mi = Mat4.isometric();
let bias = 4 * grid.tileSize;
let bb = [
@@ -146,6 +149,9 @@ export function drawIsometricGrid(gfx, camera, grid) {
];
for (let i = 0; i < bb.length; ++i) {
bb[i] = mt.transformNew(bb[i].extend(1.0)).reduce();
+ bb[i] = mr.transformNew(bb[i].extend(1.0)).reduce();
+ bb[i] = ms.transformNew(bb[i].extend(1.0)).reduce();
+ bb[i] = mc.transformNew(bb[i].extend(1.0)).reduce();
}
for (let k = 0; k < grid.topHeight; ++k) {
for (let j = 0; j < grid.breadth; ++j) {
diff --git a/src/js/draw.ts b/src/js/draw.ts
index 80ab109..440c4eb 100644
--- a/src/js/draw.ts
+++ b/src/js/draw.ts
@@ -172,6 +172,18 @@ export function drawIsometricGrid(gfx: Graphics, camera: Camera, grid: Grid) {
]);
let mt = Mat4.translate(camera.position.multScalarNew(-1.0));
+ let ms = Mat4.scale(new Vec3(1 / camera.scale, 1 /camera.scale, 0));
+ let mc = Mat4.translate(
+ new Vec3(
+ (gfx.ctx.canvas.width / 2 - camera.position.x),
+ (gfx.ctx.canvas.height / 2 - camera.position.y),
+ 1.0));
+
+ let mr = Mat4.translate(
+ new Vec3(
+ -(gfx.ctx.canvas.width / 2 - camera.position.x),
+ -(gfx.ctx.canvas.height / 2 - camera.position.y),
+ 1.0));
let mi = Mat4.isometric();
let bias = 4*grid.tileSize;
@@ -185,6 +197,9 @@ export function drawIsometricGrid(gfx: Graphics, camera: Camera, grid: Grid) {
for (let i = 0; i < bb.length; ++i) {
bb[i] = mt.transformNew(bb[i].extend(1.0)).reduce();
+ bb[i] = mr.transformNew(bb[i].extend(1.0)).reduce();
+ bb[i] = ms.transformNew(bb[i].extend(1.0)).reduce();
+ bb[i] = mc.transformNew(bb[i].extend(1.0)).reduce();
}
for (let k = 0; k < grid.topHeight; ++k) {