[V14] Refactor ArmorChange schema and fix some bugs (#1742)

* Refactor ArmorChange schema and fix some bugs

* Add current back to schema

* Fixed so changing armor values and taking damage works again

* Fixed so that scrolltexts for armor changes work again

* Removed old marks on armor.system

* Restored damageReductionDialog armorScore.value

* Use toggle for css class addition/removal

* Fix armor change type choices

* Added ArmorChange DamageThresholds

---------

Co-authored-by: WBHarry <williambjrklund@gmail.com>
This commit is contained in:
Carlos Fernandez 2026-03-21 08:53:12 -04:00 committed by GitHub
parent 6193153596
commit 50dcbf4396
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
68 changed files with 356 additions and 428 deletions

View file

@ -1003,16 +1003,16 @@ export default class CharacterSheet extends DHBaseActorSheet {
const effect = await foundry.utils.fromUuid(event.target.dataset.uuid);
const armorChange = effect.system.armorChange;
if (!armorChange) return;
const value = Math.max(Math.min(Number.parseInt(event.target.value), effect.system.armorData.max), 0);
const current = Math.max(Math.min(Number.parseInt(event.target.value), effect.system.armorData.max), 0);
const newChanges = effect.system.changes.map(change => ({
...change,
value: change.type === 'armor' ? value : change.value
value: change.type === 'armor' ? { ...change.value, current } : change.value
}));
event.target.value = value;
event.target.value = current;
const progressBar = event.target.closest('.status-bar.armor-slots').querySelector('progress');
progressBar.value = value;
progressBar.value = current;
await effect.update({ 'system.changes': newChanges });
}
@ -1023,27 +1023,22 @@ export default class CharacterSheet extends DHBaseActorSheet {
const armorChange = effect.system.armorChange;
if (!armorChange) return;
const { value } = effect.system.armorData;
const { current } = effect.system.armorData;
const inputValue = Number.parseInt(target.dataset.value);
const decreasing = value >= inputValue;
const newValue = decreasing ? inputValue - 1 : inputValue;
const decreasing = current >= inputValue;
const newCurrent = decreasing ? inputValue - 1 : inputValue;
const newChanges = effect.system.changes.map(change => ({
...change,
value: change.type === 'armor' ? newValue : change.value
value: change.type === 'armor' ? { ...change.value, current: newCurrent } : change.value
}));
const container = target.closest('.slot-bar');
for (const armorSlot of container.querySelectorAll('.armor-slot i')) {
const index = Number.parseInt(armorSlot.dataset.index);
if (decreasing && index >= newValue) {
armorSlot.classList.remove('fa-shield');
armorSlot.classList.add('fa-shield-halved');
} else if (!decreasing && index < newValue) {
armorSlot.classList.add('fa-shield');
armorSlot.classList.remove('fa-shield-halved');
}
const marked = !decreasing && Number.parseInt(armorSlot.dataset.index) < newCurrent;
armorSlot.classList.toggle('fa-shield', marked);
armorSlot.classList.toggle('fa-shield-halved', !marked);
}
await effect.update({ 'system.changes': newChanges });