mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-04-21 15:03:37 +02:00
94 lines
3.4 KiB
JavaScript
94 lines
3.4 KiB
JavaScript
import { RefreshFeatures } from '../../../helpers/utils.mjs';
|
|
|
|
const { HandlebarsApplicationMixin } = foundry.applications.api;
|
|
const { AbstractSidebarTab } = foundry.applications.sidebar;
|
|
/**
|
|
* The daggerheart menu tab.
|
|
* @extends {AbstractSidebarTab}
|
|
* @mixes HandlebarsApplication
|
|
*/
|
|
export default class DaggerheartMenu extends HandlebarsApplicationMixin(AbstractSidebarTab) {
|
|
constructor(options) {
|
|
super(options);
|
|
|
|
this.refreshSelections = DaggerheartMenu.defaultRefreshSelections();
|
|
}
|
|
|
|
static defaultRefreshSelections() {
|
|
return {
|
|
session: { selected: false, label: game.i18n.localize('DAGGERHEART.GENERAL.RefreshType.session') },
|
|
scene: { selected: false, label: game.i18n.localize('DAGGERHEART.GENERAL.RefreshType.scene') },
|
|
longRest: { selected: false, label: game.i18n.localize('DAGGERHEART.GENERAL.RefreshType.longrest') },
|
|
shortRest: { selected: false, label: game.i18n.localize('DAGGERHEART.GENERAL.RefreshType.shortrest') }
|
|
};
|
|
}
|
|
|
|
/** @override */
|
|
static DEFAULT_OPTIONS = {
|
|
classes: ['dh-style', 'directory'],
|
|
window: {
|
|
title: 'SIDEBAR.TabSettings'
|
|
},
|
|
actions: {
|
|
selectRefreshable: DaggerheartMenu.#selectRefreshable,
|
|
refreshActors: DaggerheartMenu.#refreshActors,
|
|
createFallCollisionDamage: DaggerheartMenu.#createFallCollisionDamage
|
|
}
|
|
};
|
|
|
|
/** @override */
|
|
static tabName = 'daggerheartMenu';
|
|
|
|
/** @override */
|
|
static PARTS = {
|
|
main: { template: 'systems/daggerheart/templates/sidebar/daggerheart-menu/main.hbs' }
|
|
};
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @inheritDoc */
|
|
async _prepareContext(options) {
|
|
const context = await super._prepareContext(options);
|
|
context.refreshables = this.refreshSelections;
|
|
context.disableRefresh = Object.values(this.refreshSelections).every(x => !x.selected);
|
|
context.fallAndCollision = CONFIG.DH.GENERAL.fallAndCollisionDamage;
|
|
|
|
return context;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
/* Application Clicks Actions */
|
|
/* -------------------------------------------- */
|
|
|
|
static async #selectRefreshable(_event, button) {
|
|
const { type } = button.dataset;
|
|
this.refreshSelections[type].selected = !this.refreshSelections[type].selected;
|
|
this.render();
|
|
}
|
|
|
|
static async #refreshActors() {
|
|
const refreshKeys = Object.keys(this.refreshSelections).filter(key => this.refreshSelections[key].selected);
|
|
await RefreshFeatures(refreshKeys);
|
|
|
|
this.refreshSelections = DaggerheartMenu.defaultRefreshSelections();
|
|
this.render();
|
|
}
|
|
|
|
static async #createFallCollisionDamage(_event, button) {
|
|
const data = CONFIG.DH.GENERAL.fallAndCollisionDamage[button.dataset.key];
|
|
const roll = new Roll(data.damageFormula);
|
|
await roll.evaluate();
|
|
|
|
/* class BaseRoll needed to get rendered by foundryRoll.hbs */
|
|
const rollJSON = roll.toJSON();
|
|
rollJSON.class = 'BaseRoll';
|
|
|
|
foundry.documents.ChatMessage.implementation.create({
|
|
title: game.i18n.localize(data.chatTitle),
|
|
author: game.user.id,
|
|
speaker: foundry.documents.ChatMessage.implementation.getSpeaker(),
|
|
rolls: [rollJSON],
|
|
sound: CONFIG.sounds.dice
|
|
});
|
|
}
|
|
}
|