Refactor resources selection and data prep (#1721)

* Move resources select to scrolly text and accept actor object

* Convert isReversed to prepared data and add label

* Removed unused imports

---------

Co-authored-by: WBHarry <williambjrklund@gmail.com>
This commit is contained in:
Carlos Fernandez 2026-03-10 13:34:47 -04:00 committed by GitHub
parent a4a7b8e7ca
commit cb0f63208e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 25 additions and 24 deletions

View file

@ -140,18 +140,6 @@ export const companionResources = {
...companionBaseResources
};
export const getScrollingTextResources = actorType => ({
armor: {
label: 'DAGGERHEART.GENERAL.armor',
reverse: true
},
...(actorType === 'character'
? characterResources
: actorType === 'adversary'
? adversaryResources
: companionResources)
});
export const featureProperties = {
agility: {
name: 'DAGGERHEART.CONFIG.Traits.agility.name',

View file

@ -187,6 +187,7 @@ export default class DhpAdversary extends DhCreature {
}
prepareDerivedData() {
super.prepareDerivedData();
this.attack.roll.isStandardAttack = true;
}

View file

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

View file

@ -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

View file

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

View file

@ -15,7 +15,6 @@ export default class DhCreature extends BaseDataActor {
resource.max,
resource.initial,
resource.label,
resource.reverse,
resource.maxLabel
);
} else {
@ -54,6 +53,17 @@ export default class DhCreature extends BaseDataActor {
return !vulnerableAppliedByOther;
}
prepareDerivedData() {
super.prepareDerivedData();
const resources = CONFIG.DH.ACTOR[`${this.parent.type}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;

View file

@ -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 }),
@ -17,7 +17,6 @@ const resourceField = (max = 0, initial = 0, label, reverse = false, maxLabel) =
maxLabel ??
game.i18n.format('DAGGERHEART.GENERAL.maxWithThing', { thing: game.i18n.localize(label) })
}),
isReversed: new fields.BooleanField({ initial: reverse })
},
{ label }
);

View file

@ -225,10 +225,9 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel {
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,
this.parent.parent,
changed.system.marks,
'armor',
this.parent.parent.type
);
options.scrollingTextData = [armorData];
}

View file

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