mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-17 15:39:02 +01:00
change armor and weapon to be attachableItem
This commit is contained in:
parent
1fc136c81b
commit
a78e1533d7
5 changed files with 82 additions and 19 deletions
|
|
@ -0,0 +1,66 @@
|
||||||
|
import {
|
||||||
|
removeAttachmentFromItem,
|
||||||
|
prepareAttachmentContext,
|
||||||
|
addAttachmentToItem
|
||||||
|
} from '../../../helpers/attachmentHelper.mjs';
|
||||||
|
|
||||||
|
export default function ItemAttachmentSheet(Base) {
|
||||||
|
return class extends Base {
|
||||||
|
static DEFAULT_OPTIONS = {
|
||||||
|
...super.DEFAULT_OPTIONS,
|
||||||
|
dragDrop: [
|
||||||
|
...(super.DEFAULT_OPTIONS.dragDrop || []),
|
||||||
|
{ dragSelector: null, dropSelector: '.attachments-section' }
|
||||||
|
],
|
||||||
|
actions: {
|
||||||
|
...super.DEFAULT_OPTIONS.actions,
|
||||||
|
removeAttachment: this.#removeAttachment
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static PARTS = {
|
||||||
|
...super.PARTS,
|
||||||
|
attachments: {
|
||||||
|
template: 'systems/daggerheart/templates/sheets/global/tabs/tab-attachments.hbs',
|
||||||
|
scrollable: ['.attachments']
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
async _preparePartContext(partId, context) {
|
||||||
|
await super._preparePartContext(partId, context);
|
||||||
|
|
||||||
|
if (partId === 'attachments') {
|
||||||
|
context.attachedItems = await prepareAttachmentContext(this.document);
|
||||||
|
}
|
||||||
|
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
|
||||||
|
async _onDrop(event) {
|
||||||
|
const data = TextEditor.getDragEventData(event);
|
||||||
|
|
||||||
|
const attachmentsSection = event.target.closest('.attachments-section');
|
||||||
|
if (!attachmentsSection) return super._onDrop(event);
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
|
||||||
|
const item = await Item.implementation.fromDropData(data);
|
||||||
|
if (!item) return;
|
||||||
|
|
||||||
|
await addAttachmentToItem({
|
||||||
|
parentItem: this.document,
|
||||||
|
droppedItem: item,
|
||||||
|
parentType: this.document.type
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static async #removeAttachment(event, target) {
|
||||||
|
await removeAttachmentFromItem({
|
||||||
|
parentItem: this.document,
|
||||||
|
attachedUuid: target.dataset.uuid,
|
||||||
|
parentType: this.document.type
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -54,15 +54,6 @@ export default class DHArmor extends AttachableItem {
|
||||||
const allowed = await super._preUpdate(changes, options, user);
|
const allowed = await super._preUpdate(changes, options, user);
|
||||||
if (allowed === false) return false;
|
if (allowed === false) return false;
|
||||||
|
|
||||||
// Handle equipped status changes for attachment effects
|
|
||||||
if (changes.system?.equipped !== undefined && changes.system.equipped !== this.equipped) {
|
|
||||||
await handleAttachmentEffectsOnEquipChange({
|
|
||||||
parentItem: this.parent,
|
|
||||||
newEquippedStatus: changes.system.equipped,
|
|
||||||
parentType: 'armor'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changes.system.features) {
|
if (changes.system.features) {
|
||||||
const removed = this.features.filter(x => !changes.system.features.includes(x));
|
const removed = this.features.filter(x => !changes.system.features.includes(x));
|
||||||
const added = changes.system.features.filter(x => !this.features.includes(x));
|
const added = changes.system.features.filter(x => !this.features.includes(x));
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import BaseDataItem from './base.mjs';
|
import BaseDataItem from './base.mjs';
|
||||||
|
import { handleAttachmentEffectsOnEquipChange } from '../../helpers/attachmentHelper.mjs';
|
||||||
|
|
||||||
export default class AttachableItem extends BaseDataItem {
|
export default class AttachableItem extends BaseDataItem {
|
||||||
static defineSchema() {
|
static defineSchema() {
|
||||||
|
|
@ -8,4 +9,18 @@ export default class AttachableItem extends BaseDataItem {
|
||||||
attached: new fields.ArrayField(new fields.DocumentUUIDField({ type: "Item", nullable: true }))
|
attached: new fields.ArrayField(new fields.DocumentUUIDField({ type: "Item", nullable: true }))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _preUpdate(changes, options, user) {
|
||||||
|
const allowed = await super._preUpdate(changes, options, user);
|
||||||
|
if (allowed === false) return false;
|
||||||
|
|
||||||
|
// Handle equipped status changes for attachment effects
|
||||||
|
if (changes.system?.equipped !== undefined && changes.system.equipped !== this.equipped) {
|
||||||
|
await handleAttachmentEffectsOnEquipChange({
|
||||||
|
parentItem: this.parent,
|
||||||
|
newEquippedStatus: changes.system.equipped,
|
||||||
|
parentType: this.parent.type
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -79,15 +79,6 @@ export default class DHWeapon extends AttachableItem {
|
||||||
const allowed = await super._preUpdate(changes, options, user);
|
const allowed = await super._preUpdate(changes, options, user);
|
||||||
if (allowed === false) return false;
|
if (allowed === false) return false;
|
||||||
|
|
||||||
// Handle equipped status changes for attachment effects
|
|
||||||
if (changes.system?.equipped !== undefined && changes.system.equipped !== this.equipped) {
|
|
||||||
await handleAttachmentEffectsOnEquipChange({
|
|
||||||
parentItem: this.parent,
|
|
||||||
newEquippedStatus: changes.system.equipped,
|
|
||||||
parentType: 'weapon'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changes.system?.features) {
|
if (changes.system?.features) {
|
||||||
const removed = this.features.filter(x => !changes.system.features.includes(x));
|
const removed = this.features.filter(x => !changes.system.features.includes(x));
|
||||||
const added = changes.system.features.filter(x => !this.features.includes(x));
|
const added = changes.system.features.filter(x => !this.features.includes(x));
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ export async function handleAttachmentEffectsOnEquipChange({ parentItem, newEqui
|
||||||
// Item is being unequipped - remove attachment effects
|
// Item is being unequipped - remove attachment effects
|
||||||
const parentUuidProperty = `${parentType}Uuid`;
|
const parentUuidProperty = `${parentType}Uuid`;
|
||||||
const effectsToRemove = actor.effects.filter(effect => {
|
const effectsToRemove = actor.effects.filter(effect => {
|
||||||
const attachmentSource = effect.flags?.daggerheart?.attachmentSource;
|
const attachmentSource = effect.getFlag(CONFIG.DH.id, CONFIG.DH.FLAGS.itemAttachmentSource);
|
||||||
return attachmentSource && attachmentSource[parentUuidProperty] === parentItem.uuid;
|
return attachmentSource && attachmentSource[parentUuidProperty] === parentItem.uuid;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue