From 989a6e3a2a90cb0335b72216c3039a54dba87736 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sun, 21 Dec 2025 01:31:25 +0100 Subject: [PATCH] Added size to Beastform tokenData --- lang/en.json | 1 + .../applications/sheets/items/beastform.mjs | 1 + module/data/activeEffect/beastformEffect.mjs | 38 +++++++++------ module/data/item/beastform.mjs | 46 ++++++++++++++----- templates/sheets/items/beastform/settings.hbs | 21 +++++++-- 5 files changed, 79 insertions(+), 28 deletions(-) diff --git a/lang/en.json b/lang/en.json index 47d2d0ef..132c9f0b 100755 --- a/lang/en.json +++ b/lang/en.json @@ -2236,6 +2236,7 @@ "tokenRingImg": { "label": "Subject Texture" }, "tokenSize": { "placeholder": "Using character dimensions", + "disabledPlaceholder": "Set by character size", "height": { "label": "Height" }, "width": { "label": "Width" } }, diff --git a/module/applications/sheets/items/beastform.mjs b/module/applications/sheets/items/beastform.mjs index 1c4a4880..5e9cffec 100644 --- a/module/applications/sheets/items/beastform.mjs +++ b/module/applications/sheets/items/beastform.mjs @@ -77,6 +77,7 @@ export default class BeastformSheet extends DHBaseItemSheet { name: context.document.system.advantageOn[key].value })) ); + context.dimensionsDisabled = context.document.system.tokenSize.size === 'custom'; break; case 'effects': context.effects.actives = context.effects.actives.map(effect => { diff --git a/module/data/activeEffect/beastformEffect.mjs b/module/data/activeEffect/beastformEffect.mjs index b5e775fc..b041b59e 100644 --- a/module/data/activeEffect/beastformEffect.mjs +++ b/module/data/activeEffect/beastformEffect.mjs @@ -65,20 +65,30 @@ export default class BeastformEffect extends BaseEffect { } }; - const updateToken = token => ({ - ...baseUpdate, - 'texture': { - enabled: this.characterTokenData.usesDynamicToken, - src: token.flags.daggerheart?.beastformTokenImg ?? this.characterTokenData.tokenImg - }, - 'ring': { - subject: { - texture: - token.flags.daggerheart?.beastformSubjectTexture ?? this.characterTokenData.tokenRingImg - } - }, - 'flags.daggerheart': { '-=beastformTokenImg': null, '-=beastformSubjectTexture': null } - }); + const updateToken = token => { + const { x, y } = game.system.api.documents.DhToken.getSnappedPositionInSquareGrid( + token.object.scene.grid, + { x: token.x, y: token.y, elevation: token.elevation }, + baseUpdate.width, + baseUpdate.height + ); + return { + ...baseUpdate, + x, + y, + 'texture': { + enabled: this.characterTokenData.usesDynamicToken, + src: token.flags.daggerheart?.beastformTokenImg ?? this.characterTokenData.tokenImg + }, + 'ring': { + subject: { + texture: + token.flags.daggerheart?.beastformSubjectTexture ?? this.characterTokenData.tokenRingImg + } + }, + 'flags.daggerheart': { '-=beastformTokenImg': null, '-=beastformSubjectTexture': null } + }; + }; await updateActorTokens(this.parent.parent, update, updateToken); diff --git a/module/data/item/beastform.mjs b/module/data/item/beastform.mjs index 51ca298d..57a1e0a8 100644 --- a/module/data/item/beastform.mjs +++ b/module/data/item/beastform.mjs @@ -43,6 +43,12 @@ export default class DHBeastform extends BaseDataItem { base64: false }), tokenSize: new fields.SchemaField({ + size: new fields.StringField({ + required: true, + nullable: false, + choices: CONFIG.DH.ACTOR.tokenSize, + initial: CONFIG.DH.ACTOR.tokenSize.custom.id + }), height: new fields.NumberField({ integer: true, min: 1, initial: null, nullable: true }), width: new fields.NumberField({ integer: true, min: 1, initial: null, nullable: true }) }), @@ -190,9 +196,18 @@ export default class DHBeastform extends BaseDataItem { await this.parent.parent.createEmbeddedDocuments('ActiveEffect', [beastformEffect.toObject()]); + let width = this.tokenSize.width; + let height = this.tokenSize.height; + if (this.tokenSize.size !== 'custom') { + const tokenSizes = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew).tokenSizes; + const tokenSize = tokenSizes[this.tokenSize.size]; + width = tokenSize; + height = tokenSize; + } + const prototypeTokenUpdate = { - height: this.tokenSize.height, - width: this.tokenSize.width, + height, + width, texture: { src: this.tokenImg }, @@ -202,16 +217,25 @@ export default class DHBeastform extends BaseDataItem { } } }; - - const tokenUpdate = token => ({ - ...prototypeTokenUpdate, - flags: { - daggerheart: { - beastformTokenImg: token.texture.src, - beastformSubjectTexture: token.ring.subject.texture + const tokenUpdate = token => { + const { x, y } = game.system.api.documents.DhToken.getSnappedPositionInSquareGrid( + token.object.scene.grid, + { x: token.x, y: token.y, elevation: token.elevation }, + width, + height + ); + return { + ...prototypeTokenUpdate, + x, + y, + flags: { + daggerheart: { + beastformTokenImg: token.texture.src, + beastformSubjectTexture: token.ring.subject.texture + } } - } - }); + }; + }; await updateActorTokens(this.parent.parent, prototypeTokenUpdate, tokenUpdate); diff --git a/templates/sheets/items/beastform/settings.hbs b/templates/sheets/items/beastform/settings.hbs index c0ea3965..470175d2 100644 --- a/templates/sheets/items/beastform/settings.hbs +++ b/templates/sheets/items/beastform/settings.hbs @@ -20,7 +20,7 @@ {{/unless}} {{/if}} -
+
{{localize "DAGGERHEART.ITEMS.Beastform.tokenTitle"}}
@@ -31,7 +31,22 @@ {{formGroup systemFields.tokenRingImg value=source.system.tokenRingImg localize=true}}
- {{formGroup systemFields.tokenSize.fields.height value=source.system.tokenSize.height localize=true placeholder=(localize "DAGGERHEART.ITEMS.Beastform.FIELDS.tokenSize.placeholder") }} - {{formGroup systemFields.tokenSize.fields.width value=source.system.tokenSize.width localize=true placeholder=(localize "DAGGERHEART.ITEMS.Beastform.FIELDS.tokenSize.placeholder")}} +
+ {{formGroup systemFields.tokenSize.fields.size value=source.system.tokenSize.size label=(localize "DAGGERHEART.GENERAL.tokenSize") localize=true }} + {{formGroup + systemFields.tokenSize.fields.height + value=source.system.tokenSize.height + localize=true + placeholder=(localize (ifThen dimensionsDisabled "DAGGERHEART.ITEMS.Beastform.FIELDS.tokenSize.disabledPlaceholder" "DAGGERHEART.ITEMS.Beastform.FIELDS.tokenSize.placeholder")) + disabled=dimensionsDisabled + }} + {{formGroup + systemFields.tokenSize.fields.width + value=source.system.tokenSize.width + localize=true + placeholder=(localize (ifThen dimensionsDisabled "DAGGERHEART.ITEMS.Beastform.FIELDS.tokenSize.disabledPlaceholder" "DAGGERHEART.ITEMS.Beastform.FIELDS.tokenSize.placeholder")) + disabled=dimensionsDisabled + }} +
\ No newline at end of file