mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-12 03:31:07 +01:00
91 lines
2.3 KiB
JavaScript
91 lines
2.3 KiB
JavaScript
const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
|
|
|
|
export default class ActionSelectionDialog extends HandlebarsApplicationMixin(ApplicationV2) {
|
|
constructor(item, event, options = {}) {
|
|
super(options);
|
|
this.#item = item;
|
|
this.#event = event;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @override */
|
|
static DEFAULT_OPTIONS = {
|
|
classes: ['daggerheart', 'dh-style', 'dialog'],
|
|
actions: {
|
|
choose: ActionSelectionDialog.#onChooseAction
|
|
},
|
|
position: {
|
|
width: 400
|
|
}
|
|
};
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
static PARTS = {
|
|
actions: {
|
|
template: 'systems/daggerheart/templates/dialogs/actionSelect.hbs'
|
|
}
|
|
};
|
|
|
|
#item;
|
|
|
|
get item() {
|
|
return this.#item;
|
|
}
|
|
|
|
#event;
|
|
|
|
get event() {
|
|
return this.#event;
|
|
}
|
|
|
|
#action;
|
|
|
|
get action() {
|
|
return this.#action ?? null;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @override */
|
|
get title() {
|
|
return game.i18n.localize('DAGGERHEART.CONFIG.SelectAction.selectAction');
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @inheritDoc */
|
|
async _prepareContext(options) {
|
|
const actions = this.#item.system.actionsList.map(action => ({
|
|
...action.toObject(),
|
|
id: action.id,
|
|
img: action.baseAction ? action.parent.parent.img : action.img
|
|
})),
|
|
itemName = this.#item.name;
|
|
return {
|
|
...(await super._prepareContext(options)),
|
|
actions,
|
|
itemName
|
|
};
|
|
}
|
|
|
|
static async #onChooseAction(event, button) {
|
|
const { actionId } = button.dataset;
|
|
this.#action = this.#item.system.actionsList.find(a => a._id === actionId);
|
|
Object.defineProperty(this.#event, 'shiftKey', {
|
|
get() {
|
|
return event.shiftKey;
|
|
}
|
|
});
|
|
this.close();
|
|
}
|
|
|
|
static create(item, event, options) {
|
|
return new Promise(resolve => {
|
|
const dialog = new this(item, event, options);
|
|
dialog.addEventListener('close', () => resolve(dialog.action), { once: true });
|
|
dialog.render({ force: true });
|
|
});
|
|
}
|
|
}
|