From fbd21274a6ab4e0a7f51812a104911b87f53594a Mon Sep 17 00:00:00 2001 From: Chris Ryan Date: Fri, 14 Nov 2025 18:16:37 +1000 Subject: [PATCH] All data fields added and wired up for use --- lang/en.json | 4 +++ module/canvas/placeables/templateLayer.mjs | 15 ++++++++--- module/data/presetTemplate.mjs | 20 +++++++++++++-- module/enrichers/TemplateEnricher.mjs | 19 +++----------- module/helpers/templateUtils.mjs | 29 ++++++++++++++++++++++ 5 files changed, 67 insertions(+), 20 deletions(-) create mode 100644 module/helpers/templateUtils.mjs diff --git a/lang/en.json b/lang/en.json index 8fc013e1..ac36d7a0 100755 --- a/lang/en.json +++ b/lang/en.json @@ -1993,6 +1993,7 @@ }, "actorName": "Actor Name", "amount": "Amount", + "angle": "Angle", "any": "Any", "armor": "Armor", "armorFeatures": "Armor Features", @@ -2015,6 +2016,7 @@ "damageType": "Damage Type", "description": "Description", "difficulty": "Difficulty", + "direction": "Direction", "downtime": "Downtime", "dropActorsHere": "Drop Actors here", "dropFeaturesHere": "Drop Features here", @@ -2030,6 +2032,7 @@ "failure": "Failure", "fear": "Fear", "features": "Features", + "fillColor": "Fill Color", "formula": "Formula", "gm": "GM", "healing": "Healing", @@ -2113,6 +2116,7 @@ "value": "Value", "weaponFeatures": "Weapon Features", "weapons": "Weapons", + "width": "Width", "withThing": "With {thing}" }, "ITEMS": { diff --git a/module/canvas/placeables/templateLayer.mjs b/module/canvas/placeables/templateLayer.mjs index d4fecb44..8fce0b08 100644 --- a/module/canvas/placeables/templateLayer.mjs +++ b/module/canvas/placeables/templateLayer.mjs @@ -1,3 +1,5 @@ +import { buildTemplateDistance, buildTemplateType, buildTemplateAngle } from '../../helpers/templateUtils.mjs'; + export default class DhTemplateLayer extends foundry.canvas.layers.TemplateLayer { static prepareSceneControls() { const sc = foundry.applications.ui.SceneControls; @@ -110,15 +112,22 @@ export default class DhTemplateLayer extends foundry.canvas.layers.TemplateLayer } const settings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.PresetTemplate); console.log("settings", settings); + const distance = buildTemplateDistance(settings.type, settings.range); + const usedType = buildTemplateType(settings.type); + const usedAngle = buildTemplateAngle(settings.type, settings.angle); const { width, height } = game.canvas.scene.dimensions; const data = { x: width / 2, y: height / 2, - t: 'circle', - distance: 30, - fillColor: game.user.color || '#FF0000' + t: usedType, + distance: distance, + fillColor: settings.fillColor, + angle: usedAngle, + width: settings.width, + direction: settings.direction }; + console.log("data", data); CONFIG.ux.TemplateManager.createPreview(data); } diff --git a/module/data/presetTemplate.mjs b/module/data/presetTemplate.mjs index 1d1eb5bc..0e9a9d6a 100644 --- a/module/data/presetTemplate.mjs +++ b/module/data/presetTemplate.mjs @@ -1,4 +1,3 @@ - export const presetTemplateTypes = { circle: { id: 'circle', @@ -14,6 +13,7 @@ export const presetTemplateTypes = { export default class DhPresetTemplate extends foundry.abstract.DataModel { static defineSchema() { const fields = foundry.data.fields; + const fillColor = game.user?.color.toString() || '#777777'; return { type: new fields.StringField({ @@ -25,8 +25,24 @@ export default class DhPresetTemplate extends foundry.abstract.DataModel { range: new fields.StringField({ required: true, initial: "15", - label: 'DAGGERHEART.GENERAL.type' + label: 'DAGGERHEART.GENERAL.range' + }), + angle: new fields.NumberField({ + label: 'DAGGERHEART.GENERAL.angle' + }), + direction: new fields.NumberField({ + initial: 0, + label: 'DAGGERHEART.GENERAL.direction' + }), + width: new fields.NumberField({ + label: 'DAGGERHEART.GENERAL.width' + }), + fillColor: new fields.StringField({ + required: true, + initial: fillColor, + label: 'DAGGERHEART.GENERAL.fillColor' }) + }; } } diff --git a/module/enrichers/TemplateEnricher.mjs b/module/enrichers/TemplateEnricher.mjs index 4b9b052e..b44da4e0 100644 --- a/module/enrichers/TemplateEnricher.mjs +++ b/module/enrichers/TemplateEnricher.mjs @@ -1,4 +1,5 @@ import { parseInlineParams } from './parser.mjs'; +import { buildTemplateDistance, buildTemplateType, buildTemplateAngle } from '../helpers/templateUtils.mjs'; export default function DhTemplateEnricher(match, _options) { const params = parseInlineParams(match[1]); @@ -56,21 +57,9 @@ export const renderMeasuredTemplate = async event => { if (!type || !range || !game.canvas.scene) return; - const usedType = type === 'inFront' ? 'cone' : type === 'emanation' ? 'circle' : type; - const usedAngle = - type === CONST.MEASURED_TEMPLATE_TYPES.CONE - ? (angle ?? CONFIG.MeasuredTemplate.defaults.angle) - : type === CONFIG.DH.GENERAL.templateTypes.INFRONT - ? '180' - : undefined; - - let baseDistance = range; - if (Number.isNaN(Number(range))) { - baseDistance = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.variantRules).rangeMeasurement[ - range - ]; - } - const distance = type === CONFIG.DH.GENERAL.templateTypes.EMANATION ? baseDistance + 2.5 : baseDistance; + const usedType = buildTemplateType(type); + const usedAngle = buildTemplateAngle(type, angle); + const distance = buildTemplateDistance(type, range); const { width, height } = game.canvas.scene.dimensions; const data = { diff --git a/module/helpers/templateUtils.mjs b/module/helpers/templateUtils.mjs new file mode 100644 index 00000000..76619058 --- /dev/null +++ b/module/helpers/templateUtils.mjs @@ -0,0 +1,29 @@ +export function buildTemplateDistance(type, range) { + console.log("type", type); + console.log("range", range); + + let baseDistance = range; + if (Number.isNaN(Number(range))) { + baseDistance = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.variantRules).rangeMeasurement[ + range + ]; + } + const distance = type === CONFIG.DH.GENERAL.templateTypes.EMANATION ? baseDistance + 2.5 : baseDistance; + + return distance; +} + +export function buildTemplateType(type) { + const usedType = type === 'inFront' ? 'cone' : type === 'emanation' ? 'circle' : type; + return usedType; +} + +export function buildTemplateAngle(type, angle) { + const usedAngle = + type === CONST.MEASURED_TEMPLATE_TYPES.CONE + ? (angle ?? CONFIG.MeasuredTemplate.defaults.angle) + : type === CONFIG.DH.GENERAL.templateTypes.INFRONT + ? '180' + : undefined; + return usedAngle; +} \ No newline at end of file