All user data for FoundryVTT. Includes worlds, systems, modules, and any asset in the "foundryuserdata" directory. Does NOT include the FoundryVTT installation itself.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

88 lines
2.9 KiB

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;
}