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.
 
 
 

103 lines
3.9 KiB

export class TemplateHandler{
static isVisible(wrapped, ...args){
const result = wrapped(...args);
return result;
const currentElevation = CONFIG.Levels.currentToken?.losHeight
const templateElevation = this.document.flags.levels?.elevation;
if(currentElevation === undefined || templateElevation === undefined || !CONFIG.Levels.currentToken) return result;
const origin = {
x: CONFIG.Levels.currentToken.x,
y: CONFIG.Levels.currentToken.y,
z: currentElevation
}
const target = {
x: this.center.x,
y: this.center.y,
z: templateElevation
}
const isVisible = !CONFIG.Levels.handlers.SightHandler.testCollision(origin,target);
return result && isVisible;
}
static async drawTooltip(wrapped, ...args){
await wrapped(...args);
if(this.document.getFlag(CONFIG.Levels.MODULE_ID, "elevation")===0) return this;
this.tooltip = this.addChild(_templateDrawTooltip(this));
function _templateDrawTooltip(template) {
// Create the tooltip Text
const tipFlag = template.document.getFlag(CONFIG.Levels.MODULE_ID, "elevation");
let tipN;
if (tipFlag === undefined) {
if (CONFIG.Levels.UI.nextTemplateHeight !== undefined) {
tipN = CONFIG.Levels.UI.nextTemplateHeight;
} else {
const cToken =
canvas.tokens.controlled[0] || _token;
tipN = cToken?.document?.elevation ?? 0;
}
} else {
tipN = tipFlag;
}
let units = canvas.scene.grid.units;
const tip = tipN > 0 ? `+${tipN} ${units}` : `${tipN} ${units}`;
const style = CONFIG.canvasTextStyle.clone();
style.fontSize = Math.max(
Math.round(canvas.dimensions.size * 0.36 * 12) / 12,
36
);
const text = new PreciseText(tip, style);
text.anchor.set(0.5, 2);
return text;
}
return this;
}
static _refreshRulerText() {
let special = this.document.flags.levels?.special// || _levels?.nextTemplateSpecial
let text;
let u = canvas.scene.grid.units;
if ( this.document.t === "rect" ) {
let d = canvas.dimensions;
let dx = Math.round(this.ray.dx) * (d.distance / d.size);
let dy = Math.round(this.ray.dy) * (d.distance / d.size);
let w = Math.round(dx * 10) / 10;
let h = Math.round(dy * 10) / 10;
text = special ? `${w}${u} x ${h}${u} x ${special}${u}` : `${w}${u} x ${h}${u}`;
} else {
let d = Math.round(this.document.distance * 10) / 10;
text = special ? `${d}${u} x ${special}${u}` : `${d}${u}`;
}
this.ruler.text = text;
this.ruler.position.set(this.ray.dx + 10, this.ray.dy + 5);
}
static getTemplateData(){
const cToken = canvas.tokens.controlled[0] || _token;
const handMode =
typeof LevelsVolumetricTemplates !== "undefined" &&
LevelsVolumetricTemplates.tools.handMode &&
cToken
? Math.round(
(cToken.losHeight - cToken?.document?.elevation) * 0.8
)
: 0;
let elevation;
let special;
if (CONFIG.Levels.UI.nextTemplateHeight !== undefined) {
elevation = CONFIG.Levels.UI.nextTemplateHeight;
special = CONFIG.Levels.UI.nextTemplateSpecial;
CONFIG.Levels.UI.nextTemplateHeight = undefined;
CONFIG.Levels.UI.nextTemplateSpecial = undefined;
CONFIG.Levels.UI.templateElevation = false;
CONFIG.Levels.UI._levelsTemplateTool.active = false;
$("body")
.find(`li[data-tool="setTemplateElevation"]`)
.removeClass("active");
} else {
elevation = cToken?.document?.elevation + handMode || 0;
}
return { elevation, special };
}
}