UNPKG

ts-game-engine

Version:

Simple WebGL game/render engine written in TypeScript

129 lines (128 loc) 5.58 kB
"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;