|
|
- 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));
- }
- }
|