diff --git a/langs/en-ca.json b/langs/en-ca.json index 0ed068f..b1858cc 100644 --- a/langs/en-ca.json +++ b/langs/en-ca.json @@ -49,6 +49,12 @@ }, "damage": "Damage", "delete": "Delete", + "difficulties": { + "easy": "Easy", + "normal": "Normal", + "tough": "Tough", + "hard": "Hard" + }, "edit": "Edit", "empty": "---", "equipped": "Equipped", diff --git a/module/Apps/CryptApp.mjs b/module/Apps/CryptApp.mjs index a4c3053..1882623 100644 --- a/module/Apps/CryptApp.mjs +++ b/module/Apps/CryptApp.mjs @@ -7,19 +7,31 @@ const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api; export class CryptApp extends GenericAppMixin(HandlebarsApplicationMixin(ApplicationV2)) { // #region Options static DEFAULT_OPTIONS = { + classes: [ + `ripcrypt--CryptApp`, + ], window: { - title: `Crypt Overview`, + title: `Crypt`, frame: true, positioned: true, resizable: false, - minimizable: true, + minimizable: false, + }, + position: { + width: 100, }, actions: {}, }; static PARTS = { - main: { - template: filePath(`templates/Apps/CryptApp/main.hbs`), + turnCount: { + template: filePath(`templates/Apps/CryptApp/turnCount.hbs`), + }, + delveConditions: { + template: filePath(`templates/Apps/CryptApp/delveConditions.hbs`), + }, + fate: { + template: filePath(`templates/Apps/CryptApp/fate.hbs`), }, }; // #endregion @@ -31,9 +43,49 @@ export class CryptApp extends GenericAppMixin(HandlebarsApplicationMixin(Applica return frame; }; + async _onRender(context, options) { + await super._onRender(context, options); + + // Shortcut because users can't edit + if (!game.user.isGM) { return }; + + // Add event listener for the dropdown + if (options.parts.includes(`delveConditions`)) { + const select = this.element.querySelector(`#${this.id}-difficulty`); + select.addEventListener(`change`, async (ev) => { + const newDifficulty = parseInt(ev.target.value); + if (!Number.isNaN(newDifficulty)) { + await game.settings.set(`ripcrypt`, `dc`, newDifficulty); + }; + this.render({ parts: [`delveConditions`] }); + }); + }; + }; + async _preparePartContext(partId, ctx, opts) { ctx = await super._preparePartContext(partId, ctx, opts); - Logger.log(`Context`, ctx); + + ctx.meta.editable = game.user.isGM; + + switch (partId) { + case `delveConditions`: { + ctx = this._prepareDifficulty(ctx); + break; + }; + }; + + Logger.log(`${partId} Context`, ctx); + return ctx; + }; + + _prepareDifficulty(ctx) { + ctx.options = [ + { 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 }, + ]; + ctx.difficulty = game.settings.get(`ripcrypt`, `dc`); return ctx; }; // #endregion diff --git a/module/settings/metaSettings.mjs b/module/settings/metaSettings.mjs index 00c0fa4..b50ec89 100644 --- a/module/settings/metaSettings.mjs +++ b/module/settings/metaSettings.mjs @@ -4,5 +4,8 @@ export function registerMetaSettings() { type: Number, config: false, requiresReload: false, + onChange: () => { + CONFIG.ui.crypt.render({ parts: [ `delveConditions` ]}); + }, }); }; diff --git a/templates/Apps/CryptApp/delveConditions.hbs b/templates/Apps/CryptApp/delveConditions.hbs new file mode 100644 index 0000000..fa36f8c --- /dev/null +++ b/templates/Apps/CryptApp/delveConditions.hbs @@ -0,0 +1,17 @@ +