mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-11 19:25:21 +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
|
|
@ -70,7 +70,8 @@
|
||||||
"summon": {
|
"summon": {
|
||||||
"name": "Summon",
|
"name": "Summon",
|
||||||
"tooltip": "Create tokens in the scene.",
|
"tooltip": "Create tokens in the scene.",
|
||||||
"error": "You do not have permission to summon tokens or there is no active scene."
|
"error": "You do not have permission to summon tokens or there is no active scene.",
|
||||||
|
"invalidDrop": "You can only drop Actor entities to summon."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Config": {
|
"Config": {
|
||||||
|
|
@ -125,6 +126,7 @@
|
||||||
"summon":{
|
"summon":{
|
||||||
"addSummonEntry": "Add Summon Entry",
|
"addSummonEntry": "Add Summon Entry",
|
||||||
"actorUUID": "Actor to Summon",
|
"actorUUID": "Actor to Summon",
|
||||||
|
"actor": "Actor",
|
||||||
"count": "Count",
|
"count": "Count",
|
||||||
"hint": "Add Actor(s) and the quantity to summon under this action."
|
"hint": "Add Actor(s) and the quantity to summon under this action."
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,8 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2)
|
||||||
handler: this.updateForm,
|
handler: this.updateForm,
|
||||||
submitOnChange: true,
|
submitOnChange: true,
|
||||||
closeOnSubmit: false
|
closeOnSubmit: false
|
||||||
}
|
},
|
||||||
|
dragDrop: [{ dragSelector: null, dropSelector: '.summon-actor-drop'}]
|
||||||
};
|
};
|
||||||
|
|
||||||
static PARTS = {
|
static PARTS = {
|
||||||
|
|
@ -233,4 +234,15 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2)
|
||||||
this.tabGroups.primary = 'base';
|
this.tabGroups.primary = 'base';
|
||||||
await super.close(options);
|
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.effects = effects;
|
||||||
this.sheetUpdate = sheetUpdate;
|
this.sheetUpdate = sheetUpdate;
|
||||||
|
|
||||||
this._dragDrop = this._createDragDropHandlers();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static DEFAULT_OPTIONS = {
|
static DEFAULT_OPTIONS = {
|
||||||
...DHActionBaseConfig.DEFAULT_OPTIONS,
|
...DHActionBaseConfig.DEFAULT_OPTIONS,
|
||||||
dragDrop: [{ dragSelector: null, dropSelector: '.summon-actor-drop' }],
|
|
||||||
actions: {
|
actions: {
|
||||||
...DHActionBaseConfig.DEFAULT_OPTIONS.actions,
|
...DHActionBaseConfig.DEFAULT_OPTIONS.actions,
|
||||||
addEffect: this.addEffect,
|
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) {
|
async _prepareContext(options) {
|
||||||
const context = await super._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.effects = this.effects;
|
||||||
context.getEffectDetails = this.getEffectDetails.bind(this);
|
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.effects = await this.sheetUpdate(this.action.toObject(), { ...updatedEffect, id });
|
||||||
this.render();
|
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) });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
import { ui } from '../../applications/_module.mjs';
|
|
||||||
import DHBaseAction from './baseAction.mjs';
|
import DHBaseAction from './baseAction.mjs';
|
||||||
|
|
||||||
export default class DHSummonAction extends DHBaseAction {
|
export default class DHSummonAction extends DHBaseAction {
|
||||||
|
|
|
||||||
|
|
@ -6,38 +6,8 @@
|
||||||
<p class="hint">{{localize "DAGGERHEART.ACTIONS.Settings.summon.hint"}}</p>
|
<p class="hint">{{localize "DAGGERHEART.ACTIONS.Settings.summon.hint"}}</p>
|
||||||
{{#each source as |entry index|}}
|
{{#each source as |entry index|}}
|
||||||
<div class="nest-inputs summon-entry">
|
<div class="nest-inputs summon-entry">
|
||||||
|
{{formField ../fields.actorUUID label="DAGGERHEART.ACTIONS.Settings.summon.actor" value=entry.actorUUID name=(concat "summon." index ".actorUUID") localize=true classes="summon-actor-drop"}}
|
||||||
{{!-- Actor --}}
|
{{formField ../fields.count label="DAGGERHEART.ACTIONS.Settings.summon.count" value=entry.count name=(concat "summon." index ".count") localize=true}}
|
||||||
<div class="summon-actor-drop drop-section" data-index="{{index}}">
|
|
||||||
{{#if entry.actorUUID}}
|
|
||||||
{{!-- Filled State --}}
|
|
||||||
{{#with (lookup @root.summonActors index) as |actor|}}
|
|
||||||
<div class="suggested-item item-line">
|
|
||||||
<img class="image" src="{{actor.img}}" title="{{actor.name}}"/>
|
|
||||||
<span class="actor-name">{{actor.name}}</span>
|
|
||||||
{{!-- Hidden input to store the actual value --}}
|
|
||||||
<input type="hidden" name="summon.{{index}}.actorUUID" value="{{../entry.actorUUID}}">
|
|
||||||
</div>
|
|
||||||
{{/with}}
|
|
||||||
{{else}}
|
|
||||||
{{!-- Empty State --}}
|
|
||||||
<div class="drag-area">
|
|
||||||
{{localize "DAGGERHEART.GENERAL.missingDragDropThing" thing=(localize "Actor")}}
|
|
||||||
<input type="hidden" name="summon.{{index}}.actorUUID" value="">
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{!-- Count --}}
|
|
||||||
{{formField ../fields.count
|
|
||||||
label="DAGGERHEART.ACTIONS.Settings.summon.count"
|
|
||||||
name=(concat "summon." index ".count")
|
|
||||||
value=entry.count
|
|
||||||
min=1
|
|
||||||
localize=true}}
|
|
||||||
{{!-- Obtained idea from cost.hbs --}}
|
|
||||||
<a class="btn" data-tooltip="{{localize "CONTROLS.CommonDelete"}}" data-action="removeElement" data-index="{{index}}"><i class="fas fa-trash"></i></a>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue