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