diff --git a/.eslintrc.js b/.eslintrc.js index 8d1675ad..fb7c1b3d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -23,6 +23,10 @@ module.exports = { SpriteMesh: "readonly", }, + rules: { + "no-unused-vars": ["error", { vars: "all", args: "after-used", varsIgnorePattern: "^_" }], + }, + overrides: [ { files: ["./*.js", "./tools/**/*"], diff --git a/src/hooks.js b/src/hooks.js index b421bc70..62de64d7 100644 --- a/src/hooks.js +++ b/src/hooks.js @@ -1,6 +1,6 @@ import { packageId } from "./constants.js"; import { format } from "./logger.js"; -import { resetFlag } from "./utils.js"; +import { omit, resetFlag } from "./utils.js"; export const registerHooks = function () { Hooks.on(`${packageId}.switchParticleEffect`, onSwitchParticleEffects); @@ -16,17 +16,13 @@ async function onSwitchParticleEffects(parameters) { if (!canvas.scene) { return; } - const newEffect = { [parameters.name]: { type: parameters.type, options: parameters.options } }; - let flags = (await canvas.scene.getFlag(packageId, "effects")) ?? {}; - let effects = {}; + const currentEffects = canvas.scene.getFlag(packageId, "effects") ?? {}; + const shouldSwitchOff = parameters.name in currentEffects; + const effects = shouldSwitchOff + ? omit(currentEffects, parameters.name) + : { ...currentEffects, [parameters.name]: { type: parameters.type, options: parameters.options } }; - if (foundry.utils.hasProperty(flags, parameters.name)) { - effects = flags; - delete effects[parameters.name]; - } else { - effects = foundry.utils.mergeObject(flags, newEffect); - } if (Object.keys(effects).length == 0) { await canvas.scene.unsetFlag(packageId, "effects"); } else { diff --git a/src/utils.js b/src/utils.js index 3ca41666..2cf797b2 100644 --- a/src/utils.js +++ b/src/utils.js @@ -28,3 +28,14 @@ export function resetFlag(document, key, value) { export function roundToDecimals(number, decimals) { return Number(Math.round(number + "e" + decimals) + "e-" + decimals); } + +/** + * Omit a specific key from an object. + * @param {object} object The object from which to omit + * @param {string|number|symbol} key The key to omit + * @returns {object} The object without the given key. + */ +export function omit(object, key) { + const { [key]: _omitted, ...rest } = object; + return rest; +}