ripcrypt/module/Apps/DelveDiceHUD.mjs

106 lines
2.5 KiB
JavaScript

import { filePath } from "../consts.mjs";
import { Logger } from "../utils/Logger.mjs";
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
const conditions = [
{ label: `RipCrypt.common.difficulties.easy`, value: 4 },
{ label: `RipCrypt.common.difficulties.normal`, value: 5 },
{ label: `RipCrypt.common.difficulties.tough`, value: 6 },
{ label: `RipCrypt.common.difficulties.hard`, value: 7 },
];
export class DelveDiceHUD extends HandlebarsApplicationMixin(ApplicationV2) {
// #region Options
static DEFAULT_OPTIONS = {
id: `ripcrypt-delve-dice`,
tag: `aside`,
classes: [
`ripcrypt`,
`ripcrypt--DelveDiceHUD`
],
window: {
frame: false,
positioned: false,
},
actions: {
tourDelta: this.#tourDelta,
},
};
static PARTS = {
previousTour: {
template: filePath(`templates/Apps/DelveDiceHUD/tour/previous.hbs`),
},
difficulty: {
template: filePath(`templates/Apps/DelveDiceHUD/difficulty.hbs`),
},
fateCompass: {
template: filePath(`templates/Apps/DelveDiceHUD/fateCompass.hbs`),
},
currentTour: {
template: filePath(`templates/Apps/DelveDiceHUD/tour/current.hbs`),
},
nextTour: {
template: filePath(`templates/Apps/DelveDiceHUD/tour/next.hbs`),
},
};
// #endregion
// #region Lifecycle
/**
* Injects the element into the Foundry UI in the top middle
*/
_insertElement(element) {
const existing = document.getElementById(element.id);
if (existing) {
existing.replaceWith(element);
} else {
const parent = document.getElementById(`ui-top`);
parent.prepend(element);
};
};
async _onRender(context, options) {
await super._onRender(context, options);
// Shortcut because users can't edit
if (!game.user.isGM) { return };
};
async _preparePartContext(partId, ctx, opts) {
ctx = await super._preparePartContext(partId, ctx, opts);
ctx.meta ??= {};
ctx.meta.editable = game.user.isGM;
switch (partId) {
case `currentTour`: {
await this._prepareTourContext(ctx);
break;
};
case `difficulty`: {
await this._prepareDifficultyContext(ctx);
break;
};
};
Logger.log(`${partId} Context`, ctx);
return ctx;
};
async _prepareTourContext(ctx) {
ctx.tour = game.settings.get(`ripcrypt`, `sandsOfFate`);
};
async _prepareDifficultyContext(ctx) {
ctx.dc = game.settings.get(`ripcrypt`, `dc`);
}
// #endregion
// #region Actions
static async #tourDelta() {
ui.notifications.info(`Button Clicked!`, { console: false });
};
// #endregion
};