import { FEATURE_CONTROL, TVA_CONFIG } from '../settings.js'; import { registerHook, unregisterHook } from './hooks.js'; const feature_id = 'UserMappings'; export function registerUserMappingHooks() { if (!FEATURE_CONTROL[feature_id]) { ['updateToken', 'updateTile', 'sightRefresh'].forEach((id) => unregisterHook(feature_id, id)); return; } registerHook(feature_id, 'updateToken', _updateToken); registerHook(feature_id, 'updateTile', _updateTile); registerHook(feature_id, 'sightRefresh', _sightRefresh); } async function _updateToken(token, change) { // Update User Specific Image if (change.flags?.['token-variants']) { if ('userMappings' in change.flags['token-variants'] || '-=userMappings' in change.flags['token-variants']) { const t = canvas.tokens.get(token.id); if (t) { await t.draw(); canvas.effects.visibility.restrictVisibility(); } } } } async function _updateTile(tile, change) { // Update User Specific Image if (change.flags?.['token-variants']) { if ('userMappings' in change.flags['token-variants'] || '-=userMappings' in change.flags['token-variants']) { const t = canvas.tiles.get(tile.id); if (t) { await t.draw(); canvas.effects.visibility.restrictVisibility(); } } } } function _sightRefresh() { if (!game.user.isGM) { for (let t of canvas.tokens.placeables) { if (_isInvisible(t)) t.visible = false; } for (let t of canvas.tiles.placeables) { if (_isInvisible(t)) t.visible = false; } } } function _isInvisible(obj) { const img = (obj.document.getFlag('token-variants', 'userMappings') || {})?.[game.userId]; return img === TVA_CONFIG.invisibleImage; }