diff --git a/lang/en.json b/lang/en.json index fbd8f34c..22d4ae30 100755 --- a/lang/en.json +++ b/lang/en.json @@ -488,7 +488,9 @@ "tokenHUD": { "genericEffects": "Foundry Effects", "depositPartyTokens": "Deposit Party Tokens", - "retrievePartyTokens": "Retrieve Party Tokens" + "retrievePartyTokens": "Retrieve Party Tokens", + "depositCompanionTokens": "Deposit Companion Token", + "retrieveCompanionTokens": "Retrieve Companion Token" } }, "ImageSelect": { diff --git a/module/applications/hud/tokenHUD.mjs b/module/applications/hud/tokenHUD.mjs index 87c3e88e..77caaaff 100644 --- a/module/applications/hud/tokenHUD.mjs +++ b/module/applications/hud/tokenHUD.mjs @@ -5,7 +5,8 @@ export default class DHTokenHUD extends foundry.applications.hud.TokenHUD { classes: ['daggerheart'], actions: { combat: DHTokenHUD.#onToggleCombat, - togglePartyTokens: DHTokenHUD.#togglePartyTokens + togglePartyTokens: DHTokenHUD.#togglePartyTokens, + toggleCompanions: DHTokenHUD.#toggleCompanions } }; @@ -26,7 +27,7 @@ export default class DHTokenHUD extends foundry.applications.hud.TokenHUD { context.partyOnCanvas = this.actor.type === 'party' && this.actor.system.partyMembers.some(member => member.getActiveTokens().length > 0); - context.icons.toggleParty = 'systems/daggerheart/assets/icons/arrow-dunk.png'; + context.icons.toggleClowncar = 'systems/daggerheart/assets/icons/arrow-dunk.png'; context.actorType = this.actor.type; context.usesEffects = this.actor.type !== 'party'; context.canToggleCombat = DHTokenHUD.#nonCombatTypes.includes(this.actor.type) @@ -56,6 +57,9 @@ export default class DHTokenHUD extends foundry.applications.hud.TokenHUD { }, {}) : null; + context.hasCompanion = this.actor.system.companion; + context.companionOnCanvas = context.hasCompanion && this.actor.system.companion.getActiveTokens().length > 0; + return context; } @@ -101,8 +105,24 @@ export default class DHTokenHUD extends foundry.applications.hud.TokenHUD { : 'DAGGERHEART.APPLICATIONS.HUD.tokenHUD.depositPartyTokens' ); + await this.toggleClowncar(this.actor.system.partyMembers); + } + + static async #toggleCompanions(_, button) { + const icon = button.querySelector('img'); + icon.classList.toggle('flipped'); + button.dataset.tooltip = game.i18n.localize( + icon.classList.contains('flipped') + ? 'DAGGERHEART.APPLICATIONS.HUD.tokenHUD.retrieveCompanionTokens' + : 'DAGGERHEART.APPLICATIONS.HUD.tokenHUD.depositCompanionTokens' + ); + + await this.toggleClowncar([this.actor.system.companion]); + } + + async toggleClowncar(actors) { const animationDuration = 500; - const activeTokens = this.actor.system.partyMembers.flatMap(member => member.getActiveTokens()); + const activeTokens = actors.flatMap(member => member.getActiveTokens()); const { x: actorX, y: actorY } = this.document; if (activeTokens.length > 0) { for (let token of activeTokens) { @@ -114,14 +134,15 @@ export default class DHTokenHUD extends foundry.applications.hud.TokenHUD { } } else { const activeScene = game.scenes.find(x => x.id === game.user.viewedScene); - const partyTokenData = []; - for (let member of this.actor.system.partyMembers) { + const tokenData = []; + for (let member of actors) { const data = await member.getTokenDocument(); - partyTokenData.push(data.toObject()); + tokenData.push(data.toObject()); } + const newTokens = await activeScene.createEmbeddedDocuments( 'Token', - partyTokenData.map(tokenData => ({ + tokenData.map(tokenData => ({ ...tokenData, alpha: 0, x: actorX, diff --git a/styles/less/hud/token-hud/token-hud.less b/styles/less/hud/token-hud/token-hud.less index 46003975..ea58f673 100644 --- a/styles/less/hud/token-hud/token-hud.less +++ b/styles/less/hud/token-hud/token-hud.less @@ -24,13 +24,13 @@ font-weight: bold; } } + } - .clown-car img { - transition: 0.5s; + .clown-car img { + transition: 0.5s; - &.flipped { - transform: scaleX(-1); - } + &.flipped { + transform: scaleX(-1); } } diff --git a/templates/hud/tokenHUD.hbs b/templates/hud/tokenHUD.hbs index f079e5d9..1ba29621 100644 --- a/templates/hud/tokenHUD.hbs +++ b/templates/hud/tokenHUD.hbs @@ -11,6 +11,11 @@ + {{#if hasCompanion}} + + {{/if}} {{#if canConfigure}} {{/if}}