mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-03-07 14:36:13 +01:00
Added a updateArmorValue function that updates armoreffects according to an auto order
This commit is contained in:
parent
fb9f89fa9d
commit
9dc5830e18
2 changed files with 75 additions and 5 deletions
|
|
@ -115,6 +115,34 @@ export default class ArmorEffect extends foundry.data.ActiveEffectTypeDataModel
|
||||||
await this.parent.update({ 'system.changes': newChanges });
|
await this.parent.update({ 'system.changes': newChanges });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static orderEffectsForAutoChange(armorEffects, increasing) {
|
||||||
|
const getEffectWeight = effect => {
|
||||||
|
switch (effect.parent.type) {
|
||||||
|
case 'loot':
|
||||||
|
case 'consumable':
|
||||||
|
return 2;
|
||||||
|
case 'class':
|
||||||
|
case 'subclass':
|
||||||
|
case 'ancestry':
|
||||||
|
case 'community':
|
||||||
|
case 'feature':
|
||||||
|
case 'domainCard':
|
||||||
|
return 3;
|
||||||
|
case 'weapon':
|
||||||
|
case 'armor':
|
||||||
|
return 4;
|
||||||
|
case 'character':
|
||||||
|
return 5;
|
||||||
|
default:
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return armorEffects.sort((a, b) =>
|
||||||
|
increasing ? getEffectWeight(b) - getEffectWeight(a) : getEffectWeight(a) - getEffectWeight(b)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/* Overrides */
|
/* Overrides */
|
||||||
|
|
||||||
prepareBaseData() {
|
prepareBaseData() {
|
||||||
|
|
|
||||||
|
|
@ -458,11 +458,6 @@ export default class DhCharacter extends BaseDataActor {
|
||||||
return this.parent.items.find(x => x.type === 'armor' && x.system.equipped);
|
return this.parent.items.find(x => x.type === 'armor' && x.system.equipped);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Prep datastructure to be useful when applying automatic armor damage order */
|
|
||||||
get armorEffects() {
|
|
||||||
return Array.from(this.parent.allApplicableEffects());
|
|
||||||
}
|
|
||||||
|
|
||||||
get activeBeastform() {
|
get activeBeastform() {
|
||||||
return this.parent.effects.find(x => x.type === 'beastform');
|
return this.parent.effects.find(x => x.type === 'beastform');
|
||||||
}
|
}
|
||||||
|
|
@ -512,6 +507,53 @@ export default class DhCharacter extends BaseDataActor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async updateArmorValue(armorChange) {
|
||||||
|
if (armorChange === 0) return;
|
||||||
|
|
||||||
|
const increasing = armorChange >= 0;
|
||||||
|
let remainingChange = Math.abs(armorChange);
|
||||||
|
const armorEffects = Array.from(this.parent.allApplicableEffects()).filter(x => x.type === 'armor');
|
||||||
|
const orderedEffects = game.system.api.data.activeEffects.ArmorEffect.orderEffectsForAutoChange(
|
||||||
|
armorEffects,
|
||||||
|
increasing
|
||||||
|
);
|
||||||
|
|
||||||
|
const embeddedUpdates = [];
|
||||||
|
for (const armorEffect of orderedEffects) {
|
||||||
|
let usedArmorChange = 0;
|
||||||
|
if (increasing) {
|
||||||
|
const remainingArmor = armorEffect.system.armorChange.max - armorEffect.system.armorChange.value;
|
||||||
|
usedArmorChange = Math.min(remainingChange, remainingArmor);
|
||||||
|
remainingChange -= usedArmorChange;
|
||||||
|
} else {
|
||||||
|
const changeChange = Math.min(armorEffect.system.armorChange.value, remainingChange);
|
||||||
|
usedArmorChange -= changeChange;
|
||||||
|
remainingChange -= changeChange;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!usedArmorChange) continue;
|
||||||
|
else {
|
||||||
|
if (!embeddedUpdates[armorEffect.parent.id])
|
||||||
|
embeddedUpdates[armorEffect.parent.id] = { doc: armorEffect.parent, updates: [] };
|
||||||
|
|
||||||
|
embeddedUpdates[armorEffect.parent.id].updates.push({
|
||||||
|
'_id': armorEffect.id,
|
||||||
|
'system.changes': [
|
||||||
|
{
|
||||||
|
...armorEffect.system.armorChange,
|
||||||
|
value: armorEffect.system.armorChange.value + usedArmorChange
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (remainingChange === 0) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const { doc, updates } of Object.values(embeddedUpdates))
|
||||||
|
doc.updateEmbeddedDocuments('ActiveEffect', updates);
|
||||||
|
}
|
||||||
|
|
||||||
get sheetLists() {
|
get sheetLists() {
|
||||||
const ancestryFeatures = [],
|
const ancestryFeatures = [],
|
||||||
communityFeatures = [],
|
communityFeatures = [],
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue