import { FEATURE_CONTROL, TVA_CONFIG } from '../settings.js';
|
|
import { HTMLOverlay } from '../sprite/HTMLOverlay.js';
|
|
import { TVAOverlay } from '../sprite/TVAOverlay.js';
|
|
import { drawOverlays } from '../token/overlay.js';
|
|
import { registerHook, unregisterHook } from './hooks.js';
|
|
|
|
const feature_id = 'Overlays';
|
|
|
|
export function registerOverlayHooks() {
|
|
if (!FEATURE_CONTROL[feature_id]) {
|
|
[
|
|
'refreshToken',
|
|
'destroyToken',
|
|
'updateActor',
|
|
'renderCombatTracker',
|
|
'updateToken',
|
|
'createToken',
|
|
'hoverToken',
|
|
'renderHeadsUpDisplay',
|
|
].forEach((id) => unregisterHook(feature_id, id));
|
|
return;
|
|
} else if (!TVA_CONFIG.evaluateOverlayOnHover) {
|
|
unregisterHook(feature_id, 'hoverToken');
|
|
}
|
|
|
|
if (TVA_CONFIG.evaluateOverlayOnHover) {
|
|
registerHook(feature_id, 'hoverToken', function (token, hover) {
|
|
drawOverlays(token);
|
|
});
|
|
}
|
|
|
|
registerHook(feature_id, 'createToken', async function (token) {
|
|
if (token.object) drawOverlays(token.object);
|
|
});
|
|
|
|
registerHook(feature_id, 'updateToken', async function (token) {
|
|
if (token.object) drawOverlays(token.object);
|
|
});
|
|
|
|
registerHook(feature_id, 'refreshToken', (token) => {
|
|
if (token.tvaOverlays)
|
|
for (const child of token.tvaOverlays) {
|
|
if (child instanceof TVAOverlay) {
|
|
child.refresh(null, { preview: false, fullRefresh: false });
|
|
}
|
|
}
|
|
});
|
|
|
|
registerHook(feature_id, 'destroyToken', (token) => {
|
|
if (token.tvaOverlays)
|
|
for (const child of token.tvaOverlays) {
|
|
child.parent?.removeChild(child)?.destroy();
|
|
}
|
|
});
|
|
|
|
registerHook(feature_id, 'updateActor', async function (actor) {
|
|
if (actor.getActiveTokens)
|
|
actor.getActiveTokens(true).forEach((token) => {
|
|
drawOverlays(token);
|
|
});
|
|
});
|
|
|
|
registerHook(feature_id, 'renderCombatTracker', function () {
|
|
for (const tkn of canvas.tokens.placeables) {
|
|
drawOverlays(tkn);
|
|
}
|
|
});
|
|
|
|
registerHook(feature_id, 'renderHeadsUpDisplay', () => {
|
|
HTMLOverlay.hudRendered();
|
|
});
|
|
}
|
|
|
|
const REFRESH_HOOKS = {};
|
|
|
|
export function registerOverlayRefreshHook(tvaOverlay, hookName) {
|
|
if (!(hookName in REFRESH_HOOKS)) {
|
|
registerHook('TVAOverlayRefresh', hookName, () => {
|
|
REFRESH_HOOKS[hookName]?.forEach((s) => s.refresh());
|
|
});
|
|
REFRESH_HOOKS[hookName] = [tvaOverlay];
|
|
} else if (!REFRESH_HOOKS[hookName].find((s) => s == tvaOverlay)) {
|
|
REFRESH_HOOKS[hookName].push(tvaOverlay);
|
|
}
|
|
}
|
|
|
|
export function unregisterOverlayRefreshHooks(tvaOverlay, hookName = null) {
|
|
const unregister = function (hook) {
|
|
if (REFRESH_HOOKS[hook]) {
|
|
let index = REFRESH_HOOKS[hook].findIndex((s) => s == tvaOverlay);
|
|
if (index > -1) {
|
|
REFRESH_HOOKS[hook].splice(index, 1);
|
|
if (!REFRESH_HOOKS[hook].length) {
|
|
unregisterHook('TVAOverlayRefresh', hook);
|
|
delete REFRESH_HOOKS[hook];
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
if (hookName) unregister(hookName);
|
|
else {
|
|
Object.keys(REFRESH_HOOKS).forEach((k) => unregister(k));
|
|
}
|
|
}
|