Skip to content

Commit

Permalink
Rework weather options (#110)
Browse files Browse the repository at this point in the history
feat: rework weather options
  * There are now sliders for every weather option (except tint).
  * The value of option sliders now updates in real time when the slider is moved.
  * `speed` is now a relative factor for the base speed of the effect
  * The base speed and scale of effects are now adjusted according to the grid size
  * `density` now represents the maximum number of particles per grid unit.
  * Existing scenes (also in compendiums) are migrated automatically for the new interpretations of the weather options.
  * The `updateWeather` and `switchWeather` hook events have been deprecated. They are still available and expect options in the old format. Going forward, the `fxmaster.updateWeather` and `fxmaster.switchWeather` hook events should be used instead. They expect the new option format.
  • Loading branch information
ghost91- committed Dec 17, 2021
1 parent 8b251ce commit 3e4a39d
Show file tree
Hide file tree
Showing 35 changed files with 538 additions and 595 deletions.
20 changes: 10 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ You can get a complete list by typing `CONFIG.fxmaster.filters` in your web cons
| ------------ | :-----: | :---------: | :-----: | :-------: | :----: |
| `snowstorm` ||||||
| `bubbles` || ||||
| `clouds` |||| ||
| `clouds` |||| ||
| `embers` || ||||
| `rainsimple` ||||||
| `stars` || ||||
Expand All @@ -90,19 +90,19 @@ You can get a complete list by typing `CONFIG.fxmaster.filters` in your web cons
| `fog` || ||||
| `raintop` ||||||
| `birds` || ||||
| `nature` || ||||
| `nature` || ||||
| `rain` ||||||
| `snow` ||||||

#### Weather Effect Option Types
#### Weather Effect Options

| Option | Type |
| ----------- | --------------------------------- |
| `scale` | `number` |
| `direction` | `number` |
| `speed` | `number` |
| `density` | `number` |
| `tint` | `{value: string, apply: boolean}` |
| Option | Type | Description |
| ----------- | --------------------------------- | ------------------------------------------------------------------------------------------------- |
| `scale` | `number` | A factor that scales the effect relative to its base size. |
| `direction` | `number` | The direction of the effect in degrees. |
| `speed` | `number` | A factor that adjusts the speed of the effect relative to its base speed. |
| `density` | `number` | The density of the effect. For most effects, it represents the number of particles per grid unit. |
| `tint` | `{value: string, apply: boolean}` | Tint the effect with this color. |

### Special Effects

Expand Down
10 changes: 9 additions & 1 deletion src/lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@
"FXMASTER.Delete": "Delete Effects",
"FXMASTER.DeleteConfirm": "<p><strong>Are you sure?</strong> Every effect will be deleted.</p>",
"FXMASTER.Enable": "Enable Effects",
"FXMASTER.DisableAll": "Disable Effects For Everybody",
"FXMASTER.DisableAllHint": "Setting this will disable effects for all users. It overrides the enable flag. It's mostly a safe guard to deactivate effects when migrations fail. You shouldn't need to set this yourself. After changing this setting, a manual reload is required.",
"FXMASTER.Angle": "Angle",
"FXMASTER.AngleHint": "Initial angle of the effect compared to the left to right axis",
"FXMASTER.Anchor": "Anchor",
Expand All @@ -56,5 +58,11 @@
"FXMASTER.CastThrow": "Throw to target",
"FXMASTER.CastExtend": "Extend to target",
"FXMASTER.CastExpand": "Expand to target",
"FXMASTER.CastRotate": "Rotate"
"FXMASTER.CastRotate": "Rotate",
"FXMASTER.MigrationWorldStart": "Performing world migrations for FXMaster. Please be patient and do not close your game or shut down your server.",
"FXMASTER.MigrationWorldCompletedWithErrors": "World migrations for FXMaster completed with errors. For more details, please take a look at the developer console (F12). Effects have been disabled via the \"Disable Effects For Everybody\" setting to avoid any potential scene crashes. Only reactivate them if you are sure it's safe to do so. You might want to remove all weather and filter effects from any affected scenes first.",
"FXMASTER.MigrationWorldCompletedSuccessfully": "World migrations for FXMaster completed successfully.",
"FXMASTER.MigrationClientStart": "Performing client migrations for FXMaster. Please be patient and do not close your game.",
"FXMASTER.MigrationClientCompletedWithErrors": "Client migrations for FXMaster completed with errors. For more details, please take a look at the developer console (F12).",
"FXMASTER.MigrationClientCompletedSuccessfully": "Client migrations for FXMaster completed successfully."
}
1 change: 1 addition & 0 deletions src/module/filterEffects/applications/filters-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ export class FiltersConfig extends FormApplication {
activateListeners(html) {
super.activateListeners(html);
html.find(".config.filter .collapse").click((event) => this._onFilterCollapse(event));
html.find('.config.filter input[type="range"]').on("input", (event) => this._onChangeRange(event));
}

/**
Expand Down
11 changes: 4 additions & 7 deletions src/module/filterEffects/filters/FXBloomFilter.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,23 @@ export class FXBloomFilter extends PIXI.filters.AdvancedBloomFilter {
max: 10.0,
min: 0.0,
step: 1.0,
default: 1.0,
value: 1.0,
},
bloomScale: {
label: "FXMASTER.Bloom",
type: "range",
max: 1.0,
min: 0.0,
step: 0.1,
default: 0.1,
value: 0.1,
},
threshold: {
label: "FXMASTER.Threshold",
type: "range",
max: 1.0,
min: 0.0,
step: 0.1,
default: 0.5,
value: 0.5,
},
};
}
Expand All @@ -53,10 +53,7 @@ export class FXBloomFilter extends PIXI.filters.AdvancedBloomFilter {

static get default() {
return Object.fromEntries(
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [
parameterName,
parameterConfig.default,
]),
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [parameterName, parameterConfig.value]),
);
}

Expand Down
15 changes: 6 additions & 9 deletions src/module/filterEffects/filters/FXColorFilter.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export class FXColorFilter extends PIXI.filters.AdjustmentFilter {
color: {
label: "FXMASTER.Tint",
type: "color",
default: {
value: {
value: "#FFFFFF",
apply: false,
},
Expand All @@ -30,31 +30,31 @@ export class FXColorFilter extends PIXI.filters.AdjustmentFilter {
max: 2.0,
min: 0.0,
step: 0.1,
default: 1.0,
value: 1.0,
},
contrast: {
label: "FXMASTER.Contrast",
type: "range",
max: 2.0,
min: 0.0,
step: 0.1,
default: 1.0,
value: 1.0,
},
brightness: {
label: "FXMASTER.Brightness",
type: "range",
max: 2.0,
min: 0.0,
step: 0.1,
default: 1.0,
value: 1.0,
},
gamma: {
label: "FXMASTER.Gamma",
type: "range",
max: 2.0,
min: 0.0,
step: 0.1,
default: 1.0,
value: 1.0,
},
};
}
Expand All @@ -73,10 +73,7 @@ export class FXColorFilter extends PIXI.filters.AdjustmentFilter {

static get default() {
return Object.fromEntries(
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [
parameterName,
parameterConfig.default,
]),
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [parameterName, parameterConfig.value]),
);
}

Expand Down
5 changes: 1 addition & 4 deletions src/module/filterEffects/filters/FXFogFilter.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,7 @@ export class FXFogFilter extends PIXI.Filter {

static get default() {
return Object.fromEntries(
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [
parameterName,
parameterConfig.default,
]),
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [parameterName, parameterConfig.value]),
);
}

Expand Down
11 changes: 4 additions & 7 deletions src/module/filterEffects/filters/FXLightningFilter.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,23 +26,23 @@ export class FXLightningFilter extends PIXI.filters.AdjustmentFilter {
max: 2000,
min: 100,
step: 5,
default: 500,
value: 500,
},
spark_duration: {
label: "FXMASTER.Duration",
type: "range",
max: 2000,
min: 100,
step: 5,
default: 300,
value: 300,
},
brightness: {
label: "FXMASTER.Brightness",
type: "range",
max: 4.0,
min: 0.0,
step: 0.1,
default: 1.3,
value: 1.3,
},
};
}
Expand Down Expand Up @@ -87,10 +87,7 @@ export class FXLightningFilter extends PIXI.filters.AdjustmentFilter {

static get default() {
return Object.fromEntries(
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [
parameterName,
parameterConfig.default,
]),
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [parameterName, parameterConfig.value]),
);
}
configure(opts) {
Expand Down
9 changes: 3 additions & 6 deletions src/module/filterEffects/filters/FXOldFilmFilter.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@ export class FXOldFilmFilter extends PIXI.filters.OldFilmFilter {
max: 1.0,
min: 0.0,
step: 0.1,
default: 0.3,
value: 0.3,
},
noise: {
label: "FXMASTER.Noise",
type: "range",
max: 1.0,
min: 0.0,
step: 0.1,
default: 0.1,
value: 0.1,
},
};
}
Expand All @@ -58,10 +58,7 @@ export class FXOldFilmFilter extends PIXI.filters.OldFilmFilter {

static get default() {
return Object.fromEntries(
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [
parameterName,
parameterConfig.default,
]),
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [parameterName, parameterConfig.value]),
);
}

Expand Down
9 changes: 3 additions & 6 deletions src/module/filterEffects/filters/FXPredatorFilter.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ export class FXPredatorFilter extends PIXI.filters.CRTFilter {
max: 1.0,
min: 0.0,
step: 0.1,
default: 0.1,
value: 0.1,
},
period: {
label: "FXMASTER.Speed",
type: "range",
max: 0.5,
min: 0.0,
step: 0.01,
default: 0.02,
value: 0.02,
},
};
}
Expand All @@ -58,10 +58,7 @@ export class FXPredatorFilter extends PIXI.filters.CRTFilter {

static get default() {
return Object.fromEntries(
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [
parameterName,
parameterConfig.default,
]),
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [parameterName, parameterConfig.value]),
);
}

Expand Down
9 changes: 3 additions & 6 deletions src/module/filterEffects/filters/FXUnderwaterFilter.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,12 @@ export class FXUnderwaterFilter extends PIXI.filters.DisplacementFilter {
max: 5.0,
min: 0.0,
step: 0.1,
default: 0.3,
value: 0.3,
},
scale: {
label: "FXMASTER.Scale",
type: "number",
default: 4.0,
value: 4.0,
},
};
}
Expand All @@ -63,10 +63,7 @@ export class FXUnderwaterFilter extends PIXI.filters.DisplacementFilter {

static get default() {
return Object.fromEntries(
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [
parameterName,
parameterConfig.default,
]),
Object.entries(this.parameters).map(([parameterName, parameterConfig]) => [parameterName, parameterConfig.value]),
);
}

Expand Down
32 changes: 18 additions & 14 deletions src/module/fxmaster.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ import { registerHooks } from "./hooks.js";
import { FXMASTER } from "./config.js";
import { WeatherLayer } from "./weatherEffects/WeatherLayer.js";
import { filterManager } from "./filterEffects/FilterManager.js";
import { migrate } from "./migration.js";
import { executeWhenWorldIsMigratedToLatest, isOnTargetMigration, migrate } from "./migration.js";
import { SpecialsLayer } from "./specialEffects/SpecialsLayer.js";
import { registerHelpers } from "./helpers.js";
import { registerGetSceneControlButtonsHook } from "./controls.js";
import { isV9OrLater } from "./utils.js";

import "../css/common.css";

Expand All @@ -15,9 +16,8 @@ window.FXMASTER = {
};

function registerLayer() {
const isV9OrLater = game.release?.generation ?? 0 >= 9;
CONFIG.Canvas.layers.fxmaster = isV9OrLater ? { layerClass: WeatherLayer, group: "effects" } : WeatherLayer;
CONFIG.Canvas.layers.specials = isV9OrLater ? { layerClass: SpecialsLayer, group: "effects" } : SpecialsLayer;
CONFIG.Canvas.layers.fxmaster = isV9OrLater() ? { layerClass: WeatherLayer, group: "effects" } : WeatherLayer;
CONFIG.Canvas.layers.specials = isV9OrLater() ? { layerClass: SpecialsLayer, group: "effects" } : SpecialsLayer;
}

function parseSpecialEffects() {
Expand Down Expand Up @@ -50,33 +50,37 @@ Hooks.once("init", function () {
specials: FXMASTER.specials,
weather: FXMASTER.weatherEffects,
});

foundry.utils.mergeObject(CONFIG.weatherEffects, FXMASTER.weatherEffects, { inplace: true });
});

Hooks.once("ready", () => {
migrate();
});

Hooks.on("canvasInit", () => {
if (!game.settings.get("fxmaster", "enable")) {
if (!game.settings.get("fxmaster", "enable") || game.settings.get("fxmaster", "disableAll")) {
return;
}
parseSpecialEffects();
filterManager.clear();
});

Hooks.on("canvasReady", async () => {
if (!game.settings.get("fxmaster", "enable")) {
return;
}
await filterManager.activate();
canvas.fxmaster.drawWeather();
canvas.fxmaster.updateMask();
executeWhenWorldIsMigratedToLatest(async () => {
if (game.settings.get("fxmaster", "disableAll")) {
return;
}
await filterManager.activate();
canvas.fxmaster.drawWeather();
canvas.fxmaster.updateMask();
});
});

Hooks.on("updateScene", (scene, data) => {
if (!game.settings.get("fxmaster", "enable")) {
if (
!game.settings.get("fxmaster", "enable") ||
game.settings.get("fxmaster", "disableAll") ||
!isOnTargetMigration()
) {
return;
}
if (hasProperty(data, "flags.fxmaster")) {
Expand Down
Loading

0 comments on commit 3e4a39d

Please sign in to comment.