Logic improvements

This commit is contained in:
WBHarry 2026-03-28 02:37:58 +01:00
parent 1fe1ec3dcb
commit befe55b900
3 changed files with 32 additions and 28 deletions

View file

@ -1,6 +1,6 @@
import { AdversaryBPPerEncounter } from '../../config/encounterConfig.mjs'; import { AdversaryBPPerEncounter } from '../../config/encounterConfig.mjs';
import { expireActiveEffects } from '../../helpers/utils.mjs'; import { expireActiveEffects } from '../../helpers/utils.mjs';
import { spotlightToken } from '../../macros/spotlightCombatant.mjs'; import { clearPreviousSpotlight } from '../../macros/spotlightCombatant.mjs';
export default class DhCombatTracker extends foundry.applications.sidebar.tabs.CombatTracker { export default class DhCombatTracker extends foundry.applications.sidebar.tabs.CombatTracker {
static DEFAULT_OPTIONS = { static DEFAULT_OPTIONS = {
@ -190,7 +190,7 @@ export default class DhCombatTracker extends foundry.applications.sidebar.tabs.C
await combatant.update(update); await combatant.update(update);
if (!combatant.token) return; if (!combatant.token) return;
spotlightToken(combatant.token); clearPreviousSpotlight();
} }
async clearTurn() { async clearTurn() {

View file

@ -20,7 +20,9 @@ export default class DhTokenPlaceable extends foundry.canvas.placeables.Token {
.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker) .get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker)
.spotlightedTokens.has(this.document.uuid); .spotlightedTokens.has(this.document.uuid);
const markerActive = markersEnabled && spotlighted; const turnIsSet = game.combat?.turn !== null;
const isTurn = game.combat?.combatant?.tokenId === this.id;
const markerActive = markersEnabled && turnIsSet ? isTurn : spotlighted;
// Activate a Turn Marker // Activate a Turn Marker
if (markerActive) { if (markerActive) {

View file

@ -3,42 +3,44 @@
* @param {TokenDocument} token - The token to spotlight * @param {TokenDocument} token - The token to spotlight
* @returns {void} * @returns {void}
*/ */
const spotlightCombatantMacro = token => { const spotlightCombatantMacro = async token => {
if (!token) if (!token)
return ui.notifications.error(game.i18n.localize('DAGGERHEART.MACROS.Spotlight.errors.noTokenSelected')); return ui.notifications.error(game.i18n.localize('DAGGERHEART.MACROS.Spotlight.errors.noTokenSelected'));
if (game.combat && token.combatant) { const combatantCombat = game.combats.find(combat =>
ui.combat.setCombatantSpotlight(token.combatant.id); combat.combatants.some(x => x.token && x.token.id === token.document.id)
);
if (combatantCombat) {
const combatant = combatantCombat.combatants.find(x => x.token.id === token.document.id);
if (!combatantCombat.active) await combatantCombat.activate();
if (combatantCombat.combatant?.id !== combatant.id) ui.combat.setCombatantSpotlight(combatant.id);
} else { } else {
if (game.combat) ui.combat.clearTurn(); if (game.combat) await ui.combat.clearTurn();
spotlightToken(token.document);
const spotlightTracker = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker);
const isSpotlighted = spotlightTracker.spotlightedTokens.has(token.document.uuid);
if (!isSpotlighted) await clearPreviousSpotlight();
spotlightTracker.updateSource({
spotlightedTokens: isSpotlighted ? [] : [token.document.uuid]
});
await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker, spotlightTracker);
token.renderFlags.set({ refreshTurnMarker: true });
} }
}; };
/** export const clearPreviousSpotlight = async () => {
* Spotlight a token on the canvas.
* @param {TokenDocument} token - The token to spotlight
* @returns {void}
*/
export const spotlightToken = async token => {
const spotlightTracker = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker); const spotlightTracker = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker);
let previouslySpotlightedUuid = null; const previouslySpotlightedUuid =
const isSpotlighted = spotlightTracker.spotlightedTokens.has(token.uuid); spotlightTracker.spotlightedTokens.size > 0 ? spotlightTracker.spotlightedTokens.first() : null;
if (!isSpotlighted && spotlightTracker.spotlightedTokens.size > 0) { if (!previouslySpotlightedUuid) return;
previouslySpotlightedUuid = spotlightTracker.spotlightedTokens.first();
}
spotlightTracker.updateSource({
spotlightedTokens: isSpotlighted ? [] : [token.uuid]
});
spotlightTracker.updateSource({ spotlightedTokens: [] });
await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker, spotlightTracker); await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker, spotlightTracker);
token.object.renderFlags.set({ refreshTurnMarker: true });
if (previouslySpotlightedUuid) { const previousToken = await foundry.utils.fromUuid(previouslySpotlightedUuid);
const previousToken = await foundry.utils.fromUuid(previouslySpotlightedUuid); previousToken.object.renderFlags.set({ refreshTurnMarker: true });
previousToken.object.renderFlags.set({ refreshTurnMarker: true });
}
}; };
export default spotlightCombatantMacro; export default spotlightCombatantMacro;