From 2313c4a18cc3fd7fa1d0a7c2c08fcebc8b025db7 Mon Sep 17 00:00:00 2001 From: JimCanE <6275508-jimcane@users.noreply.gitlab.com> Date: Fri, 23 May 2025 23:08:42 +0200 Subject: [PATCH 1/2] feat(damageThresholds): PCs use armor base + current level --- module/applications/sheets/pc.mjs | 21 ++++++++++++++++++ module/data/pc.mjs | 37 +------------------------------ templates/sheets/parts/health.hbs | 8 ++----- 3 files changed, 24 insertions(+), 42 deletions(-) diff --git a/module/applications/sheets/pc.mjs b/module/applications/sheets/pc.mjs index 8112a697..a49f097f 100644 --- a/module/applications/sheets/pc.mjs +++ b/module/applications/sheets/pc.mjs @@ -5,6 +5,22 @@ import DhpLevelup from '../levelup.mjs'; import AncestrySelectionDialog from '../ancestrySelectionDialog.mjs'; import DaggerheartSheet from './daggerheart-sheet.mjs'; +function computeDamageThresholds(armor, currentLevel) { + if (!armor) { + return { + major: currentLevel, + severe: currentLevel * 2 + }; + } + const { + baseThresholds: { major = 0, severe = 0 } + } = armor.system; + return { + major: major + currentLevel, + severe: severe + currentLevel + }; +} + const { ActorSheetV2 } = foundry.applications.sheets; export default class PCSheet extends DaggerheartSheet(ActorSheetV2) { constructor(options = {}) { @@ -286,6 +302,11 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) { context.inventory = Array(1).fill(Array(5).fill([])); } + this.document.damageThresholds = computeDamageThresholds( + context.source.items.find(x => x.type === 'armor'), + context.source.system.levelData.currentLevel + ); + context.classFeatures = ( this.multiclassFeatureSetSelected ? this.document.system.multiclassFeatures diff --git a/module/data/pc.mjs b/module/data/pc.mjs index c9c11848..6a9af44f 100644 --- a/module/data/pc.mjs +++ b/module/data/pc.mjs @@ -23,10 +23,6 @@ const levelUpTier = () => ({ experiences: new MappingField(new fields.ArrayField(new fields.StringField({}))), proficiency: new MappingField(new fields.BooleanField()), armorOrEvasionSlot: new MappingField(new fields.StringField({})), - majorDamageThreshold2: new MappingField(new fields.BooleanField()), - severeDamageThreshold2: new MappingField(new fields.BooleanField()), - severeDamageThreshold3: new MappingField(new fields.BooleanField()), - severeDamageThreshold4: new MappingField(new fields.BooleanField()), subclass: new MappingField( new fields.SchemaField({ multiclass: new fields.BooleanField(), @@ -92,11 +88,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel { min: new fields.NumberField({ initial: 1, integer: true }), max: new fields.NumberField({ initial: 6, integer: true }) }), - damageThresholds: new fields.SchemaField({ - minor: new fields.NumberField({ initial: 0, integer: true }), - major: new fields.NumberField({ initial: 0, integer: true }), - severe: new fields.NumberField({ initial: 0, integer: true }) - }), evasion: new fields.NumberField({ initial: 0, integer: true }), // armor: new fields.SchemaField({ // value: new fields.NumberField({ initial: 0, integer: true }), @@ -389,7 +380,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel { this.evasion = this.class?.system?.evasion ?? 0; // this.armor.value = this.activeArmor?.baseScore ?? 0; - this.damageThresholds = this.class?.system?.damageThresholds ?? { minor: 0, major: 0, severe: 0 }; this.applyLevels(); this.applyEffects(); @@ -400,10 +390,7 @@ export default class DhpPC extends foundry.abstract.TypeDataModel { stressBonus = 0, proficiencyBonus = 0, evasionBonus = 0, - armorBonus = 0, - minorThresholdBonus = 0, - majorThresholdBonus = 0, - severeThresholdBonus = 0; + armorBonus = 0; let experienceBonuses = {}; let advancementFirst = null, advancementSecond = null; @@ -439,11 +426,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel { armorBonus += Object.keys(tierData.armorOrEvasionSlot).filter( x => tierData.armorOrEvasionSlot[x] === 'armor' ).length; - - majorThresholdBonus += Object.keys(tierData.majorDamageThreshold2).length * 2; - severeThresholdBonus += Object.keys(tierData.severeDamageThreshold2).length * 2; - severeThresholdBonus += Object.keys(tierData.severeDamageThreshold3).length * 3; - severeThresholdBonus += Object.keys(tierData.severeDamageThreshold4).length * 4; } } } @@ -456,9 +438,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel { max: this.armor ? this.armor.system.marks.max + armorBonus : 0, value: this.armor ? this.armor.system.marks.value : 0 }; - this.damageThresholds.minor += minorThresholdBonus; - this.damageThresholds.major += majorThresholdBonus; - this.damageThresholds.severe += severeThresholdBonus; this.experiences = this.experiences.map(x => ({ ...x, value: x.value + (experienceBonuses[x.id] ?? 0) })); @@ -495,20 +474,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel { this.domainData.maxLoadout = Math.min(this.domainData.maxLoadout + 1, 5); this.domainData.maxCards += 1; } - - switch (tier) { - case 'tier1': - this.damageThresholds.severe += 2; - break; - case 'tier2': - this.damageThresholds.major += 1; - this.damageThresholds.severe += 3; - break; - case 'tier3': - this.damageThresholds.major += 2; - this.damageThresholds.severe += 4; - break; - } } } diff --git a/templates/sheets/parts/health.hbs b/templates/sheets/parts/health.hbs index e325b1df..374a9b2f 100644 --- a/templates/sheets/parts/health.hbs +++ b/templates/sheets/parts/health.hbs @@ -2,16 +2,12 @@ {{localize "DAGGERHEART.Sheets.PC.Health.Title"}}
-
- {{document.system.damageThresholds.minor}} -
-
{{localize "DAGGERHEART.Sheets.PC.Health.Minor"}}
- {{document.system.damageThresholds.major}} + {{document.damageThresholds.major}}
@@ -19,7 +15,7 @@
- {{document.system.damageThresholds.severe}} + {{document.damageThresholds.severe}}
From bf22d57fceae1ebe34c409058efbca4da7c97836 Mon Sep 17 00:00:00 2001 From: JimCanE <6275508-jimcane@users.noreply.gitlab.com> Date: Sat, 24 May 2025 08:49:07 +0200 Subject: [PATCH 2/2] feat(damageThresholds): move data to dataModel :facepalm: --- module/applications/sheets/pc.mjs | 21 --------------------- module/data/pc.mjs | 18 ++++++++++++++++++ templates/sheets/parts/health.hbs | 4 ++-- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/module/applications/sheets/pc.mjs b/module/applications/sheets/pc.mjs index a49f097f..8112a697 100644 --- a/module/applications/sheets/pc.mjs +++ b/module/applications/sheets/pc.mjs @@ -5,22 +5,6 @@ import DhpLevelup from '../levelup.mjs'; import AncestrySelectionDialog from '../ancestrySelectionDialog.mjs'; import DaggerheartSheet from './daggerheart-sheet.mjs'; -function computeDamageThresholds(armor, currentLevel) { - if (!armor) { - return { - major: currentLevel, - severe: currentLevel * 2 - }; - } - const { - baseThresholds: { major = 0, severe = 0 } - } = armor.system; - return { - major: major + currentLevel, - severe: severe + currentLevel - }; -} - const { ActorSheetV2 } = foundry.applications.sheets; export default class PCSheet extends DaggerheartSheet(ActorSheetV2) { constructor(options = {}) { @@ -302,11 +286,6 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) { context.inventory = Array(1).fill(Array(5).fill([])); } - this.document.damageThresholds = computeDamageThresholds( - context.source.items.find(x => x.type === 'armor'), - context.source.system.levelData.currentLevel - ); - context.classFeatures = ( this.multiclassFeatureSetSelected ? this.document.system.multiclassFeatures diff --git a/module/data/pc.mjs b/module/data/pc.mjs index 6a9af44f..82d49235 100644 --- a/module/data/pc.mjs +++ b/module/data/pc.mjs @@ -380,11 +380,29 @@ export default class DhpPC extends foundry.abstract.TypeDataModel { this.evasion = this.class?.system?.evasion ?? 0; // this.armor.value = this.activeArmor?.baseScore ?? 0; + this.damageThresholds = this.computeDamageThresholds(); this.applyLevels(); this.applyEffects(); } + computeDamageThresholds() { + // TODO: missing weapon features and domain cards calculation + if (!this.armor) { + return { + major: this.levelData.currentLevel, + severe: this.levelData.currentLevel * 2 + }; + } + const { + baseThresholds: { major = 0, severe = 0 } + } = this.armor.system; + return { + major: major + this.levelData.currentLevel, + severe: severe + this.levelData.currentLevel + }; + } + applyLevels() { let healthBonus = 0, stressBonus = 0, diff --git a/templates/sheets/parts/health.hbs b/templates/sheets/parts/health.hbs index 374a9b2f..64dbc4c2 100644 --- a/templates/sheets/parts/health.hbs +++ b/templates/sheets/parts/health.hbs @@ -7,7 +7,7 @@
- {{document.damageThresholds.major}} + {{document.system.damageThresholds.major}}
@@ -15,7 +15,7 @@
- {{document.damageThresholds.severe}} + {{document.system.damageThresholds.severe}}