From 5a874ae2680995b458c0aae3cbd298ad3f9effa3 Mon Sep 17 00:00:00 2001 From: moliloo Date: Wed, 17 Sep 2025 23:51:34 -0300 Subject: [PATCH] add resource buttons actions methods --- module/applications/sheets/actors/party.mjs | 63 ++++++++++++++++++- .../sidebar/tabs/daggerheartMenu.mjs | 14 ++--- module/systemRegistration/socket.mjs | 7 ++- templates/sheets/actors/party/resources.hbs | 8 +-- 4 files changed, 79 insertions(+), 13 deletions(-) diff --git a/module/applications/sheets/actors/party.mjs b/module/applications/sheets/actors/party.mjs index b0495d9a..ee47687d 100644 --- a/module/applications/sheets/actors/party.mjs +++ b/module/applications/sheets/actors/party.mjs @@ -2,8 +2,16 @@ import DHBaseActorSheet from '../api/base-actor.mjs'; import { getDocFromElement } from '../../../helpers/utils.mjs'; import { ItemBrowser } from '../../ui/itemBrowser.mjs'; import FilterMenu from '../../ux/filter-menu.mjs'; +import DaggerheartMenu from '../../sidebar/tabs/daggerheartMenu.mjs'; +import { socketEvent } from '../../../systemRegistration/socket.mjs'; export default class Party extends DHBaseActorSheet { + constructor(options) { + super(options); + + this.refreshSelections = DaggerheartMenu.defaultRefreshSelections(); + } + /**@inheritdoc */ static DEFAULT_OPTIONS = { classes: ['party'], @@ -19,7 +27,11 @@ export default class Party extends DHBaseActorSheet { toggleHitPoints: Party.#toggleHitPoints, toggleStress: Party.#toggleStress, toggleArmorSlot: Party.#toggleArmorSlot, - tempBrowser: Party.#tempBrowser + tempBrowser: Party.#tempBrowser, + refeshActions: Party.#refeshActions, + triggerRest: Party.#triggerRest, + selectRefreshable: DaggerheartMenu.selectRefreshable, + refreshActors: DaggerheartMenu.refreshActors }, dragDrop: [{ dragSelector: '.actors-section .inventory-item', dropSelector: null }] }; @@ -207,6 +219,55 @@ export default class Party extends DHBaseActorSheet { new ItemBrowser().render({ force: true }); } + static async #refeshActions() { + const confirmed = await foundry.applications.api.DialogV2.confirm({ + window: { + title: 'New Section', + icon: 'fa-solid fa-campground' + }, + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/sidebar/daggerheart-menu/main.hbs', + { + refreshables: DaggerheartMenu.defaultRefreshSelections() + } + ), + classes: ['daggerheart', 'dialog', 'dh-style', 'tab', 'sidebar-tab', 'daggerheartMenu-sidebar'] + }); + + if (!confirmed) return; + } + + static async #triggerRest(_, button) { + const confirmed = await foundry.applications.api.DialogV2.confirm({ + window: { + title: game.i18n.localize(`DAGGERHEART.APPLICATIONS.Downtime.${button.dataset.type}.title`), + icon: button.dataset.type === 'shortRest' ? 'fa-solid fa-utensils' : 'fa-solid fa-bed' + }, + content: 'This will trigger a dialog to players make their downtime moves, are you sure?', + classes: ['daggerheart', 'dialog', 'dh-style'] + }); + + if (!confirmed) return; + + this.document.system.partyMembers.forEach(actor => { + game.socket.emit(`system.${CONFIG.DH.id}`, { + action: socketEvent.DowntimeTrigger, + data: { + actorId: actor.uuid, + downtimeType: button.dataset.type + } + }); + }); + } + + static async downtimeMoveQuery({ actorId, downtimeType }) { + const actor = await foundry.utils.fromUuid(actorId); + if (!actor || !actor?.isOwner) reject(); + new game.system.api.applications.dialogs.Downtime(actor, downtimeType === 'shortRest').render({ + force: true + }); + } + /** * Get the set of ContextMenu options for Consumable and Loot. * @returns {import('@client/applications/ux/context-menu.mjs').ContextMenuEntry[]} - The Array of context options passed to the ContextMenu instance diff --git a/module/applications/sidebar/tabs/daggerheartMenu.mjs b/module/applications/sidebar/tabs/daggerheartMenu.mjs index cf7aeae3..4094cc24 100644 --- a/module/applications/sidebar/tabs/daggerheartMenu.mjs +++ b/module/applications/sidebar/tabs/daggerheartMenu.mjs @@ -9,10 +9,10 @@ export default class DaggerheartMenu extends HandlebarsApplicationMixin(Abstract constructor(options) { super(options); - this.refreshSelections = DaggerheartMenu.#defaultRefreshSelections(); + this.refreshSelections = DaggerheartMenu.defaultRefreshSelections(); } - static #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') }, @@ -28,8 +28,8 @@ export default class DaggerheartMenu extends HandlebarsApplicationMixin(Abstract title: 'SIDEBAR.TabSettings' }, actions: { - selectRefreshable: DaggerheartMenu.#selectRefreshable, - refreshActors: DaggerheartMenu.#refreshActors + selectRefreshable: DaggerheartMenu.selectRefreshable, + refreshActors: DaggerheartMenu.refreshActors } }; @@ -123,13 +123,13 @@ export default class DaggerheartMenu extends HandlebarsApplicationMixin(Abstract /* Application Clicks Actions */ /* -------------------------------------------- */ - static async #selectRefreshable(_event, button) { + static async selectRefreshable(_event, button) { const { type } = button.dataset; this.refreshSelections[type].selected = !this.refreshSelections[type].selected; this.render(); } - static async #refreshActors() { + static async refreshActors() { const refreshKeys = Object.keys(this.refreshSelections).filter(key => this.refreshSelections[key].selected); await this.getRefreshables(refreshKeys); const types = refreshKeys.map(x => this.refreshSelections[x].label).join(', '); @@ -138,7 +138,7 @@ export default class DaggerheartMenu extends HandlebarsApplicationMixin(Abstract types: `[${types}]` }) ); - this.refreshSelections = DaggerheartMenu.#defaultRefreshSelections(); + this.refreshSelections = DaggerheartMenu.defaultRefreshSelections(); const cls = getDocumentClass('ChatMessage'); const msg = { diff --git a/module/systemRegistration/socket.mjs b/module/systemRegistration/socket.mjs index f75c7b36..3803c4bc 100644 --- a/module/systemRegistration/socket.mjs +++ b/module/systemRegistration/socket.mjs @@ -1,4 +1,5 @@ import DamageReductionDialog from '../applications/dialogs/damageReductionDialog.mjs'; +import Party from '../applications/sheets/actors/party.mjs'; export function handleSocketEvent({ action = null, data = {} } = {}) { switch (action) { @@ -11,13 +12,17 @@ export function handleSocketEvent({ action = null, data = {} } = {}) { case socketEvent.Refresh: Hooks.call(socketEvent.Refresh, data); break; + case socketEvent.DowntimeTrigger: + Party.downtimeMoveQuery(data); + break; } } export const socketEvent = { GMUpdate: 'DhGMUpdate', Refresh: 'DhRefresh', - DhpFearUpdate: 'DhFearUpdate' + DhpFearUpdate: 'DhFearUpdate', + DowntimeTrigger: 'DowntimeTrigger' }; export const GMUpdateEvent = { diff --git a/templates/sheets/actors/party/resources.hbs b/templates/sheets/actors/party/resources.hbs index e0b073a6..04321fd4 100644 --- a/templates/sheets/actors/party/resources.hbs +++ b/templates/sheets/actors/party/resources.hbs @@ -3,16 +3,16 @@ data-tab='{{tabs.resources.id}}' data-group='{{tabs.resources.group}}' > -
- - -