diff --git a/module/applications/sheets/actors/character.mjs b/module/applications/sheets/actors/character.mjs index 71f2fc94..537a8713 100644 --- a/module/applications/sheets/actors/character.mjs +++ b/module/applications/sheets/actors/character.mjs @@ -1003,10 +1003,10 @@ export default class CharacterSheet extends DHBaseActorSheet { }); for (const element of html.querySelectorAll('.resource-value')) - element.addEventListener('click', this.updateResource.bind(this)); + element.addEventListener('click', this.onUpdateResource.bind(this)); } - async updateResource(event) { + async onUpdateResource(event) { const target = event.target.closest('.resource-value'); const { resource, value: textValue } = target.dataset; diff --git a/module/config/actorConfig.mjs b/module/config/actorConfig.mjs index fb305d53..43795a0b 100644 --- a/module/config/actorConfig.mjs +++ b/module/config/actorConfig.mjs @@ -57,18 +57,6 @@ export const abilities = { } }; -export const getScrollingTextResources = actorType => ({ - armor: { - label: 'DAGGERHEART.GENERAL.armor', - reverse: true - }, - ...(actorType === 'character' - ? allCharacterResources() - : actorType === 'adversary' - ? allAdversaryResources - : allCompanionResources) -}); - export const featureProperties = { agility: { name: 'DAGGERHEART.CONFIG.Traits.agility.name', diff --git a/module/data/actor/adversary.mjs b/module/data/actor/adversary.mjs index 62bed7c7..2053ac99 100644 --- a/module/data/actor/adversary.mjs +++ b/module/data/actor/adversary.mjs @@ -187,6 +187,7 @@ export default class DhpAdversary extends DhCreature { } prepareDerivedData() { + super.prepareDerivedData(); this.attack.roll.isStandardAttack = true; } diff --git a/module/data/actor/base.mjs b/module/data/actor/base.mjs index 913bdc5e..e2f910a0 100644 --- a/module/data/actor/base.mjs +++ b/module/data/actor/base.mjs @@ -213,7 +213,7 @@ export default class BaseDataActor extends foundry.abstract.TypeDataModel { const textData = Object.keys(changes.system.resources).reduce((acc, key) => { const resource = changes.system.resources[key]; if (resource.value !== undefined && resource.value !== this.resources[key].value) { - acc.push(getScrollTextData(this.resources, resource, key, this.parent.type)); + acc.push(getScrollTextData(this.parent, resource, key)); } return acc; diff --git a/module/data/actor/character.mjs b/module/data/actor/character.mjs index c606e17b..cc9801a3 100644 --- a/module/data/actor/character.mjs +++ b/module/data/actor/character.mjs @@ -658,6 +658,7 @@ export default class DhCharacter extends DhCreature { } prepareDerivedData() { + super.prepareDerivedData(); let baseHope = this.resources.hope.value; if (this.companion) { for (let levelKey in this.companion.system.levelData.levelups) { @@ -677,6 +678,7 @@ export default class DhCharacter extends DhCreature { this.attack.roll.trait = this.rules.attack.roll.trait ?? this.attack.roll.trait; this.resources.armor = { + label: 'DAGGERHEART.GENERAL.armor', value: this.armor?.system?.marks?.value ?? 0, max: this.armorScore, isReversed: true diff --git a/module/data/actor/companion.mjs b/module/data/actor/companion.mjs index 45bd8395..ae85ff69 100644 --- a/module/data/actor/companion.mjs +++ b/module/data/actor/companion.mjs @@ -157,6 +157,7 @@ export default class DhCompanion extends DhCreature { } prepareDerivedData() { + super.prepareDerivedData(); /* Partner Related Setup */ if (this.partner) { this.levelData.level.changed = this.partner.system.levelData.level.current; diff --git a/module/data/actor/creature.mjs b/module/data/actor/creature.mjs index db7e6bfa..e12c645d 100644 --- a/module/data/actor/creature.mjs +++ b/module/data/actor/creature.mjs @@ -16,7 +16,6 @@ export default class DhCreature extends BaseDataActor { resource.max, resource.initial, resource.label, - resource.reverse, resource.maxLabel ); } else { @@ -57,6 +56,17 @@ export default class DhCreature extends BaseDataActor { return !vulnerableAppliedByOther; } + prepareDerivedData() { + super.prepareDerivedData(); + const resources = CONFIG.DH.RESOURCE[`all${this.parent.type.capitalize()}Resources`](); + if (resources) { + for (const [key, value] of Object.entries(this.resources)) { + value.label = resources[key]?.label; + value.isReversed = resources[key]?.reverse; + } + } + } + async _preUpdate(changes, options, userId) { const allowed = await super._preUpdate(changes, options, userId); if (allowed === false) return; diff --git a/module/data/fields/actorField.mjs b/module/data/fields/actorField.mjs index db1faad4..2c9bb83d 100644 --- a/module/data/fields/actorField.mjs +++ b/module/data/fields/actorField.mjs @@ -6,7 +6,7 @@ const attributeField = label => tierMarked: new fields.BooleanField({ initial: false }) }); -const resourceField = (max = 0, initial = 0, label, reverse = false, maxLabel) => +const resourceField = (max = 0, initial = 0, label, maxLabel) => new fields.SchemaField( { value: new fields.NumberField({ initial: initial, min: 0, integer: true, label }), @@ -16,8 +16,7 @@ const resourceField = (max = 0, initial = 0, label, reverse = false, maxLabel) = label: maxLabel ?? game.i18n.format('DAGGERHEART.GENERAL.maxWithThing', { thing: game.i18n.localize(label) }) - }), - isReversed: new fields.BooleanField({ initial: reverse }) + }) }, { label } ); diff --git a/module/data/item/base.mjs b/module/data/item/base.mjs index 3b11e945..6f3256e3 100644 --- a/module/data/item/base.mjs +++ b/module/data/item/base.mjs @@ -224,12 +224,7 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel { const armorChanged = changed.system?.marks?.value !== undefined && changed.system.marks.value !== this.marks.value; if (armorChanged && autoSettings.resourceScrollTexts && this.parent.parent?.type === 'character') { - const armorData = getScrollTextData( - this.parent.parent.system.resources, - changed.system.marks, - 'armor', - this.parent.parent.type - ); + const armorData = getScrollTextData(this.parent.parent, changed.system.marks, 'armor'); options.scrollingTextData = [armorData]; } diff --git a/module/helpers/utils.mjs b/module/helpers/utils.mjs index bdb72586..5704b891 100644 --- a/module/helpers/utils.mjs +++ b/module/helpers/utils.mjs @@ -378,17 +378,18 @@ export const arraysEqual = (a, b) => export const setsEqual = (a, b) => a.size === b.size && [...a].every(value => b.has(value)); -export function getScrollTextData(resources, resource, key, actorType) { - const { reverse, label } = CONFIG.DH.ACTOR.getScrollingTextResources(actorType)[key]; +export function getScrollTextData(actor, resource, key) { const { BOTTOM, TOP } = CONST.TEXT_ANCHOR_POINTS; + + const resources = actor.system.resources; const increased = resources[key].value < resource.value; const value = -1 * (resources[key].value - resource.value); + const { label, isReversed } = resources[key]; const text = `${game.i18n.localize(label)} ${value.signedString()}`; - - const stroke = increased ? (reverse ? 0xffffff : 0x000000) : reverse ? 0x000000 : 0xffffff; - const fill = increased ? (reverse ? 0x0032b1 : 0xffe760) : reverse ? 0xffe760 : 0x0032b1; - const direction = increased ? (reverse ? BOTTOM : TOP) : reverse ? TOP : BOTTOM; + const stroke = increased ? (isReversed ? 0xffffff : 0x000000) : isReversed ? 0x000000 : 0xffffff; + const fill = increased ? (isReversed ? 0x0032b1 : 0xffe760) : isReversed ? 0xffe760 : 0x0032b1; + const direction = increased ? (isReversed ? BOTTOM : TOP) : isReversed ? TOP : BOTTOM; return { text, stroke, fill, direction }; }