Files
Foundry-VTT-Docker/resources/app/client-esm/canvas/regions/geometry.mjs
2025-01-04 00:34:03 +01:00

66 lines
1.5 KiB
JavaScript

/**
* The geometry of a {@link Region}.
* - Vertex Attribute: `aVertexPosition` (`vec2`)
* - Draw Mode: `PIXI.DRAW_MODES.TRIANGLES`
*/
export default class RegionGeometry extends PIXI.Geometry {
/**
* Create a RegionGeometry.
* @param {Region} region The Region to create the RegionGeometry from.
* @internal
*/
constructor(region) {
super();
this.#region = region;
this.addAttribute("aVertexPosition", new PIXI.Buffer(new Float32Array(), true, false), 2);
this.addIndex(new PIXI.Buffer(new Uint16Array(), true, true));
}
/* -------------------------------------------- */
/**
* The Region this geometry belongs to.
* @type {Region}
*/
get region() {
return this.#region;
}
#region;
/* -------------------------------------------- */
/**
* Do the buffers need to be updated?
* @type {boolean}
*/
#invalidBuffers = true;
/* -------------------------------------------- */
/**
* Update the buffers.
* @internal
*/
_clearBuffers() {
this.buffers[0].update(new Float32Array());
this.indexBuffer.update(new Uint16Array());
this.#invalidBuffers = true;
}
/* -------------------------------------------- */
/**
* Update the buffers.
* @internal
*/
_updateBuffers() {
if ( !this.#invalidBuffers ) return;
const triangulation = this.region.triangulation;
this.buffers[0].update(triangulation.vertices);
this.indexBuffer.update(triangulation.indices);
this.#invalidBuffers = false;
}
}