Add socket event handling foundations and an updateSands event in anticipation of hasty rolls
This commit is contained in:
parent
7c0fb75e0f
commit
c0a9731b02
5 changed files with 73 additions and 1 deletions
|
|
@ -193,7 +193,11 @@
|
|||
"error": {
|
||||
"cannot-equip": "Cannot equip the {itemType}, see console for more details.",
|
||||
"invalid-delta": "The delta for \"{name}\" is not a number, cannot finish processing the action.",
|
||||
"at-favourite-limit": "Cannot favourite more than three items, unfavourite one to make space."
|
||||
"at-favourite-limit": "Cannot favourite more than three items, unfavourite one to make space.",
|
||||
"invalid-socket": "Invalid socket data received, this means a module or system bug is present.",
|
||||
"unknown-socket-event": "An unknown socket event was received: {event}",
|
||||
"no-active-gm": "No active @USER.GM is logged in, you must wait for a @USER.GM to be active before you can do that.",
|
||||
"malformed-socket-payload": "Socket event \"{event}\" received with malformed payload. Details: {details}"
|
||||
},
|
||||
"warn": {
|
||||
"cannot-go-negative": "\"{name}\" is unable to be a negative number."
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ import { Logger } from "../utils/Logger.mjs";
|
|||
import { registerCustomComponents } from "../Apps/components/_index.mjs";
|
||||
import { registerDevSettings } from "../settings/devSettings.mjs";
|
||||
import { registerMetaSettings } from "../settings/metaSettings.mjs";
|
||||
import { registerSockets } from "../sockets/_index.mjs";
|
||||
import { registerUserSettings } from "../settings/userSettings.mjs";
|
||||
import { registerWorldSettings } from "../settings/worldSettings.mjs";
|
||||
|
||||
|
|
@ -127,6 +128,7 @@ Hooks.once(`init`, () => {
|
|||
CONFIG.Actor.trackableAttributes.hero = HeroData.trackableAttributes;
|
||||
// #endregion
|
||||
|
||||
registerSockets();
|
||||
registerCustomComponents();
|
||||
Handlebars.registerHelper(helpers);
|
||||
});
|
||||
|
|
|
|||
27
module/sockets/_index.mjs
Normal file
27
module/sockets/_index.mjs
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
import { localizer } from "../utils/Localizer.mjs";
|
||||
import { Logger } from "../utils/Logger.mjs";
|
||||
import { updateSands } from "./updateSands.mjs";
|
||||
|
||||
const events = {
|
||||
updateSands,
|
||||
};
|
||||
|
||||
export function registerSockets() {
|
||||
Logger.info(`Setting up socket listener`);
|
||||
|
||||
game.socket.on(`system.${game.system.id}`, (data, userID) => {
|
||||
const { event, payload } = data ?? {};
|
||||
if (event == null || payload === undefined) {
|
||||
ui.notifications.error(localizer(`RipCrypt.notifs.error.invalid-socket`));
|
||||
return;
|
||||
};
|
||||
|
||||
if (events[event] == null) {
|
||||
ui.notifications.error(localizer(`RipCrypt.notifs.error.unknown-socket-event`, { event }));
|
||||
return;
|
||||
};
|
||||
|
||||
const user = game.users.get(userID);
|
||||
events[event](payload, user);
|
||||
});
|
||||
};
|
||||
36
module/sockets/updateSands.mjs
Normal file
36
module/sockets/updateSands.mjs
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import { clamp } from "../utils/clamp.mjs";
|
||||
import { localizer } from "../utils/Localizer.mjs";
|
||||
|
||||
export function updateSands(payload) {
|
||||
if (!game.user.isActiveGM) { return };
|
||||
|
||||
// Assert payload validity
|
||||
const { value, delta } = payload;
|
||||
if (value == null && delta == null) {
|
||||
ui.notifications.error(localizer(
|
||||
`RipCrypt.notifs.error.malformed-socket-payload`,
|
||||
{
|
||||
event: `updateSands`,
|
||||
details: `Either value or delta must be provided`,
|
||||
},
|
||||
));
|
||||
return;
|
||||
};
|
||||
|
||||
// Take action
|
||||
if (value != null) {
|
||||
const initial = game.settings.get(game.system.id, `sandsOfFateInitial`);
|
||||
let sands = clamp(0, value, initial);
|
||||
if (sands === 0) {
|
||||
ui.delveDice.alertCrypticEvent();
|
||||
sands = initial;
|
||||
};
|
||||
game.settings.set(
|
||||
game.system.id,
|
||||
`sandsOfFate`,
|
||||
sands,
|
||||
);
|
||||
} else if (delta != null) {
|
||||
ui.delveDice.sandsOfFateDelta(delta);
|
||||
};
|
||||
};
|
||||
3
module/utils/clamp.mjs
Normal file
3
module/utils/clamp.mjs
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
export function clamp(min, ideal, max) {
|
||||
return Math.max(min, Math.min(ideal, max));
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue