ts-game-engine
Version:
Simple WebGL game/render engine written in TypeScript
129 lines (128 loc) • 5.58 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Mesh_1 = require("./Mesh");
const gl_matrix_1 = require("gl-matrix");
class GridMesh extends Mesh_1.Mesh {
constructor(scene, gridSize, gridSubdivisions, subdivisionsColor) {
super(scene);
this.gridSize = gridSize;
this.gridSubdivisions = gridSubdivisions;
this.subdivisionsColor = subdivisionsColor;
this.cellSize = gridSize / gridSubdivisions;
const vertexCount = 8 * this.gridSubdivisions + 6;
const vertexData = new Float32Array(vertexCount * (Mesh_1.VERTEX_POSITION_SIZE + Mesh_1.VERTEX_COLOR_SIZE));
let v = 0;
for (let s = 0; s < this.gridSubdivisions; s++) {
const distance = this.cellSize * (s + 1);
vertexData[v++] = -distance;
vertexData[v++] = 0;
vertexData[v++] = -this.gridSize;
vertexData[v++] = this.subdivisionsColor[0];
vertexData[v++] = this.subdivisionsColor[1];
vertexData[v++] = this.subdivisionsColor[2];
vertexData[v++] = this.subdivisionsColor[3];
vertexData[v++] = -distance;
vertexData[v++] = 0;
vertexData[v++] = this.gridSize;
vertexData[v++] = this.subdivisionsColor[0];
vertexData[v++] = this.subdivisionsColor[1];
vertexData[v++] = this.subdivisionsColor[2];
vertexData[v++] = this.subdivisionsColor[3];
vertexData[v++] = distance;
vertexData[v++] = 0;
vertexData[v++] = -this.gridSize;
vertexData[v++] = this.subdivisionsColor[0];
vertexData[v++] = this.subdivisionsColor[1];
vertexData[v++] = this.subdivisionsColor[2];
vertexData[v++] = this.subdivisionsColor[3];
vertexData[v++] = distance;
vertexData[v++] = 0;
vertexData[v++] = this.gridSize;
vertexData[v++] = this.subdivisionsColor[0];
vertexData[v++] = this.subdivisionsColor[1];
vertexData[v++] = this.subdivisionsColor[2];
vertexData[v++] = this.subdivisionsColor[3];
vertexData[v++] = -this.gridSize;
vertexData[v++] = 0;
vertexData[v++] = -distance;
vertexData[v++] = this.subdivisionsColor[0];
vertexData[v++] = this.subdivisionsColor[1];
vertexData[v++] = this.subdivisionsColor[2];
vertexData[v++] = this.subdivisionsColor[3];
vertexData[v++] = this.gridSize;
vertexData[v++] = 0;
vertexData[v++] = -distance;
vertexData[v++] = this.subdivisionsColor[0];
vertexData[v++] = this.subdivisionsColor[1];
vertexData[v++] = this.subdivisionsColor[2];
vertexData[v++] = this.subdivisionsColor[3];
vertexData[v++] = -this.gridSize;
vertexData[v++] = 0;
vertexData[v++] = distance;
vertexData[v++] = this.subdivisionsColor[0];
vertexData[v++] = this.subdivisionsColor[1];
vertexData[v++] = this.subdivisionsColor[2];
vertexData[v++] = this.subdivisionsColor[3];
vertexData[v++] = this.gridSize;
vertexData[v++] = 0;
vertexData[v++] = distance;
vertexData[v++] = this.subdivisionsColor[0];
vertexData[v++] = this.subdivisionsColor[1];
vertexData[v++] = this.subdivisionsColor[2];
vertexData[v++] = this.subdivisionsColor[3];
}
// X
vertexData[v++] = -this.gridSize;
vertexData[v++] = 0;
vertexData[v++] = 0;
vertexData[v++] = 1;
vertexData[v++] = 0;
vertexData[v++] = 0;
vertexData[v++] = 1;
vertexData[v++] = this.gridSize;
vertexData[v++] = 0;
vertexData[v++] = 0;
vertexData[v++] = 1;
vertexData[v++] = 0.85;
vertexData[v++] = 0;
vertexData[v++] = 1;
// Y
vertexData[v++] = 0;
vertexData[v++] = -this.gridSize;
vertexData[v++] = 0;
vertexData[v++] = 0;
vertexData[v++] = 0.75;
vertexData[v++] = 0;
vertexData[v++] = 1;
vertexData[v++] = 0;
vertexData[v++] = this.gridSize;
vertexData[v++] = 0;
vertexData[v++] = 0.85;
vertexData[v++] = 1;
vertexData[v++] = 0;
vertexData[v++] = 1;
// Z
vertexData[v++] = 0;
vertexData[v++] = 0;
vertexData[v++] = -this.gridSize;
vertexData[v++] = 0;
vertexData[v++] = 0;
vertexData[v++] = 1;
vertexData[v++] = 1;
vertexData[v++] = 0;
vertexData[v++] = 0;
vertexData[v++] = this.gridSize;
vertexData[v++] = 0;
vertexData[v++] = 0.85;
vertexData[v++] = 1;
vertexData[v++] = 1;
const vertexFormat = 1 /* Position */ | 2 /* Color */;
this.SetVertexData(vertexFormat, 1 /* Lines */, vertexCount, vertexData, false);
let min = gl_matrix_1.vec3.fromValues(-this.gridSize, -this.gridSize, -this.gridSize);
let max = gl_matrix_1.vec3.fromValues(this.gridSize, this.gridSize, this.gridSize);
let radius = gl_matrix_1.vec3.len(max);
this.SetBounds(min, max); // { center: vec3.fromValues(0, 0, 0), radius: radius }
this.isLoaded = true;
}
}
exports.GridMesh = GridMesh;