diff --git a/lang/en.json b/lang/en.json index cb020a93..d341b4bf 100755 --- a/lang/en.json +++ b/lang/en.json @@ -2555,7 +2555,8 @@ "MACROS": { "Spotlight": { "errors": { - "noTokenSelected": "A token on the canvas must either be selected or hovered to spotlight it" + "noActiveCombat": "There is no active encounter", + "noCombatantSelected": "A combatant token must be either selected or hovered to spotlight it" } } }, diff --git a/module/applications/ui/combatTracker.mjs b/module/applications/ui/combatTracker.mjs index 1043e128..345c6fcd 100644 --- a/module/applications/ui/combatTracker.mjs +++ b/module/applications/ui/combatTracker.mjs @@ -1,6 +1,5 @@ import { AdversaryBPPerEncounter } from '../../config/encounterConfig.mjs'; import { expireActiveEffects } from '../../helpers/utils.mjs'; -import { clearPreviousSpotlight } from '../../macros/spotlightCombatant.mjs'; export default class DhCombatTracker extends foundry.applications.sidebar.tabs.CombatTracker { static DEFAULT_OPTIONS = { @@ -151,13 +150,13 @@ export default class DhCombatTracker extends foundry.applications.sidebar.tabs.C } async setCombatantSpotlight(combatantId) { - const combatant = this.viewed.combatants.get(combatantId); const update = { system: { 'spotlight.requesting': false, 'spotlight.requestOrderIndex': 0 } }; + const combatant = this.viewed.combatants.get(combatantId); const toggleTurn = this.viewed.combatants.contents .sort(this.viewed._sortCombatants) @@ -188,14 +187,6 @@ export default class DhCombatTracker extends foundry.applications.sidebar.tabs.C round: this.viewed.round + 1 }); await combatant.update(update); - if (combatant.token) clearPreviousSpotlight(); - } - - async clearTurn() { - await this.viewed.update({ - turn: null, - round: this.viewed.round + 1 - }); } static async requestSpotlight(_, target) { diff --git a/module/canvas/placeables/token.mjs b/module/canvas/placeables/token.mjs index 77c178d6..35d34f83 100644 --- a/module/canvas/placeables/token.mjs +++ b/module/canvas/placeables/token.mjs @@ -10,36 +10,6 @@ export default class DhTokenPlaceable extends foundry.canvas.placeables.Token { this.previewHelp ||= this.addChild(this.#drawPreviewHelp()); } - /**@inheritdoc */ - _refreshTurnMarker() { - // Should a Turn Marker be active? - const { turnMarker } = this.document; - const markersEnabled = - CONFIG.Combat.settings.turnMarker.enabled && turnMarker.mode !== CONST.TOKEN_TURN_MARKER_MODES.DISABLED; - const spotlighted = game.settings - .get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker) - .spotlightedTokens.has(this.document.uuid); - - const turnIsSet = typeof game.combat?.turn === 'number'; - const isTurn = game.combat?.combatant?.tokenId === this.id; - const markerActive = markersEnabled && turnIsSet ? isTurn : spotlighted; - - // Activate a Turn Marker - if (markerActive) { - if (!this.turnMarker) - this.turnMarker = this.addChildAt(new foundry.canvas.placeables.tokens.TokenTurnMarker(this), 0); - canvas.tokens.turnMarkers.add(this); - this.turnMarker.draw(); - } - - // Remove a Turn Marker - else if (this.turnMarker) { - canvas.tokens.turnMarkers.delete(this); - this.turnMarker.destroy(); - this.turnMarker = null; - } - } - /** @inheritDoc */ async _drawEffects() { this.effects.renderable = false; diff --git a/module/config/settingsConfig.mjs b/module/config/settingsConfig.mjs index de4d96be..36892731 100644 --- a/module/config/settingsConfig.mjs +++ b/module/config/settingsConfig.mjs @@ -39,8 +39,7 @@ export const gameSettings = { Countdowns: 'Countdowns', LastMigrationVersion: 'LastMigrationVersion', SpotlightRequestQueue: 'SpotlightRequestQueue', - CompendiumBrowserSettings: 'CompendiumBrowserSettings', - SpotlightTracker: 'SpotlightTracker' + CompendiumBrowserSettings: 'CompendiumBrowserSettings' }; export const actionAutomationChoices = { diff --git a/module/data/_module.mjs b/module/data/_module.mjs index 0e7e295e..43ff7807 100644 --- a/module/data/_module.mjs +++ b/module/data/_module.mjs @@ -4,7 +4,6 @@ export { default as DhRollTable } from './rollTable.mjs'; export { default as RegisteredTriggers } from './registeredTriggers.mjs'; export { default as CompendiumBrowserSettings } from './compendiumBrowserSettings.mjs'; export { default as TagTeamData } from './tagTeamData.mjs'; -export { default as SpotlightTracker } from './spotlightTracker.mjs'; export * as countdowns from './countdowns.mjs'; export * as actions from './action/_module.mjs'; diff --git a/module/data/spotlightTracker.mjs b/module/data/spotlightTracker.mjs deleted file mode 100644 index 57f54e16..00000000 --- a/module/data/spotlightTracker.mjs +++ /dev/null @@ -1,9 +0,0 @@ -export default class SpotlightTracker extends foundry.abstract.DataModel { - static defineSchema() { - const fields = foundry.data.fields; - - return { - spotlightedTokens: new fields.SetField(new fields.DocumentUUIDField()) - }; - } -} diff --git a/module/macros/spotlightCombatant.mjs b/module/macros/spotlightCombatant.mjs index dc8339ac..68a26ff9 100644 --- a/module/macros/spotlightCombatant.mjs +++ b/module/macros/spotlightCombatant.mjs @@ -1,50 +1,21 @@ /** - * Spotlight a token on the canvas. If it is a combatant, run it through combatTracker's spotlight logic. - * @param {TokenDocument} token - The token to spotlight - * @returns {void} + * 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 spotlightCombatantMacro = async token => { - if (!token) - return ui.notifications.error(game.i18n.localize('DAGGERHEART.MACROS.Spotlight.errors.noTokenSelected')); +const spotlightCombatant = () => { + if (!game.combat) + return ui.notifications.error(game.i18n.localize('DAGGERHEART.MACROS.Spotlight.errors.noActiveCombat')); - const combatantCombat = token.combatant - ? game.combat - : game.combats.find(combat => 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 { - ui.combat.setCombatantSpotlight(combatant.id); - } - } else { - if (game.combat) await ui.combat.clearTurn(); + const selectedCombatant = canvas.tokens.controlled.length > 0 ? canvas.tokens.controlled[0].combatant : null; + const hoveredCombatant = game.canvas.tokens.hover?.combatant; - 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(); + const combatant = selectedCombatant ?? hoveredCombatant; + if (!combatant) + return ui.notifications.error(game.i18n.localize('DAGGERHEART.MACROS.Spotlight.errors.noCombatantSelected')); - 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 }); - } + ui.combat.setCombatantSpotlight(combatant.id); }; -export const clearPreviousSpotlight = async () => { - const spotlightTracker = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker); - const previouslySpotlightedUuid = - spotlightTracker.spotlightedTokens.size > 0 ? spotlightTracker.spotlightedTokens.first() : null; - if (!previouslySpotlightedUuid) return; - - spotlightTracker.updateSource({ spotlightedTokens: [] }); - await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker, spotlightTracker); - - const previousToken = await foundry.utils.fromUuid(previouslySpotlightedUuid); - previousToken.object.renderFlags.set({ refreshTurnMarker: true }); -}; - -export default spotlightCombatantMacro; +export default spotlightCombatant; diff --git a/module/systemRegistration/settings.mjs b/module/systemRegistration/settings.mjs index 63611cda..5eb9dad1 100644 --- a/module/systemRegistration/settings.mjs +++ b/module/systemRegistration/settings.mjs @@ -16,7 +16,6 @@ import { DhVariantRuleSettings } from '../applications/settings/_module.mjs'; import { CompendiumBrowserSettings } from '../data/_module.mjs'; -import SpotlightTracker from '../data/spotlightTracker.mjs'; export const registerDHSettings = () => { registerKeyBindings(); @@ -41,12 +40,7 @@ export const registerKeyBindings = () => { hint: game.i18n.localize('DAGGERHEART.SETTINGS.Keybindings.spotlight.hint'), uneditable: [], editable: [], - onDown: () => { - const selectedTokens = canvas.tokens.controlled.length > 0 ? canvas.tokens.controlled[0] : null; - const hoveredTokens = game.canvas.tokens.hover ? game.canvas.tokens.hover : null; - const tokens = selectedTokens ?? hoveredTokens; - game.system.api.macros.spotlightCombatant(tokens); - }, + onDown: game.system.api.macros.spotlightCombatant, onUp: () => {}, restricted: true, reservedModifiers: [], @@ -183,10 +177,4 @@ const registerNonConfigSettings = () => { config: false, type: CompendiumBrowserSettings }); - - game.settings.register(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.SpotlightTracker, { - scope: 'world', - config: false, - type: SpotlightTracker - }); };