// SPDX-FileCopyrightText: 2021 Johannes Loher // // SPDX-License-Identifier: MIT export const registerCombatTrackerFunctionality = () => { CONFIG.ui.combat = CombatTrackerMixin(CONFIG.ui.combat); }; /** * Enhance a combat tracker class with functionality for Tickwerk. * @param {typeof CombatTracker} BaseCombatTracker The combat tracker class to enhance * @returns The enhanced combat tracker class */ const CombatTrackerMixin = (BaseCombatTracker) => { return class TickwerkCombatTracker extends BaseCombatTracker { /** @override */ static get defaultOptions() { return foundry.utils.mergeObject(super.defaultOptions, { template: 'modules/tickwerk/templates/combat-tracker.hbs', }); } /** @override */ async getData(options) { const data = await super.getData(options); return { ...data, turns: data.turns.map((turn) => ({ ...turn, waiting: this.viewed?.combatants.get(turn.id)?.waiting })), }; } /** @override */ activateListeners(html) { super.activateListeners(html); html.find('.combatant-control[data-control="toggleWaiting"]').on('click', this._onToggleWaiting.bind(this)); } /** * Handle clicks on the Combatant waiting control button. * @param {JQuery.ClickEvent} event The originating click event */ _onToggleWaiting(event) { event.preventDefault(); event.stopPropagation(); const button = event.currentTarget; const li = button.closest('.combatant'); const combat = this.viewed; const combatant = combat?.combatants.get(li.dataset.combatantId); combatant?.toggleWaiting(); } }; };