mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-12 03:31:07 +01:00
tbd work on summon action type
This commit is contained in:
parent
6cbe753552
commit
e83202681e
4 changed files with 134 additions and 0 deletions
48
module/applications/dialogs/summonDialog.mjs
Normal file
48
module/applications/dialogs/summonDialog.mjs
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
|
||||||
|
|
||||||
|
export default class DHSummonDialog extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||||
|
constructor(summonData) {
|
||||||
|
super(summonData);
|
||||||
|
// Initialize summons and index
|
||||||
|
this.summons = summonData.summons || [];
|
||||||
|
this.index = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
get_title() {
|
||||||
|
return game.i18n.localize("DAGGERHEART.DIALOGS.SUMMON.title");
|
||||||
|
}
|
||||||
|
|
||||||
|
static DEFAULT_OPTIONS= {
|
||||||
|
...super.DEFAULT_OPTIONS,
|
||||||
|
template: 'systems/daggerheart/module/applications/dialogs/summon/summonDialog.hbs',
|
||||||
|
width: 400,
|
||||||
|
height: 'auto',
|
||||||
|
classes: ['daggerheart', 'dialog', 'summon-dialog'],
|
||||||
|
dragDrop: [{ dragSelector: '.summon-token', dropSelector: null, handler:'onDrop'}]
|
||||||
|
};
|
||||||
|
|
||||||
|
async _prepareContext() {
|
||||||
|
const context = await super._prepareContext();
|
||||||
|
context.summons=this.summons;
|
||||||
|
context.index=this.index;
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
|
||||||
|
getData(options={}) {
|
||||||
|
const data = super.getData(options);
|
||||||
|
data.summons=this.summons;
|
||||||
|
data.index=this.index;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
async prepareContext() {
|
||||||
|
const context = await super.prepareContext();
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
|
||||||
|
async onDrop(event) {//add to canvas
|
||||||
|
event.preventDefault();
|
||||||
|
const tokenData = JSON.parse(event.dataTransfer.getData('text/plain'));
|
||||||
|
const position = { x: event.clientX, y: event.clientY };
|
||||||
|
await canvas.scene.createEmbeddedDocuments("Token", [tokenData], { temporary: false, x: position.x, y: position.y });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -9,3 +9,4 @@ export { default as BeastformField } from './beastformField.mjs';
|
||||||
export { default as DamageField } from './damageField.mjs';
|
export { default as DamageField } from './damageField.mjs';
|
||||||
export { default as RollField } from './rollField.mjs';
|
export { default as RollField } from './rollField.mjs';
|
||||||
export { default as MacroField } from './macroField.mjs';
|
export { default as MacroField } from './macroField.mjs';
|
||||||
|
export { default as SummonField } from './summonField.mjs';
|
||||||
|
|
|
||||||
61
module/data/fields/action/summonField.mjs
Normal file
61
module/data/fields/action/summonField.mjs
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
import DHSummonDialog from '../../../applications/dialogs/summonDialog.mjs';
|
||||||
|
|
||||||
|
const fields = foundry.data.fields;
|
||||||
|
|
||||||
|
export default class DHSummonField extends fields.SchemaField {
|
||||||
|
/**
|
||||||
|
* Action Workflow order
|
||||||
|
*/
|
||||||
|
static order = 120;
|
||||||
|
|
||||||
|
constructor(options = {}, context = {}) {
|
||||||
|
const summonFields = {
|
||||||
|
summon: new fields.ArrayField(new fields.SchemaField({
|
||||||
|
actorUUID: new fields.DocumentUUIDField({
|
||||||
|
type: 'Actor',
|
||||||
|
required: true }),
|
||||||
|
count: new fields.NumberField({
|
||||||
|
required: true,
|
||||||
|
default: 1,
|
||||||
|
min: 1,
|
||||||
|
integer: true })
|
||||||
|
}), { required: false, initial: [] })
|
||||||
|
};
|
||||||
|
super(summonFields, options, context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Summon Action Workflow part.
|
||||||
|
* Must be called within Action context or similar.
|
||||||
|
* @param {object} config Object that contains workflow datas. Usually made from Action Fields prepareConfig methods.
|
||||||
|
*/
|
||||||
|
static async execute(config) {
|
||||||
|
const selected = await DHSummonDialog.configure(config, this.item);
|
||||||
|
if (!selected) return false;
|
||||||
|
return await DHSummonField.summon.call(this, selected);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Update Action Workflow config object.
|
||||||
|
* Must be called within Action context.
|
||||||
|
* @param {object} config Object that contains workflow datas. Usually made from Action Fields prepareConfig methods.
|
||||||
|
*/
|
||||||
|
prepareConfig(config) {
|
||||||
|
if (!canvas.scene){
|
||||||
|
ui.notifications.warn(game.i18n.localize("DAGGERHEART.ACTIONS.TYPES.summon.error"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Logic to perform the summon action - incomplete implementation
|
||||||
|
*/
|
||||||
|
|
||||||
|
get defaultValues() {
|
||||||
|
return {
|
||||||
|
summon: { actorUUID: "", count: 1 }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
get canSummon() {
|
||||||
|
return game.user.can('TOKEN_CREATE');
|
||||||
|
}
|
||||||
|
}
|
||||||
24
templates/dialogs/summon/summonDialog.hbs
Normal file
24
templates/dialogs/summon/summonDialog.hbs
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<fieldset class="one-column" data-key="summon">
|
||||||
|
<legend>
|
||||||
|
{{localize "DAGGERHEART.DIALOGS.Summon.title"}}
|
||||||
|
</legend>
|
||||||
|
<p class="hint">{{localize "DAGGERHEART.DIALOGS.Summon.hint"}}</p>
|
||||||
|
|
||||||
|
<div class="summons-list">
|
||||||
|
{{#each summons as |entry index|}}
|
||||||
|
<ul class="actor-summon-item">
|
||||||
|
<div class="actor-summon-line">
|
||||||
|
<img class="image" src="{{entry.img}}" />
|
||||||
|
{{#if (gte entry.count 1)}}
|
||||||
|
<h4 class="h4">
|
||||||
|
{{entry.name}} (x{{entry.count}})
|
||||||
|
</h4>
|
||||||
|
{{else}}
|
||||||
|
<h4 class="h4 disabled">
|
||||||
|
{{entry.name}}
|
||||||
|
</h4>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
</ul>
|
||||||
|
{{/each}}
|
||||||
|
</div>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue