diff --git a/lang/en.json b/lang/en.json index 3f8c4321..4f1007c4 100755 --- a/lang/en.json +++ b/lang/en.json @@ -226,6 +226,7 @@ "confirmText": "Would you like to level up your companion {name} by {levelChange} levels at this time? (You can do it manually later)" }, "viewLevelups": "View Levelups", + "viewParty": "View Party", "InvalidOldCharacterImportTitle": "Old Character Import", "InvalidOldCharacterImportText": "Character data exported prior to system version 1.1 will not generate a complete character. Do you wish to continue?", "cancelBeastform": "Cancel Beastform" diff --git a/module/applications/sheets/actors/character.mjs b/module/applications/sheets/actors/character.mjs index b48d459d..594269be 100644 --- a/module/applications/sheets/actors/character.mjs +++ b/module/applications/sheets/actors/character.mjs @@ -32,7 +32,8 @@ export default class CharacterSheet extends DHBaseActorSheet { handleResourceDice: CharacterSheet.#handleResourceDice, advanceResourceDie: CharacterSheet.#advanceResourceDie, cancelBeastform: CharacterSheet.#cancelBeastform, - useDowntime: this.useDowntime + useDowntime: this.useDowntime, + viewParty: CharacterSheet.#viewParty, }, window: { resizable: true, @@ -892,6 +893,41 @@ export default class CharacterSheet extends DHBaseActorSheet { game.system.api.fields.ActionFields.BeastformField.handleActiveTransformations.call(item); } + static async #viewParty(_, target) { + const parties = this.document.parties; + if (parties.size <= 1) { + parties.first()?.sheet.render({ force: true }); + return; + } + + const buttons = parties.map((p) => { + const button = document.createElement("button"); + button.type = "button"; + button.classList.add("plain"); + const img = document.createElement("img"); + img.src = p.img; + button.append(img); + const name = document.createElement("span"); + name.textContent = p.name; + button.append(name); + button.addEventListener("click", () => { + p.sheet?.render({ force: true }); + game.tooltip.dismissLockedTooltips(); + }); + return button; + }); + + const html = document.createElement("div"); + html.classList.add("party-list"); + html.append(...buttons); + + game.tooltip.dismissLockedTooltips(); + game.tooltip.activate(target, { + html, + locked: true, + }) + } + /** * Open the downtime application. * @type {ApplicationClickAction} diff --git a/styles/less/sheets/actors/character/header.less b/styles/less/sheets/actors/character/header.less index 4115fbd5..93d6c6be 100644 --- a/styles/less/sheets/actors/character/header.less +++ b/styles/less/sheets/actors/character/header.less @@ -145,6 +145,11 @@ button { flex: 1; + padding: 0 0.375rem; + } + + button[data-action=viewParty] { + margin-right: 6px; } } diff --git a/styles/less/ux/tooltip/tooltip.less b/styles/less/ux/tooltip/tooltip.less index d9a83d59..bfe0c01f 100644 --- a/styles/less/ux/tooltip/tooltip.less +++ b/styles/less/ux/tooltip/tooltip.less @@ -344,4 +344,20 @@ aside[role='tooltip'].locked-tooltip:has(div.daggerheart.dh-style.tooltip.card-s margin-bottom: 4px; } } + + .party-list { + display: flex; + flex-direction: column; + button { + width: 100%; + align-items: center; + justify-content: start; + img { + border: none; + width: 1rem; + height: 1rem; + object-fit: contain; + } + } + } } diff --git a/templates/sheets/actors/character/header.hbs b/templates/sheets/actors/character/header.hbs index be3557ff..1459e10b 100644 --- a/templates/sheets/actors/character/header.hbs +++ b/templates/sheets/actors/character/header.hbs @@ -87,11 +87,16 @@ {{/if}}
- + {{/if}} + -