export function adjustPolygonPoints(drawing){
|
|
let globalCoords = [];
|
|
if (drawing.document.shape.points.length != 0) {
|
|
for (let i = 0; i < drawing.document.shape.points.length; i += 2) {
|
|
globalCoords.push(
|
|
drawing.document.shape.points[i] + (drawing.x),
|
|
drawing.document.shape.points[i + 1] + (drawing.y)
|
|
);
|
|
}
|
|
} else {
|
|
globalCoords = [
|
|
drawing.x,
|
|
drawing.y,
|
|
drawing.x + drawing.document.shape.width,
|
|
drawing.y,
|
|
drawing.x + drawing.document.shape.width,
|
|
drawing.y + drawing.document.shape.height,
|
|
drawing.x,
|
|
drawing.y + drawing.document.shape.height,
|
|
];
|
|
}
|
|
return globalCoords;
|
|
}
|
|
|
|
export function inRange(document, elevation){
|
|
const rangeBottom = document.flags?.levels?.rangeBottom ?? -Infinity;
|
|
const rangeTop = document.flags?.levels?.rangeTop ?? Infinity;
|
|
return elevation >= rangeBottom && elevation <= rangeTop;
|
|
}
|
|
|
|
export function inDistance(placeable1, placeable2, distance) {
|
|
const placeable1Vector = {
|
|
x: placeable1.center.x,
|
|
y: placeable1.center.y,
|
|
z: (placeable1.losHeight ?? placeable1.document.elevation) * canvas.scene.dimensions.size / canvas.scene.dimensions.distance,
|
|
}
|
|
|
|
const placeable2Vector = {
|
|
x: placeable2.center.x,
|
|
y: placeable2.center.y,
|
|
z: (placeable2.losHeight ?? placeable2.document.elevation) * canvas.scene.dimensions.size / canvas.scene.dimensions.distance,
|
|
}
|
|
|
|
return Math.hypot(
|
|
placeable1Vector.x - placeable2Vector.x,
|
|
placeable1Vector.y - placeable2Vector.y,
|
|
placeable1Vector.z - placeable2Vector.z
|
|
) <= distance;
|
|
|
|
}
|
|
|
|
export function getRangeForDocument(document) {
|
|
document = document.document ?? document;
|
|
if(document instanceof WallDocument){
|
|
return {
|
|
rangeBottom: document.flags?.["wall-height"]?.bottom ?? -Infinity,
|
|
rangeTop: document.flags?.["wall-height"]?.top ?? Infinity
|
|
}
|
|
}else if(document instanceof TokenDocument){
|
|
return {
|
|
rangeBottom: document.elevation,
|
|
rangeTop: document.elevation
|
|
}
|
|
}
|
|
const rangeBottom = document.flags?.levels?.rangeBottom ?? -Infinity;
|
|
const rangeTop = document.flags?.levels?.rangeTop ?? Infinity;
|
|
return { rangeBottom, rangeTop };
|
|
}
|
|
|
|
export function cloneTileMesh(tile){
|
|
if(!tile.mesh) {
|
|
const sprite = new PIXI.Sprite();
|
|
sprite.tile = tile;
|
|
return sprite;
|
|
};
|
|
const sprite = PIXI.Sprite.from(tile.mesh.texture);
|
|
sprite.alpha = 1;
|
|
sprite.tint = 0x000000;
|
|
sprite.width = tile.mesh.width;
|
|
sprite.height = tile.mesh.height;
|
|
sprite.position.set(tile.center.x, tile.center.y);
|
|
sprite.anchor.set(0.5, 0.5);
|
|
sprite.angle = tile.mesh.angle;
|
|
sprite.scale.x = (tile.mesh.width / tile.mesh.texture.width) * tile.document.texture.scaleX;
|
|
sprite.scale.y = (tile.mesh.height / tile.mesh.texture.height) * tile.document.texture.scaleY;
|
|
sprite.tile = tile;
|
|
return sprite;
|
|
}
|