daggerheart/module/macros/spotlightCombatant.mjs
2026-03-27 23:39:12 +01:00

37 lines
1.6 KiB
JavaScript

/**
* Spotlights a combatant.
* The combatant can be selected in a number of ways. If many are applied at the same time, the following order is used:
* 1) SelectedCombatant
* 2) HoveredCombatant
*/
const spotlightCombatant = () => {
const selectedTokens = canvas.tokens.controlled.length > 0 ? canvas.tokens.controlled : [];
const hoveredTokens = game.canvas.tokens.hover ? [game.canvas.tokens.hover] : [];
const tokens = selectedTokens.length ? selectedTokens : hoveredTokens;
if (!tokens.length)
return ui.notifications.error(game.i18n.localize('DAGGERHEART.MACROS.Spotlight.errors.noCombatantSelected'));
const spotlightTracker = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker);
spotlightTracker.updateSource();
for (const token of tokens) {
if (game.combat && token.combatant) {
ui.combat.setCombatantSpotlight(token.combatant.id);
} else {
const isSpotlighted = spotlightTracker.spotlightedTokens.has(token.document.uuid);
spotlightTracker.updateSource({
spotlightedTokens: isSpotlighted
? [...spotlightTracker.spotlightedTokens].filter(x => x !== token.document.uuid)
: [...spotlightTracker.spotlightedTokens, token.document.uuid]
});
}
}
game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker, spotlightTracker);
for (const token of tokens) {
token.renderFlags.set({ refreshTurnMarker: true });
}
};
export default spotlightCombatant;