mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-12 03:31:07 +01:00
Tried to refine drag drop
This commit is contained in:
parent
1375329541
commit
ad1dee313f
5 changed files with 18 additions and 96 deletions
|
|
@ -35,7 +35,8 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2)
|
|||
handler: this.updateForm,
|
||||
submitOnChange: true,
|
||||
closeOnSubmit: false
|
||||
}
|
||||
},
|
||||
dragDrop: [{ dragSelector: null, dropSelector: '.summon-actor-drop'}]
|
||||
};
|
||||
|
||||
static PARTS = {
|
||||
|
|
@ -233,4 +234,15 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2)
|
|||
this.tabGroups.primary = 'base';
|
||||
await super.close(options);
|
||||
}
|
||||
|
||||
/** Implementation for dragdrop for summon actor selection **/
|
||||
async _onDrop(event) {
|
||||
const data = foundry.applications.ux.TextEditor.getDragEventData(event);
|
||||
const item=await foundry.utils.fromUuid(data.uuid);
|
||||
if (!(item instanceof game.system.api.documents.DhpActor)) {
|
||||
ui.notifications.warn(game.i18n.localize("DAGGERHEART.ACTIONS.TYPES.summon.invalidDrop"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,13 +6,10 @@ export default class DHActionSettingsConfig extends DHActionBaseConfig {
|
|||
|
||||
this.effects = effects;
|
||||
this.sheetUpdate = sheetUpdate;
|
||||
|
||||
this._dragDrop = this._createDragDropHandlers();
|
||||
}
|
||||
|
||||
static DEFAULT_OPTIONS = {
|
||||
...DHActionBaseConfig.DEFAULT_OPTIONS,
|
||||
dragDrop: [{ dragSelector: null, dropSelector: '.summon-actor-drop' }],
|
||||
actions: {
|
||||
...DHActionBaseConfig.DEFAULT_OPTIONS.actions,
|
||||
addEffect: this.addEffect,
|
||||
|
|
@ -21,23 +18,8 @@ export default class DHActionSettingsConfig extends DHActionBaseConfig {
|
|||
}
|
||||
};
|
||||
|
||||
_createDragDropHandlers() {
|
||||
return this.options.dragDrop.map(d => {
|
||||
d.callbacks = {
|
||||
drop: this._onDrop.bind(this)
|
||||
};
|
||||
return new foundry.applications.ux.DragDrop.implementation(d);
|
||||
});
|
||||
}
|
||||
|
||||
async _prepareContext(options) {
|
||||
const context = await super._prepareContext(options);
|
||||
const summonData = this.action.summon || [];
|
||||
context.summonActors = await Promise.all(summonData.map(async (entry) => {
|
||||
if (!entry.actorUUID) return null;
|
||||
const actor = await fromUuid(entry.actorUUID);
|
||||
return actor ? { name: actor.name, img: actor.img } : { name: "Unknown", img: "icons/svg/mystery-man.svg" };
|
||||
}));
|
||||
context.effects = this.effects;
|
||||
context.getEffectDetails = this.getEffectDetails.bind(this);
|
||||
|
||||
|
|
@ -81,47 +63,4 @@ export default class DHActionSettingsConfig extends DHActionBaseConfig {
|
|||
this.effects = await this.sheetUpdate(this.action.toObject(), { ...updatedEffect, id });
|
||||
this.render();
|
||||
}
|
||||
|
||||
//For drag drop implementation for summon actor selection
|
||||
_onRender(context, options) {
|
||||
super._onRender(context, options);
|
||||
this._dragDrop.forEach(d => d.bind(this.element));
|
||||
}
|
||||
|
||||
async _onDrop(event) {
|
||||
const data = TextEditor.getDragEventData(event);
|
||||
console.log("Daggerheart | Summon Drop Data:", data);
|
||||
|
||||
if (!data || !data.uuid) return;
|
||||
|
||||
const doc = await fromUuid(data.uuid);
|
||||
if (!doc) return;
|
||||
|
||||
|
||||
let actorUuid = null;
|
||||
|
||||
if (doc.documentName === "Actor") {
|
||||
actorUuid = doc.uuid;
|
||||
} else if (doc.documentName === "Token" && doc.actor) {
|
||||
actorUuid = doc.actor.uuid;
|
||||
} else {
|
||||
console.warn("Daggerheart | Dropped document is not an Actor:", doc);
|
||||
return;
|
||||
}
|
||||
|
||||
const dropZone = event.target.closest('.summon-actor-drop');
|
||||
if (!dropZone) return;
|
||||
|
||||
const index = Number(dropZone.dataset.index);
|
||||
|
||||
const actionData = this.action.toObject();
|
||||
if (!actionData.summon) actionData.summon = [];
|
||||
|
||||
if (actionData.summon[index]) {
|
||||
actionData.summon[index].actorUUID = actorUuid;
|
||||
|
||||
// Trigger update
|
||||
this.constructor.updateForm.bind(this)(null, null, { object: foundry.utils.flattenObject(actionData) });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue