From 3ebee9d1c7547ffbb092cbbd31f60545ce23cfd9 Mon Sep 17 00:00:00 2001 From: Johannes Loher Date: Sun, 9 Jan 2022 06:26:43 +0100 Subject: [PATCH] feat: make make handling of weather and filter effects more robust against unknown types --- src/module/filterEffects/FilterManager.js | 15 ++++++++++++--- src/module/weatherEffects/WeatherLayer.js | 5 +++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/module/filterEffects/FilterManager.js b/src/module/filterEffects/FilterManager.js index e3ee6ab7..1f6d2528 100644 --- a/src/module/filterEffects/FilterManager.js +++ b/src/module/filterEffects/FilterManager.js @@ -38,7 +38,15 @@ class FilterManager { if (!canvas.scene) { return; } - this.filterInfos = canvas.scene.getFlag("fxmaster", "filters") ?? {}; + this.filterInfos = Object.fromEntries( + Object.entries(canvas.scene.getFlag("fxmaster", "filters") ?? {}).filter(([id, filterInfo]) => { + if (!(filterInfo.type in CONFIG.fxmaster.filters)) { + logger.warn(`Filter effect '${id}' is of unknown type '${filterInfo.type}', skipping it.`); + return false; + } + return true; + }), + ); this.filteredLayers = canvas.scene.getFlag("fxmaster", "filteredLayers") ?? this.filteredLayers; const filtersToCreate = Object.keys(this.filterInfos).filter((key) => !(key in this.filters)); @@ -140,8 +148,9 @@ class FilterManager { return; } const filter = this.filters[name]; - if (filter === undefined) return; - await filter.stop(); + if (filter) { + await filter.stop(); + } const rmFilter = { [`-=${name}`]: null, }; diff --git a/src/module/weatherEffects/WeatherLayer.js b/src/module/weatherEffects/WeatherLayer.js index 0fe0dda0..c4494fa8 100644 --- a/src/module/weatherEffects/WeatherLayer.js +++ b/src/module/weatherEffects/WeatherLayer.js @@ -1,3 +1,4 @@ +import { logger } from "../logger.js"; import { executeWhenWorldIsMigratedToLatest, isOnTargetMigration } from "../migration.js"; import { intersectRectangles } from "../pixi-helpers.js"; @@ -207,6 +208,10 @@ export class WeatherLayer extends CanvasLayer { // Updating scene weather const flags = canvas.scene.getFlag("fxmaster", "effects") ?? {}; for (const id in flags) { + if (!(flags[id].type in CONFIG.fxmaster.weather)) { + logger.warn(`Weather effect '${id}' is of unknown type '${flags[id].type}', skipping it.`); + continue; + } const options = Object.fromEntries( Object.entries(flags[id].options).map(([optionName, value]) => [optionName, { value }]), );