darkness-dependent-vision/src/module/hooks.js

58 lines
1.9 KiB
JavaScript
Raw Normal View History

2021-06-29 20:09:34 +02:00
// SPDX-FileCopyrightText: 2021 Johannes Loher
//
// SPDX-License-Identifier: MIT
'use strict';
import { packageName } from './config';
import logger from './logger';
import { getBrightRadius, getDimRadius, updateSource } from './wrappers/token';
import { getHeaderButtons } from './wrappers/token-config';
import { libWrapper } from './shims/libWrapperShim';
export default function registerForHooks() {
Hooks.once('init', onInit);
Hooks.on('updateScene', onUpdateScene);
Hooks.on('updateToken', onUpdateToken);
}
function onInit() {
logger.info(`Initializing ${packageName}`);
const dimRadiusTarget = 'CONFIG.Token.objectClass.prototype.dimRadius';
try {
libWrapper.register(packageName, dimRadiusTarget, getDimRadius, 'OVERRIDE');
} catch (e) {
logger.warn(`Failed to override ${dimRadiusTarget}, some things might not work correctly:`, e);
}
const brightRadiusTarget = 'CONFIG.Token.objectClass.prototype.dimRadius';
try {
libWrapper.register(packageName, brightRadiusTarget, getBrightRadius, 'OVERRIDE');
} catch (e) {
logger.warn(`Failed to override ${brightRadiusTarget}, some things might not work correctly:`, e);
}
libWrapper.register(packageName, 'CONFIG.Token.objectClass.prototype.updateSource', updateSource, 'WRAPPER');
libWrapper.register(packageName, 'CONFIG.Token.sheetClass.prototype._getHeaderButtons', getHeaderButtons, 'WRAPPER');
}
function onUpdateScene(scene, change) {
if (change.darkness != null) {
scene.getEmbeddedCollection('Token').forEach((tokenDocument) => tokenDocument.object.updateSource());
}
}
function onUpdateToken(token, change) {
const shouldUpdateSource = [
'dimVisionDarknessMin',
'dimVisionDarknessMax',
'brightVisionDarknessMin',
'brightVisionDarknessMax',
].some((flagKey) => `flags.darkness-dependent-vision.${flagKey}` in foundry.utils.flattenObject(change));
if (shouldUpdateSource) {
token.object.updateSource();
}
}