feat(damageThresholds): PCs use armor base + current level

This commit is contained in:
JimCanE 2025-05-23 23:08:42 +02:00
parent 504e2ca0f2
commit 2313c4a18c
3 changed files with 24 additions and 42 deletions

View file

@ -5,6 +5,22 @@ import DhpLevelup from '../levelup.mjs';
import AncestrySelectionDialog from '../ancestrySelectionDialog.mjs'; import AncestrySelectionDialog from '../ancestrySelectionDialog.mjs';
import DaggerheartSheet from './daggerheart-sheet.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; const { ActorSheetV2 } = foundry.applications.sheets;
export default class PCSheet extends DaggerheartSheet(ActorSheetV2) { export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
constructor(options = {}) { constructor(options = {}) {
@ -286,6 +302,11 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
context.inventory = Array(1).fill(Array(5).fill([])); 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 = ( context.classFeatures = (
this.multiclassFeatureSetSelected this.multiclassFeatureSetSelected
? this.document.system.multiclassFeatures ? this.document.system.multiclassFeatures

View file

@ -23,10 +23,6 @@ const levelUpTier = () => ({
experiences: new MappingField(new fields.ArrayField(new fields.StringField({}))), experiences: new MappingField(new fields.ArrayField(new fields.StringField({}))),
proficiency: new MappingField(new fields.BooleanField()), proficiency: new MappingField(new fields.BooleanField()),
armorOrEvasionSlot: new MappingField(new fields.StringField({})), 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( subclass: new MappingField(
new fields.SchemaField({ new fields.SchemaField({
multiclass: new fields.BooleanField(), multiclass: new fields.BooleanField(),
@ -92,11 +88,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
min: new fields.NumberField({ initial: 1, integer: true }), min: new fields.NumberField({ initial: 1, integer: true }),
max: new fields.NumberField({ initial: 6, 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 }), evasion: new fields.NumberField({ initial: 0, integer: true }),
// armor: new fields.SchemaField({ // armor: new fields.SchemaField({
// value: new fields.NumberField({ initial: 0, integer: true }), // 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.evasion = this.class?.system?.evasion ?? 0;
// this.armor.value = this.activeArmor?.baseScore ?? 0; // this.armor.value = this.activeArmor?.baseScore ?? 0;
this.damageThresholds = this.class?.system?.damageThresholds ?? { minor: 0, major: 0, severe: 0 };
this.applyLevels(); this.applyLevels();
this.applyEffects(); this.applyEffects();
@ -400,10 +390,7 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
stressBonus = 0, stressBonus = 0,
proficiencyBonus = 0, proficiencyBonus = 0,
evasionBonus = 0, evasionBonus = 0,
armorBonus = 0, armorBonus = 0;
minorThresholdBonus = 0,
majorThresholdBonus = 0,
severeThresholdBonus = 0;
let experienceBonuses = {}; let experienceBonuses = {};
let advancementFirst = null, let advancementFirst = null,
advancementSecond = null; advancementSecond = null;
@ -439,11 +426,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
armorBonus += Object.keys(tierData.armorOrEvasionSlot).filter( armorBonus += Object.keys(tierData.armorOrEvasionSlot).filter(
x => tierData.armorOrEvasionSlot[x] === 'armor' x => tierData.armorOrEvasionSlot[x] === 'armor'
).length; ).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, max: this.armor ? this.armor.system.marks.max + armorBonus : 0,
value: this.armor ? this.armor.system.marks.value : 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) })); 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.maxLoadout = Math.min(this.domainData.maxLoadout + 1, 5);
this.domainData.maxCards += 1; 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;
}
} }
} }

View file

@ -2,16 +2,12 @@
<legend class="legend">{{localize "DAGGERHEART.Sheets.PC.Health.Title"}}</legend> <legend class="legend">{{localize "DAGGERHEART.Sheets.PC.Health.Title"}}</legend>
<div class="threshold-container"> <div class="threshold-container">
<div class="threshold-box">
{{document.system.damageThresholds.minor}}
</div>
<div class="threshold-spacer"> <div class="threshold-spacer">
<i class="fa-solid fa-caret-left"></i>
<div class="health-category">{{localize "DAGGERHEART.Sheets.PC.Health.Minor"}}</div> <div class="health-category">{{localize "DAGGERHEART.Sheets.PC.Health.Minor"}}</div>
</div> </div>
<div class="threshold-box"> <div class="threshold-box">
{{document.system.damageThresholds.major}} {{document.damageThresholds.major}}
</div> </div>
<div class="threshold-spacer"> <div class="threshold-spacer">
<i class="fa-solid fa-caret-left"></i> <i class="fa-solid fa-caret-left"></i>
@ -19,7 +15,7 @@
</div> </div>
<div class="threshold-box"> <div class="threshold-box">
{{document.system.damageThresholds.severe}} {{document.damageThresholds.severe}}
</div> </div>
<div class="threshold-spacer"> <div class="threshold-spacer">
<i class="fa-solid fa-caret-left"></i> <i class="fa-solid fa-caret-left"></i>