Borders: Move main call in init hook
The main function is called at script invocation, which is nice and early but everything we do is done in hooks. This makes it not really useful, and harder to properly disable the module with the settings. So, register our `init` hook at script invocation and call the main function from within. This makes handling the disabling via the setting trivial, and ensures that *everything* is properly disabled. However, the `socketlib.ready` hook fires earlier than the `init` one, so register the socket at invocation as well, but only register the remote methods in the main function.
This commit is contained in:
parent
95bb1c3445
commit
9bc73100f3
1 changed files with 52 additions and 54 deletions
|
@ -213,58 +213,11 @@ function combat_hook_update_token_borders(combat, data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function combat_border_main() {
|
function combat_border_main() {
|
||||||
Hooks.once("init", () => {
|
socket.register(SocketMessages.CombatUpdateBorder, token_combat_visibility_remote_update);
|
||||||
game.settings.register(MillsFabula.id, BorderSettings.BorderEnabled, {
|
socket.register(SocketMessages.SetBorder, token_remote_set_border_visibility);
|
||||||
name: game.i18n.localize('MF.Border.Settings.BorderEnabled.Name'),
|
|
||||||
hint: game.i18n.localize('MF.Border.Settings.BorderEnabled.Hint'),
|
|
||||||
type: Boolean,
|
|
||||||
config: true,
|
|
||||||
scope: 'world',
|
|
||||||
requiresReload: true,
|
|
||||||
default: true
|
|
||||||
});
|
|
||||||
|
|
||||||
// Only show the settings if the borders are enabled.
|
|
||||||
let borders_enabled = game.settings.get(MillsFabula.id, BorderSettings.BorderEnabled);
|
|
||||||
game.settings.register(MillsFabula.id, BorderSettings.BaseBorderPath, {
|
|
||||||
name: game.i18n.localize('MF.Border.Settings.BaseBorder.Name'),
|
|
||||||
hint: game.i18n.localize('MF.Border.Settings.BaseBorder.Hint'),
|
|
||||||
type: String,
|
|
||||||
config: borders_enabled,
|
|
||||||
scope: 'world',
|
|
||||||
requiresReload: true,
|
|
||||||
filePicker: 'image',
|
|
||||||
default: 'modules/the-mills-fabula/assets/default-borders/base.webp'
|
|
||||||
});
|
|
||||||
|
|
||||||
game.settings.register(MillsFabula.id, BorderSettings.PlayedBorderPath, {
|
|
||||||
name: game.i18n.localize('MF.Border.Settings.PlayedBorder.Name'),
|
|
||||||
hint: game.i18n.localize('MF.Border.Settings.PlayedBorder.Hint'),
|
|
||||||
type: String,
|
|
||||||
config: borders_enabled,
|
|
||||||
scope: 'world',
|
|
||||||
requiresReload: true,
|
|
||||||
filePicker: 'image',
|
|
||||||
default: 'modules/the-mills-fabula/assets/default-borders/played.webp'
|
|
||||||
})
|
|
||||||
|
|
||||||
// Create the border textures based on the image chose in the settings.
|
|
||||||
base_border = PIXI.BaseTexture.from(game.settings.get(MillsFabula.id, BorderSettings.BaseBorderPath));
|
|
||||||
played_border = PIXI.BaseTexture.from(game.settings.get(MillsFabula.id, BorderSettings.PlayedBorderPath));
|
|
||||||
});
|
|
||||||
|
|
||||||
Hooks.once("socketlib.ready", () => {
|
|
||||||
socket = socketlib.registerModule(MillsFabula.id);
|
|
||||||
socket.register(SocketMessages.CombatUpdateBorder, token_combat_visibility_remote_update);
|
|
||||||
socket.register(SocketMessages.SetBorder, token_remote_set_border_visibility);
|
|
||||||
})
|
|
||||||
|
|
||||||
// Create the borders from defined textures and add them to the tokens when they are first created on canvas.
|
// Create the borders from defined textures and add them to the tokens when they are first created on canvas.
|
||||||
Hooks.on("drawToken", (drawn_token) => {
|
Hooks.on("drawToken", (drawn_token) => {
|
||||||
// FIXME: Handle deactivation properly
|
|
||||||
if (!game.settings.get(MillsFabula.id, BorderSettings.BorderEnabled)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Only apply the borders to player tokens
|
// Only apply the borders to player tokens
|
||||||
if (drawn_token.actor?.type !== "character")
|
if (drawn_token.actor?.type !== "character")
|
||||||
return;
|
return;
|
||||||
|
@ -277,10 +230,6 @@ function combat_border_main() {
|
||||||
|
|
||||||
|
|
||||||
Hooks.on("ready", () => {
|
Hooks.on("ready", () => {
|
||||||
// FIXME: Handle deactivation properly
|
|
||||||
if (!game.settings.get(MillsFabula.id, BorderSettings.BorderEnabled)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Players cannot run the combat hooks used here, which trigger for the GM no matter what.
|
// Players cannot run the combat hooks used here, which trigger for the GM no matter what.
|
||||||
// So register them for the GM only, who will execute the updates for players via SocketLib.
|
// So register them for the GM only, who will execute the updates for players via SocketLib.
|
||||||
if (!game.user?.isGM) {
|
if (!game.user?.isGM) {
|
||||||
|
@ -303,4 +252,53 @@ function combat_border_main() {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
combat_border_main()
|
// We need to setup socketlib early, doing it in the `init` hook is too late.
|
||||||
|
Hooks.once("socketlib.ready", () => {
|
||||||
|
socket = socketlib.registerModule(MillsFabula.id);
|
||||||
|
})
|
||||||
|
|
||||||
|
Hooks.once("init", () => {
|
||||||
|
game.settings.register(MillsFabula.id, BorderSettings.BorderEnabled, {
|
||||||
|
name: game.i18n.localize('MF.Border.Settings.BorderEnabled.Name'),
|
||||||
|
hint: game.i18n.localize('MF.Border.Settings.BorderEnabled.Hint'),
|
||||||
|
type: Boolean,
|
||||||
|
config: true,
|
||||||
|
scope: 'world',
|
||||||
|
requiresReload: true,
|
||||||
|
default: true
|
||||||
|
});
|
||||||
|
|
||||||
|
// Only show the settings if the borders are enabled.
|
||||||
|
let borders_enabled = game.settings.get(MillsFabula.id, BorderSettings.BorderEnabled);
|
||||||
|
game.settings.register(MillsFabula.id, BorderSettings.BaseBorderPath, {
|
||||||
|
name: game.i18n.localize('MF.Border.Settings.BaseBorder.Name'),
|
||||||
|
hint: game.i18n.localize('MF.Border.Settings.BaseBorder.Hint'),
|
||||||
|
type: String,
|
||||||
|
config: borders_enabled,
|
||||||
|
scope: 'world',
|
||||||
|
requiresReload: true,
|
||||||
|
filePicker: 'image',
|
||||||
|
default: 'modules/the-mills-fabula/assets/default-borders/base.webp'
|
||||||
|
});
|
||||||
|
|
||||||
|
game.settings.register(MillsFabula.id, BorderSettings.PlayedBorderPath, {
|
||||||
|
name: game.i18n.localize('MF.Border.Settings.PlayedBorder.Name'),
|
||||||
|
hint: game.i18n.localize('MF.Border.Settings.PlayedBorder.Hint'),
|
||||||
|
type: String,
|
||||||
|
config: borders_enabled,
|
||||||
|
scope: 'world',
|
||||||
|
requiresReload: true,
|
||||||
|
filePicker: 'image',
|
||||||
|
default: 'modules/the-mills-fabula/assets/default-borders/played.webp'
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!game.settings.get(MillsFabula.id, BorderSettings.BorderEnabled)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the border textures based on the image chose in the settings.
|
||||||
|
base_border = PIXI.BaseTexture.from(game.settings.get(MillsFabula.id, BorderSettings.BaseBorderPath));
|
||||||
|
played_border = PIXI.BaseTexture.from(game.settings.get(MillsFabula.id, BorderSettings.PlayedBorderPath));
|
||||||
|
|
||||||
|
combat_border_main()
|
||||||
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue