UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

95 lines (78 loc) 1.79 kB
import { assert } from "../../../../assert.js"; /** * Represents cavity or "ball" formed when carving out "triangles" to accommodate inserted point */ export class Cavity { /** * * @type {number[]} */ __deleted = []; /** * * @type {number} */ __deleted_size = 0; /** * flat array of 5-tuples * @type {number[]} * @private */ __boundary = []; /** * * @type {number} * @private */ __boundary_size = 0; /** * Add boundary information * @param {number} vta * @param {number} node1 * @param {number} node2 * @param {number} node3 * @param {number} bnd */ push_boundary( vta, node1, node2, node3, bnd ) { const n = this.__boundary_size++; const n5 = n * 5; const boundary = this.__boundary; boundary[n5] = vta; boundary[n5 + 1] = node1; boundary[n5 + 2] = node2; boundary[n5 + 3] = node3; boundary[n5 + 4] = bnd; } /** * * @param {number} i */ push_deleted(i) { assert.equal(this.includes(i), false, `ball element ${i} already exists`); this.__deleted[this.__deleted_size++] = i; } /** * Primarily for debug * @param {number} i * @returns {boolean} */ includes(i) { const n = this.__deleted_size; for (let j = 0; j < n; j++) { if (this.__deleted[j] === i) { return true; } } return false; } reset() { this.__deleted_size = 0; this.__boundary_size = 0; } }