Files
Foundry-VTT-Docker/resources/app/client/pixi/layers/grid/mesh.js
2025-01-04 00:34:03 +01:00

90 lines
2.5 KiB
JavaScript

/**
* The grid mesh data.
* @typedef {object} GridMeshData
* @property {number} type The type of the grid (see {@link CONST.GRID_TYPES})
* @property {number} width The width of the grid in pixels
* @property {number} height The height of the grid in pixels
* @property {number} size The size of a grid space in pixels
* @property {number} thickness The thickness of the grid lines in pixels
* @property {number} color The color of the grid
* @property {number} alpha The alpha of the grid
*/
/**
* The grid mesh, which uses the {@link GridShader} to render the grid.
*/
class GridMesh extends QuadMesh {
/**
* The grid mesh constructor.
* @param {typeof GridShader} [shaderClass=GridShader] The shader class
*/
constructor(shaderClass=GridShader) {
super(shaderClass);
this.width = 0;
this.height = 0;
this.alpha = 0;
this.renderable = false;
}
/* -------------------------------------------- */
/**
* The data of this mesh.
* @type {GridMeshData}
*/
data = {
type: CONST.GRID_TYPES.GRIDLESS,
width: 0,
height: 0,
size: 0,
thickness: 1,
color: 0,
alpha: 1
};
/* -------------------------------------------- */
/**
* Initialize and update the mesh given the (partial) data.
* @param {Partial<GridMeshData>} data The (partial) data.
* @returns {this}
*/
initialize(data) {
// Update the data
this._initialize(data);
// Update the width, height, and alpha
const d = this.data;
this.width = d.width;
this.height = d.height;
this.alpha = d.alpha;
// Don't render if gridless or the thickness isn't positive positive
this.renderable = (d.type !== CONST.GRID_TYPES.GRIDLESS) && (d.thickness > 0);
return this;
}
/* -------------------------------------------- */
/**
* Initialize the data of this mesh given the (partial) data.
* @param {Partial<GridMeshData>} data The (partial) data.
* @protected
*/
_initialize(data) {
const d = this.data;
if ( data.type !== undefined ) d.type = data.type;
if ( data.width !== undefined ) d.width = data.width;
if ( data.height !== undefined ) d.height = data.height;
if ( data.size !== undefined ) d.size = data.size;
if ( data.thickness !== undefined ) d.thickness = data.thickness;
if ( data.color !== undefined ) {
const color = Color.from(data.color);
d.color = color.valid ? color.valueOf() : 0;
}
if ( data.alpha !== undefined ) d.alpha = data.alpha;
}
}