From 4dc0e79aec1271bec9ca313e8e3094a7d0831950 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Tue, 8 Jul 2025 19:04:04 +0200 Subject: [PATCH] Changed Cone template to be 'In Front', acting as a 180 degree cone --- daggerheart.mjs | 2 + lang/en.json | 3 + module/canvas/placeables/_module.mjs | 1 + module/canvas/placeables/templateLayer.mjs | 72 ++++++++++++++++++++++ module/documents/tooltipManager.mjs | 2 +- 5 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 module/canvas/placeables/templateLayer.mjs diff --git a/daggerheart.mjs b/daggerheart.mjs index a6676f19..b5e1dcaf 100644 --- a/daggerheart.mjs +++ b/daggerheart.mjs @@ -55,6 +55,7 @@ Hooks.once('init', () => { CONFIG.Dice.rolls = [...CONFIG.Dice.rolls, ...[DHRoll, DualityRoll, D20Roll, DamageRoll]]; CONFIG.MeasuredTemplate.objectClass = placeables.DhMeasuredTemplate; + CONFIG.MeasuredTemplate.defaults.angle = 180; CONFIG.Item.documentClass = documents.DHItem; @@ -119,6 +120,7 @@ Hooks.once('init', () => { CONFIG.ChatMessage.documentClass = documents.DhChatMessage; CONFIG.Canvas.rulerClass = placeables.DhRuler; + CONFIG.Canvas.layers.templates.layerClass = placeables.DhTemplateLayer; CONFIG.Combat.documentClass = documents.DhpCombat; CONFIG.ui.combat = applications.ui.DhCombatTracker; CONFIG.ui.chat = applications.ui.DhChatLog; diff --git a/lang/en.json b/lang/en.json index 75c8cfa7..7acaf35a 100755 --- a/lang/en.json +++ b/lang/en.json @@ -20,6 +20,9 @@ "environment": "Environment" } }, + "CONTROLS": { + "inFront": "In Front" + }, "DAGGERHEART": { "ACTIONS": { "Config": { diff --git a/module/canvas/placeables/_module.mjs b/module/canvas/placeables/_module.mjs index 1da3a1e9..3610559c 100644 --- a/module/canvas/placeables/_module.mjs +++ b/module/canvas/placeables/_module.mjs @@ -1,3 +1,4 @@ export { default as DhMeasuredTemplate } from './measuredTemplate.mjs'; export { default as DhRuler } from './ruler.mjs'; +export { default as DhTemplateLayer } from './templateLayer.mjs'; export { default as DhTokenRuler } from './tokenRuler.mjs'; diff --git a/module/canvas/placeables/templateLayer.mjs b/module/canvas/placeables/templateLayer.mjs new file mode 100644 index 00000000..8c0370e2 --- /dev/null +++ b/module/canvas/placeables/templateLayer.mjs @@ -0,0 +1,72 @@ +export default class DhTemplateLayer extends TemplateLayer { + static prepareSceneControls() { + const sc = SceneControls; + return { + name: 'templates', + order: 2, + title: 'CONTROLS.GroupMeasure', + icon: 'fa-solid fa-ruler-combined', + visible: game.user.can('TEMPLATE_CREATE'), + onChange: (event, active) => { + if (active) canvas.templates.activate(); + }, + onToolChange: () => canvas.templates.setAllRenderFlags({ refreshState: true }), + tools: { + circle: { + name: 'circle', + order: 1, + title: 'CONTROLS.MeasureCircle', + icon: 'fa-regular fa-circle', + toolclip: { + src: 'toolclips/tools/measure-circle.webm', + heading: 'CONTROLS.MeasureCircle', + items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete']) + } + }, + cone: { + name: 'cone', + order: 2, + title: 'CONTROLS.inFront', + icon: 'fa-solid fa-eye', + toolclip: { + src: 'toolclips/tools/measure-cone.webm', + heading: 'CONTROLS.inFront', + items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete', 'rotate']) + } + }, + rect: { + name: 'rect', + order: 3, + title: 'CONTROLS.MeasureRect', + icon: 'fa-regular fa-square', + toolclip: { + src: 'toolclips/tools/measure-rect.webm', + heading: 'CONTROLS.MeasureRect', + items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete', 'rotate']) + } + }, + ray: { + name: 'ray', + order: 4, + title: 'CONTROLS.MeasureRay', + icon: 'fa-solid fa-up-down', + toolclip: { + src: 'toolclips/tools/measure-ray.webm', + heading: 'CONTROLS.MeasureRay', + items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete', 'rotate']) + } + }, + clear: { + name: 'clear', + order: 5, + title: 'CONTROLS.MeasureClear', + icon: 'fa-solid fa-trash', + visible: game.user.isGM, + onChange: () => canvas.templates.deleteAll(), + button: true + } + }, + activeTool: 'circle' + }; + } +} diff --git a/module/documents/tooltipManager.mjs b/module/documents/tooltipManager.mjs index b780dfa9..2e660cff 100644 --- a/module/documents/tooltipManager.mjs +++ b/module/documents/tooltipManager.mjs @@ -1,7 +1,7 @@ export default class DhTooltipManager extends foundry.helpers.interaction.TooltipManager { async activate(element, options = {}) { let html = options.html; - if (element.dataset.tooltip.startsWith('#item#')) { + if (element.dataset.tooltip?.startsWith('#item#')) { const item = await foundry.utils.fromUuid(element.dataset.tooltip.slice(6)); if (item) { html = await foundry.applications.handlebars.renderTemplate(