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