mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-17 23:49:02 +01:00
Added for all class items and subclass
This commit is contained in:
parent
7ff7f718ed
commit
30d049e919
4 changed files with 90 additions and 21 deletions
|
|
@ -8,6 +8,8 @@
|
|||
* @property {boolean} isInventoryItem- Indicates whether items of this type is a Inventory Item
|
||||
*/
|
||||
|
||||
import { addLinkedItemsDiff, updateLinkedItemApps } from '../../helpers/utils.mjs';
|
||||
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
export default class BaseDataItem extends foundry.abstract.TypeDataModel {
|
||||
|
|
@ -153,30 +155,12 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel {
|
|||
const allowed = await super._preUpdate(changed, options, userId);
|
||||
if (allowed === false) return false;
|
||||
|
||||
if (changed.system?.features) {
|
||||
const prevFeatures = new Set(this.features);
|
||||
const newFeatures = new Set(changed.system.features);
|
||||
options.changedFeatures = {
|
||||
toLink: Array.from(newFeatures.difference(prevFeatures).map(feature => feature.item ?? feature)),
|
||||
toUnlink: Array.from(
|
||||
prevFeatures.difference(newFeatures).map(feature => feature.item?.uuid ?? feature.uuid)
|
||||
)
|
||||
};
|
||||
}
|
||||
addLinkedItemsDiff(changed.system?.features, this.features, options, 'changedFeatures');
|
||||
}
|
||||
|
||||
_onUpdate(changed, options, userId) {
|
||||
super._onUpdate(changed, options, userId);
|
||||
|
||||
if (options.changedFeatures) {
|
||||
options.changedFeatures.toLink.forEach(featureUuid => {
|
||||
const doc = foundry.utils.fromUuidSync(featureUuid);
|
||||
doc.apps[this.parent.sheet.id] = this.parent.sheet;
|
||||
});
|
||||
options.changedFeatures.toUnlink.forEach(featureUuid => {
|
||||
const doc = foundry.utils.fromUuidSync(featureUuid);
|
||||
delete doc.apps[this.parent.sheet.id];
|
||||
});
|
||||
}
|
||||
updateLinkedItemApps(options, 'changedFeatures', this.parent.sheet);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import BaseDataItem from './base.mjs';
|
|||
import ForeignDocumentUUIDField from '../fields/foreignDocumentUUIDField.mjs';
|
||||
import ForeignDocumentUUIDArrayField from '../fields/foreignDocumentUUIDArrayField.mjs';
|
||||
import ItemLinkFields from '../fields/itemLinkFields.mjs';
|
||||
import { addLinkedItemsDiff, updateLinkedItemApps } from '../../helpers/utils.mjs';
|
||||
|
||||
export default class DHClass extends BaseDataItem {
|
||||
/** @inheritDoc */
|
||||
|
|
@ -96,4 +97,49 @@ export default class DHClass extends BaseDataItem {
|
|||
foundry.utils.getProperty(options.parent, `${path}.subclass`)?.delete();
|
||||
}
|
||||
}
|
||||
|
||||
async _preUpdate(changed, options, userId) {
|
||||
const allowed = await super._preUpdate(changed, options, userId);
|
||||
if (allowed === false) return false;
|
||||
|
||||
addLinkedItemsDiff(changed.system?.subclasses, this.subclasses, options, 'changedSubclasses');
|
||||
|
||||
const guide = changed.system?.characterGuide;
|
||||
addLinkedItemsDiff(
|
||||
guide?.suggestedPrimaryWeapon ? [guide.suggestedPrimaryWeapon] : null,
|
||||
this.characterGuide.suggestedPrimaryWeapon ? [this.characterGuide.suggestedPrimaryWeapon] : [],
|
||||
options,
|
||||
'primaryWeapon'
|
||||
);
|
||||
addLinkedItemsDiff(
|
||||
guide?.suggestedSecondaryWeapon ? [guide.suggestedSecondaryWeapon] : null,
|
||||
this.characterGuide.suggestedSecondaryWeapon ? [this.characterGuide.suggestedSecondaryWeapon] : [],
|
||||
options,
|
||||
'secondaryWeapon'
|
||||
);
|
||||
addLinkedItemsDiff(
|
||||
guide?.suggestedArmor ? [guide.suggestedArmor] : null,
|
||||
this.characterGuide.suggestedArmor ? [this.characterGuide.suggestedArmor] : [],
|
||||
options,
|
||||
'armor'
|
||||
);
|
||||
|
||||
addLinkedItemsDiff(changed.system?.inventory?.take, this.inventory.take, options, 'changedTake');
|
||||
addLinkedItemsDiff(changed.system?.inventory?.choiceA, this.inventory.choiceA, options, 'changedChoiceA');
|
||||
addLinkedItemsDiff(changed.system?.inventory?.choiceB, this.inventory.choiceB, options, 'changedChoiceB');
|
||||
}
|
||||
|
||||
_onUpdate(changed, options, userId) {
|
||||
super._onUpdate(changed, options, userId);
|
||||
|
||||
updateLinkedItemApps(options, 'changedSubclasses', this.parent.sheet);
|
||||
|
||||
updateLinkedItemApps(options, 'primaryWeapon', this.parent.sheet);
|
||||
updateLinkedItemApps(options, 'secondaryWeapon', this.parent.sheet);
|
||||
updateLinkedItemApps(options, 'armor', this.parent.sheet);
|
||||
|
||||
updateLinkedItemApps(options, 'changedTake', this.parent.sheet);
|
||||
updateLinkedItemApps(options, 'changedChoiceA', this.parent.sheet);
|
||||
updateLinkedItemApps(options, 'changedChoiceB', this.parent.sheet);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue