diff --git a/lang/en.json b/lang/en.json index e40b035c..38a498fe 100755 --- a/lang/en.json +++ b/lang/en.json @@ -1884,6 +1884,10 @@ } } }, + "SpotlightRequests": { + "singular": "Spotlight Request", + "plural": "Spotlight Requests" + }, "Tabs": { "details": "Details", "attack": "Attack", diff --git a/module/applications/ui/combatTracker.mjs b/module/applications/ui/combatTracker.mjs index 85c77cd3..101e20d6 100644 --- a/module/applications/ui/combatTracker.mjs +++ b/module/applications/ui/combatTracker.mjs @@ -36,10 +36,21 @@ export default class DhCombatTracker extends foundry.applications.sidebar.tabs.C const adversaries = context.turns?.filter(x => x.isNPC) ?? []; const characters = context.turns?.filter(x => !x.isNPC) ?? []; + const spotlightRequests = characters + ?.filter(x => !x.isNPC) + .filter(x => x.system.spotlight.requestOrderIndex > 0) + .sort((a, b) => { + const valueA = a.system.spotlight.requestOrderIndex; + const valueB = b.system.spotlight.requestOrderIndex; + + return valueA - valueB; + }); + Object.assign(context, { actionTokens: game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.variantRules).actionTokens, adversaries, - characters + characters: characters?.filter(x => !x.isNPC).filter(x => x.system.spotlight.requestOrderIndex == 0), + spotlightRequests }); } @@ -114,7 +125,8 @@ export default class DhCombatTracker extends foundry.applications.sidebar.tabs.C async setCombatantSpotlight(combatantId) { const update = { system: { - 'spotlight.requesting': false + 'spotlight.requesting': false, + 'spotlight.requestOrderIndex': 0 } }; const combatant = this.viewed.combatants.get(combatantId); @@ -142,11 +154,15 @@ export default class DhCombatTracker extends foundry.applications.sidebar.tabs.C } static async requestSpotlight(_, target) { + const characters = this.viewed.turns?.filter(x => !x.isNPC) ?? []; + const orderValues = characters.map(character => character.system.spotlight.requestOrderIndex); + const maxRequestIndex = Math.max(...orderValues); const { combatantId } = target.closest('[data-combatant-id]')?.dataset ?? {}; const combatant = this.viewed.combatants.get(combatantId); await combatant.update({ 'system.spotlight': { - requesting: !combatant.system.spotlight.requesting + requesting: !combatant.system.spotlight.requesting, + requestOrderIndex: !combatant.system.spotlight.requesting ? maxRequestIndex + 1 : 0 } }); diff --git a/module/data/combatant.mjs b/module/data/combatant.mjs index bb54c798..6deade9f 100644 --- a/module/data/combatant.mjs +++ b/module/data/combatant.mjs @@ -3,7 +3,8 @@ export default class DhCombatant extends foundry.abstract.TypeDataModel { const fields = foundry.data.fields; return { spotlight: new fields.SchemaField({ - requesting: new fields.BooleanField({ required: true, initial: false }) + requesting: new fields.BooleanField({ required: true, initial: false }), + requestOrderIndex: new fields.NumberField({ required: true, integer: true, initial: 0 }) }), actionTokens: new fields.NumberField({ required: true, integer: true, initial: 3 }) }; diff --git a/templates/ui/combatTracker/combatTracker.hbs b/templates/ui/combatTracker/combatTracker.hbs index 8ad4f7d5..91f7786b 100644 --- a/templates/ui/combatTracker/combatTracker.hbs +++ b/templates/ui/combatTracker/combatTracker.hbs @@ -1,4 +1,7 @@
+ {{#if (gt this.spotlightRequests.length 0)}} + {{> 'systems/daggerheart/templates/ui/combatTracker/combatTrackerSection.hbs' this title=(localize "DAGGERHEART.GENERAL.SpotlightRequests.plural") turns=this.spotlightRequests}} + {{/if}} {{#if (gt this.characters.length 0)}} {{> 'systems/daggerheart/templates/ui/combatTracker/combatTrackerSection.hbs' this title=(localize "DAGGERHEART.GENERAL.Character.plural") turns=this.characters}} {{/if}}