@tsparticles/preset-matrix 4.2.0 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
(function(g){g.__tsParticlesInternals=g.__tsParticlesInternals||{};g.__tsParticlesInternals.bundles=g.__tsParticlesInternals.bundles||{};g.__tsParticlesInternals.effects=g.__tsParticlesInternals.effects||{};g.__tsParticlesInternals.engine=g.__tsParticlesInternals.engine||{};g.__tsParticlesInternals.interactions=g.__tsParticlesInternals.interactions||{};g.__tsParticlesInternals.palettes=g.__tsParticlesInternals.palettes||{};g.__tsParticlesInternals.paths=g.__tsParticlesInternals.paths||{};g.__tsParticlesInternals.plugins=g.__tsParticlesInternals.plugins||{};g.__tsParticlesInternals.plugins=g.__tsParticlesInternals.plugins||{};g.__tsParticlesInternals.plugins.emittersShapes=g.__tsParticlesInternals.plugins.emittersShapes||{};g.__tsParticlesInternals.presets=g.__tsParticlesInternals.presets||{};g.__tsParticlesInternals.shapes=g.__tsParticlesInternals.shapes||{};g.__tsParticlesInternals.updaters=g.__tsParticlesInternals.updaters||{};g.__tsParticlesInternals.utils=g.__tsParticlesInternals.utils||{};g.__tsParticlesInternals.canvas=g.__tsParticlesInternals.canvas||{};g.__tsParticlesInternals.canvas=g.__tsParticlesInternals.canvas||{};g.__tsParticlesInternals.canvas.utils=g.__tsParticlesInternals.canvas.utils||{};g.__tsParticlesInternals.path=g.__tsParticlesInternals.path||{};g.__tsParticlesInternals.path=g.__tsParticlesInternals.path||{};g.__tsParticlesInternals.path.utils=g.__tsParticlesInternals.path.utils||{};var __tsProxyFactory=typeof Proxy!=="undefined"?function(obj){return new Proxy(obj,{get:function(target,key){if(!(key in target)){target[key]={};}return target[key];}});}:function(obj){return obj;};g.__tsParticlesInternals.bundles=__tsProxyFactory(g.__tsParticlesInternals.bundles);g.__tsParticlesInternals.effects=__tsProxyFactory(g.__tsParticlesInternals.effects);g.__tsParticlesInternals.interactions=__tsProxyFactory(g.__tsParticlesInternals.interactions);g.__tsParticlesInternals.palettes=__tsProxyFactory(g.__tsParticlesInternals.palettes);g.__tsParticlesInternals.paths=__tsProxyFactory(g.__tsParticlesInternals.paths);g.__tsParticlesInternals.plugins=__tsProxyFactory(g.__tsParticlesInternals.plugins);g.__tsParticlesInternals.plugins.emittersShapes=__tsProxyFactory(g.__tsParticlesInternals.plugins.emittersShapes);g.__tsParticlesInternals.presets=__tsProxyFactory(g.__tsParticlesInternals.presets);g.__tsParticlesInternals.shapes=__tsProxyFactory(g.__tsParticlesInternals.shapes);g.__tsParticlesInternals.updaters=__tsProxyFactory(g.__tsParticlesInternals.updaters);g.__tsParticlesInternals.utils=__tsProxyFactory(g.__tsParticlesInternals.utils);g.__tsParticlesInternals.canvas=__tsProxyFactory(g.__tsParticlesInternals.canvas);g.__tsParticlesInternals.path=__tsProxyFactory(g.__tsParticlesInternals.path);g.tsparticlesInternalExports=g.tsparticlesInternalExports||{};})(typeof globalThis!=="undefined"?globalThis:typeof window!=="undefined"?window:this);
|
|
2
|
-
/* Preset v4.
|
|
2
|
+
/* Preset v4.3.0 */
|
|
3
3
|
(function (global, factory) {
|
|
4
4
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
|
5
5
|
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
|
@@ -358,29 +358,27 @@
|
|
|
358
358
|
}
|
|
359
359
|
}
|
|
360
360
|
else if (!isObject(destination) || Array.isArray(destination)) {
|
|
361
|
-
destination =
|
|
361
|
+
destination = Object.create(null);
|
|
362
362
|
}
|
|
363
|
-
const sourceKeys = Object.keys(source),
|
|
363
|
+
const sourceKeys = Object.keys(source), hasNested = sourceKeys.some(k => {
|
|
364
364
|
const v = source[k];
|
|
365
365
|
return isObject(v) || Array.isArray(v);
|
|
366
366
|
});
|
|
367
367
|
if (!hasNested) {
|
|
368
368
|
const sourceDict = source, destDict = destination;
|
|
369
369
|
for (const key of sourceKeys) {
|
|
370
|
-
if (
|
|
370
|
+
if (key === "__proto__" || key === "constructor" || key === "prototype") {
|
|
371
371
|
continue;
|
|
372
372
|
}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
destDict[key] = v;
|
|
377
|
-
}
|
|
373
|
+
const v = sourceDict[key];
|
|
374
|
+
if (v !== undefined) {
|
|
375
|
+
destDict[key] = v;
|
|
378
376
|
}
|
|
379
377
|
}
|
|
380
378
|
continue;
|
|
381
379
|
}
|
|
382
380
|
for (const key of sourceKeys) {
|
|
383
|
-
if (
|
|
381
|
+
if (key === "__proto__" || key === "constructor" || key === "prototype") {
|
|
384
382
|
continue;
|
|
385
383
|
}
|
|
386
384
|
const sourceDict = source, destDict = destination, value = sourceDict[key];
|
|
@@ -796,7 +794,7 @@
|
|
|
796
794
|
return this.#domArray;
|
|
797
795
|
}
|
|
798
796
|
get version() {
|
|
799
|
-
return "4.
|
|
797
|
+
return "4.3.0";
|
|
800
798
|
}
|
|
801
799
|
addEventListener(type, listener) {
|
|
802
800
|
this.#eventDispatcher.addEventListener(type, listener);
|
|
@@ -1029,6 +1027,18 @@
|
|
|
1029
1027
|
AnimationStatus["decreasing"] = "decreasing";
|
|
1030
1028
|
})(AnimationStatus || (AnimationStatus = {}));
|
|
1031
1029
|
|
|
1030
|
+
var DrawLayer;
|
|
1031
|
+
(function (DrawLayer) {
|
|
1032
|
+
DrawLayer[DrawLayer["BackgroundElement"] = 0] = "BackgroundElement";
|
|
1033
|
+
DrawLayer[DrawLayer["BackgroundDraw"] = 1] = "BackgroundDraw";
|
|
1034
|
+
DrawLayer[DrawLayer["BackgroundMask"] = 2] = "BackgroundMask";
|
|
1035
|
+
DrawLayer[DrawLayer["CanvasSetup"] = 3] = "CanvasSetup";
|
|
1036
|
+
DrawLayer[DrawLayer["PluginContent"] = 4] = "PluginContent";
|
|
1037
|
+
DrawLayer[DrawLayer["Particles"] = 5] = "Particles";
|
|
1038
|
+
DrawLayer[DrawLayer["CanvasCleanup"] = 6] = "CanvasCleanup";
|
|
1039
|
+
DrawLayer[DrawLayer["Foreground"] = 7] = "Foreground";
|
|
1040
|
+
})(DrawLayer || (DrawLayer = {}));
|
|
1041
|
+
|
|
1032
1042
|
class OptionLoader {
|
|
1033
1043
|
load(data) {
|
|
1034
1044
|
if (isNull(data)) {
|
|
@@ -1182,6 +1192,8 @@
|
|
|
1182
1192
|
|
|
1183
1193
|
class Background extends OptionLoader {
|
|
1184
1194
|
color;
|
|
1195
|
+
draw;
|
|
1196
|
+
element;
|
|
1185
1197
|
image = "";
|
|
1186
1198
|
opacity = 1;
|
|
1187
1199
|
position = "";
|
|
@@ -1196,6 +1208,8 @@
|
|
|
1196
1208
|
if (data.color !== undefined) {
|
|
1197
1209
|
this.color = OptionsColor.create(this.color, data.color);
|
|
1198
1210
|
}
|
|
1211
|
+
loadProperty(this, "element", data.element);
|
|
1212
|
+
loadProperty(this, "draw", data.draw);
|
|
1199
1213
|
loadProperty(this, "image", data.image);
|
|
1200
1214
|
loadProperty(this, "position", data.position);
|
|
1201
1215
|
loadProperty(this, "repeat", data.repeat);
|
|
@@ -1741,7 +1755,7 @@
|
|
|
1741
1755
|
}
|
|
1742
1756
|
}
|
|
1743
1757
|
|
|
1744
|
-
const styleCache = new Map(), maxStyleCacheSize = 2000, rgbFixedPrecision = 2, hslFixedPrecision = 2, sdrReferenceWhiteNits = 203;
|
|
1758
|
+
const styleCache = new Map(), maxStyleCacheSize = 2000, rgbFixedPrecision = 2, hslFixedPrecision = 2, hdrRgbFixedPrecision = 4, hdrHslFixedPrecision = 4, sdrReferenceWhiteNits = 203, hdrAnimationScale = sdrReferenceWhiteNits / maxNits;
|
|
1745
1759
|
function getCachedStyle(key, generator) {
|
|
1746
1760
|
let cached = styleCache.get(key);
|
|
1747
1761
|
if (!cached) {
|
|
@@ -1881,6 +1895,17 @@
|
|
|
1881
1895
|
: lNormalized + sNormalized - lNormalized * sNormalized, temp2 = double * lNormalized - temp1, phaseThird = phaseNumerator / triple, red = Math.min(rgbMax, rgbMax * hslChannel(temp2, temp1, hNormalized + phaseThird)), green = Math.min(rgbMax, rgbMax * hslChannel(temp2, temp1, hNormalized)), blue = Math.min(rgbMax, rgbMax * hslChannel(temp2, temp1, hNormalized - phaseThird));
|
|
1882
1896
|
return { r: Math.round(red), g: Math.round(green), b: Math.round(blue) };
|
|
1883
1897
|
}
|
|
1898
|
+
function hslToRgbFloat(hsl) {
|
|
1899
|
+
const h = ((hsl.h % hMax) + hMax) % hMax, s = Math.max(sMin, Math.min(sMax, hsl.s)), l = Math.max(lMin, Math.min(lMax, hsl.l)), hNormalized = h / hMax, sNormalized = s / sMax, lNormalized = l / lMax;
|
|
1900
|
+
if (s === sMin) {
|
|
1901
|
+
const grayscaleValue = lNormalized * rgbMax;
|
|
1902
|
+
return { r: grayscaleValue, g: grayscaleValue, b: grayscaleValue };
|
|
1903
|
+
}
|
|
1904
|
+
const temp1 = lNormalized < half
|
|
1905
|
+
? lNormalized * (sNormalizedOffset + sNormalized)
|
|
1906
|
+
: lNormalized + sNormalized - lNormalized * sNormalized, temp2 = double * lNormalized - temp1, phaseThird = phaseNumerator / triple, red = Math.min(rgbMax, rgbMax * hslChannel(temp2, temp1, hNormalized + phaseThird)), green = Math.min(rgbMax, rgbMax * hslChannel(temp2, temp1, hNormalized)), blue = Math.min(rgbMax, rgbMax * hslChannel(temp2, temp1, hNormalized - phaseThird));
|
|
1907
|
+
return { r: red, g: green, b: blue };
|
|
1908
|
+
}
|
|
1884
1909
|
function hslaToRgba(hsla) {
|
|
1885
1910
|
const rgbResult = hslToRgb(hsla);
|
|
1886
1911
|
return {
|
|
@@ -1890,8 +1915,9 @@
|
|
|
1890
1915
|
r: rgbResult.r,
|
|
1891
1916
|
};
|
|
1892
1917
|
}
|
|
1893
|
-
function getRandomRgbColor(min) {
|
|
1894
|
-
const fixedMin = defaultRgbMin
|
|
1918
|
+
function getRandomRgbColor(min, hdr) {
|
|
1919
|
+
const fixedMin = defaultRgbMin;
|
|
1920
|
+
const fixedMax = rgbMax + identity, getRgbInRangeValue = () => Math.floor(getRandomInRange(fixedMin, fixedMax));
|
|
1895
1921
|
return {
|
|
1896
1922
|
b: getRgbInRangeValue(),
|
|
1897
1923
|
g: getRgbInRangeValue(),
|
|
@@ -1899,7 +1925,7 @@
|
|
|
1899
1925
|
};
|
|
1900
1926
|
}
|
|
1901
1927
|
function getStyleFromRgb(color, hdr, opacity) {
|
|
1902
|
-
const op = opacity ?? defaultOpacity$1, key = `rgb-${color.r.toFixed(
|
|
1928
|
+
const rgbPrecision = hdr ? hdrRgbFixedPrecision : rgbFixedPrecision, op = opacity ?? defaultOpacity$1, key = `rgb-${color.r.toFixed(rgbPrecision)}-${color.g.toFixed(rgbPrecision)}-${color.b.toFixed(rgbPrecision)}-${hdr ? "hdr" : "sdr"}-${op.toString()}`;
|
|
1903
1929
|
return getCachedStyle(key, () => (hdr ? getHdrStyleFromRgb(color, opacity) : getSdrStyleFromRgb(color, opacity)));
|
|
1904
1930
|
}
|
|
1905
1931
|
function getHdrStyleFromRgb(color, opacity, peakNits = maxNits) {
|
|
@@ -1910,9 +1936,9 @@
|
|
|
1910
1936
|
return `rgba(${color.r.toString()}, ${color.g.toString()}, ${color.b.toString()}, ${(opacity ?? defaultOpacity$1).toString()})`;
|
|
1911
1937
|
}
|
|
1912
1938
|
function getStyleFromHsl(color, hdr, opacity) {
|
|
1913
|
-
const op = opacity ?? defaultOpacity$1, key = `hsl-${color.h.toFixed(
|
|
1939
|
+
const hslPrecision = hdr ? hdrHslFixedPrecision : hslFixedPrecision, op = opacity ?? defaultOpacity$1, key = `hsl-${color.h.toFixed(hslPrecision)}-${color.s.toFixed(hslPrecision)}-${color.l.toFixed(hslPrecision)}-${hdr ? "hdr" : "sdr"}-${op.toString()}`;
|
|
1914
1940
|
return getCachedStyle(key, () => hdr
|
|
1915
|
-
? getStyleFromRgb(
|
|
1941
|
+
? getStyleFromRgb(hslToRgbFloat(color), true, opacity)
|
|
1916
1942
|
: `hsla(${color.h.toString()}, ${color.s.toString()}%, ${color.l.toString()}%, ${op.toString()})`);
|
|
1917
1943
|
}
|
|
1918
1944
|
function getHslFromAnimation(animation) {
|
|
@@ -1975,7 +2001,7 @@
|
|
|
1975
2001
|
colorValue.velocity = defaultVelocity;
|
|
1976
2002
|
}
|
|
1977
2003
|
}
|
|
1978
|
-
function updateColorValue(data, decrease, delta) {
|
|
2004
|
+
function updateColorValue(data, decrease, delta, hdr) {
|
|
1979
2005
|
const minLoops = 0, minDelay = 0, identity = 1, minVelocity = 0, minOffset = 0, velocityFactor = 3.6;
|
|
1980
2006
|
if (!data.enable ||
|
|
1981
2007
|
((data.maxLoops ?? minLoops) > minLoops && (data.loops ?? minLoops) > (data.maxLoops ?? minLoops))) {
|
|
@@ -1988,7 +2014,7 @@
|
|
|
1988
2014
|
if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {
|
|
1989
2015
|
return;
|
|
1990
2016
|
}
|
|
1991
|
-
const offset = data.offset ? randomInRangeValue(data.offset) : minOffset, velocity = (data.velocity ?? minVelocity) * delta.factor + offset * velocityFactor, decay = data.decay ?? identity, max = data.max, min = data.min;
|
|
2017
|
+
const offset = data.offset ? randomInRangeValue(data.offset) : minOffset, velocity = ((data.velocity ?? minVelocity) * delta.factor + offset * velocityFactor) * (hdr ? hdrAnimationScale : identity), decay = data.decay ?? identity, max = data.max, min = data.min;
|
|
1992
2018
|
if (!decrease || data.status === AnimationStatus.increasing) {
|
|
1993
2019
|
data.value += velocity;
|
|
1994
2020
|
if (data.value > max) {
|
|
@@ -2015,14 +2041,14 @@
|
|
|
2015
2041
|
}
|
|
2016
2042
|
data.value = clamp(data.value, min, max);
|
|
2017
2043
|
}
|
|
2018
|
-
function updateColor(color, delta) {
|
|
2044
|
+
function updateColor(color, delta, hdr) {
|
|
2019
2045
|
if (!color) {
|
|
2020
2046
|
return;
|
|
2021
2047
|
}
|
|
2022
2048
|
const { h, s, l } = color;
|
|
2023
|
-
updateColorValue(h, false, delta);
|
|
2024
|
-
updateColorValue(s, true, delta);
|
|
2025
|
-
updateColorValue(l, true, delta);
|
|
2049
|
+
updateColorValue(h, false, delta, hdr);
|
|
2050
|
+
updateColorValue(s, true, delta, hdr);
|
|
2051
|
+
updateColorValue(l, true, delta, hdr);
|
|
2026
2052
|
}
|
|
2027
2053
|
function alterHsl(color, type, value) {
|
|
2028
2054
|
return {
|
|
@@ -2072,7 +2098,7 @@
|
|
|
2072
2098
|
}
|
|
2073
2099
|
|
|
2074
2100
|
async function loadBlendPlugin(engine) {
|
|
2075
|
-
engine.checkVersion("4.
|
|
2101
|
+
engine.checkVersion("4.3.0");
|
|
2076
2102
|
await engine.pluginManager.register(e => {
|
|
2077
2103
|
e.pluginManager.addPlugin(new BlendPlugin());
|
|
2078
2104
|
});
|
|
@@ -2109,7 +2135,7 @@
|
|
|
2109
2135
|
}
|
|
2110
2136
|
|
|
2111
2137
|
async function loadCircleShape(engine) {
|
|
2112
|
-
engine.checkVersion("4.
|
|
2138
|
+
engine.checkVersion("4.3.0");
|
|
2113
2139
|
await engine.pluginManager.register(e => {
|
|
2114
2140
|
e.pluginManager.addShape(["circle"], () => {
|
|
2115
2141
|
return Promise.resolve(new CircleDrawer());
|
|
@@ -2157,7 +2183,7 @@
|
|
|
2157
2183
|
}
|
|
2158
2184
|
|
|
2159
2185
|
async function loadHexColorPlugin(engine) {
|
|
2160
|
-
engine.checkVersion("4.
|
|
2186
|
+
engine.checkVersion("4.3.0");
|
|
2161
2187
|
await engine.pluginManager.register(e => {
|
|
2162
2188
|
e.pluginManager.addColorManager("hex", new HexColorManager());
|
|
2163
2189
|
});
|
|
@@ -2210,7 +2236,7 @@
|
|
|
2210
2236
|
}
|
|
2211
2237
|
|
|
2212
2238
|
async function loadHslColorPlugin(engine) {
|
|
2213
|
-
engine.checkVersion("4.
|
|
2239
|
+
engine.checkVersion("4.3.0");
|
|
2214
2240
|
await engine.pluginManager.register(e => {
|
|
2215
2241
|
e.pluginManager.addColorManager("hsl", new HslColorManager());
|
|
2216
2242
|
});
|
|
@@ -2234,7 +2260,7 @@
|
|
|
2234
2260
|
}
|
|
2235
2261
|
|
|
2236
2262
|
async function loadMovePlugin(engine) {
|
|
2237
|
-
engine.checkVersion("4.
|
|
2263
|
+
engine.checkVersion("4.3.0");
|
|
2238
2264
|
await engine.pluginManager.register(e => {
|
|
2239
2265
|
const moveEngine = e, movePluginManager = moveEngine.pluginManager;
|
|
2240
2266
|
movePluginManager.initializers.pathGenerators ??= new Map();
|
|
@@ -2444,7 +2470,7 @@
|
|
|
2444
2470
|
}
|
|
2445
2471
|
|
|
2446
2472
|
async function loadOpacityUpdater(engine) {
|
|
2447
|
-
engine.checkVersion("4.
|
|
2473
|
+
engine.checkVersion("4.3.0");
|
|
2448
2474
|
await engine.pluginManager.register(e => {
|
|
2449
2475
|
e.pluginManager.addParticleUpdater("opacity", container => {
|
|
2450
2476
|
return Promise.resolve(new OpacityUpdater(container));
|
|
@@ -2789,7 +2815,7 @@
|
|
|
2789
2815
|
}
|
|
2790
2816
|
|
|
2791
2817
|
async function loadOutModesUpdater(engine) {
|
|
2792
|
-
engine.checkVersion("4.
|
|
2818
|
+
engine.checkVersion("4.3.0");
|
|
2793
2819
|
await engine.pluginManager.register(e => {
|
|
2794
2820
|
e.pluginManager.addParticleUpdater("outModes", container => {
|
|
2795
2821
|
return Promise.resolve(new OutOfCanvasUpdater(container));
|
|
@@ -2854,13 +2880,13 @@
|
|
|
2854
2880
|
if (!this.isEnabled(particle)) {
|
|
2855
2881
|
return;
|
|
2856
2882
|
}
|
|
2857
|
-
updateColor(particle.fillColor, delta);
|
|
2858
|
-
updateColor(particle.strokeColor, delta);
|
|
2883
|
+
updateColor(particle.fillColor, delta, this.#container.hdr);
|
|
2884
|
+
updateColor(particle.strokeColor, delta, this.#container.hdr);
|
|
2859
2885
|
}
|
|
2860
2886
|
}
|
|
2861
2887
|
|
|
2862
2888
|
async function loadPaintUpdater(engine) {
|
|
2863
|
-
engine.checkVersion("4.
|
|
2889
|
+
engine.checkVersion("4.3.0");
|
|
2864
2890
|
await engine.pluginManager.register(e => {
|
|
2865
2891
|
e.pluginManager.addParticleUpdater("paint", container => {
|
|
2866
2892
|
return Promise.resolve(new PaintUpdater(e.pluginManager, container));
|
|
@@ -2915,7 +2941,7 @@
|
|
|
2915
2941
|
}
|
|
2916
2942
|
|
|
2917
2943
|
async function loadRgbColorPlugin(engine) {
|
|
2918
|
-
engine.checkVersion("4.
|
|
2944
|
+
engine.checkVersion("4.3.0");
|
|
2919
2945
|
await engine.pluginManager.register(e => {
|
|
2920
2946
|
e.pluginManager.addColorManager("rgb", new RgbColorManager());
|
|
2921
2947
|
});
|
|
@@ -3000,7 +3026,7 @@
|
|
|
3000
3026
|
}
|
|
3001
3027
|
|
|
3002
3028
|
async function loadSizeUpdater(engine) {
|
|
3003
|
-
engine.checkVersion("4.
|
|
3029
|
+
engine.checkVersion("4.3.0");
|
|
3004
3030
|
await engine.pluginManager.register(e => {
|
|
3005
3031
|
e.pluginManager.addParticleUpdater("size", container => {
|
|
3006
3032
|
return Promise.resolve(new SizeUpdater(container));
|
|
@@ -3009,7 +3035,7 @@
|
|
|
3009
3035
|
}
|
|
3010
3036
|
|
|
3011
3037
|
async function loadBasic(engine) {
|
|
3012
|
-
engine.checkVersion("4.
|
|
3038
|
+
engine.checkVersion("4.3.0");
|
|
3013
3039
|
await engine.pluginManager.register(async (e) => {
|
|
3014
3040
|
await Promise.all([
|
|
3015
3041
|
loadBlendPlugin(e),
|
|
@@ -3241,7 +3267,7 @@
|
|
|
3241
3267
|
}
|
|
3242
3268
|
|
|
3243
3269
|
async function loadMatrixShape(engine) {
|
|
3244
|
-
engine.checkVersion("4.
|
|
3270
|
+
engine.checkVersion("4.3.0");
|
|
3245
3271
|
await engine.pluginManager.register(e => {
|
|
3246
3272
|
e.pluginManager.addShape(["matrix"], () => Promise.resolve(new MatrixDrawer()));
|
|
3247
3273
|
});
|
|
@@ -3286,7 +3312,7 @@
|
|
|
3286
3312
|
}
|
|
3287
3313
|
|
|
3288
3314
|
async function loadPoissonDiscPlugin(engine) {
|
|
3289
|
-
engine.checkVersion("4.
|
|
3315
|
+
engine.checkVersion("4.3.0");
|
|
3290
3316
|
await engine.pluginManager.register(e => {
|
|
3291
3317
|
e.pluginManager.addPlugin(new PoissonDiscPlugin());
|
|
3292
3318
|
});
|
|
@@ -3324,7 +3350,7 @@
|
|
|
3324
3350
|
}
|
|
3325
3351
|
|
|
3326
3352
|
async function loadShadowEffect(engine) {
|
|
3327
|
-
engine.checkVersion("4.
|
|
3353
|
+
engine.checkVersion("4.3.0");
|
|
3328
3354
|
await engine.pluginManager.register(e => {
|
|
3329
3355
|
e.pluginManager.addEffect("shadow", container => {
|
|
3330
3356
|
return Promise.resolve(new ShadowDrawer(e.pluginManager, container));
|
|
@@ -3388,7 +3414,7 @@
|
|
|
3388
3414
|
}
|
|
3389
3415
|
|
|
3390
3416
|
async function loadTrailPlugin(engine) {
|
|
3391
|
-
engine.checkVersion("4.
|
|
3417
|
+
engine.checkVersion("4.3.0");
|
|
3392
3418
|
await engine.pluginManager.register(e => {
|
|
3393
3419
|
e.pluginManager.addPlugin(new TrailPlugin(e.pluginManager));
|
|
3394
3420
|
});
|
|
@@ -3498,10 +3524,10 @@
|
|
|
3498
3524
|
}
|
|
3499
3525
|
}
|
|
3500
3526
|
class RenderManager {
|
|
3527
|
+
#backgroundElement;
|
|
3528
|
+
#backgroundWarnings;
|
|
3501
3529
|
#canvasClearPlugins;
|
|
3502
3530
|
#canvasManager;
|
|
3503
|
-
#canvasPaintPlugins;
|
|
3504
|
-
#clearDrawPlugins;
|
|
3505
3531
|
#colorPlugins;
|
|
3506
3532
|
#container;
|
|
3507
3533
|
#context;
|
|
@@ -3509,9 +3535,7 @@
|
|
|
3509
3535
|
#drawParticlePlugins;
|
|
3510
3536
|
#drawParticlesCleanupPlugins;
|
|
3511
3537
|
#drawParticlesSetupPlugins;
|
|
3512
|
-
#
|
|
3513
|
-
#drawSettingsCleanupPlugins;
|
|
3514
|
-
#drawSettingsSetupPlugins;
|
|
3538
|
+
#layers;
|
|
3515
3539
|
#pluginManager;
|
|
3516
3540
|
#postDrawUpdaters;
|
|
3517
3541
|
#preDrawUpdaters;
|
|
@@ -3523,18 +3547,25 @@
|
|
|
3523
3547
|
this.#container = container;
|
|
3524
3548
|
this.#canvasManager = canvasManager;
|
|
3525
3549
|
this.#context = null;
|
|
3550
|
+
this.#backgroundElement = null;
|
|
3551
|
+
this.#backgroundWarnings = new Set();
|
|
3526
3552
|
this.#preDrawUpdaters = [];
|
|
3527
3553
|
this.#postDrawUpdaters = [];
|
|
3528
|
-
this.#colorPlugins = [];
|
|
3529
3554
|
this.#canvasClearPlugins = [];
|
|
3530
|
-
this.#
|
|
3531
|
-
this.#clearDrawPlugins = [];
|
|
3555
|
+
this.#colorPlugins = [];
|
|
3532
3556
|
this.#drawParticlePlugins = [];
|
|
3533
3557
|
this.#drawParticlesCleanupPlugins = [];
|
|
3534
3558
|
this.#drawParticlesSetupPlugins = [];
|
|
3535
|
-
this.#
|
|
3536
|
-
|
|
3537
|
-
|
|
3559
|
+
this.#layers = {
|
|
3560
|
+
0: [],
|
|
3561
|
+
1: [],
|
|
3562
|
+
2: [],
|
|
3563
|
+
3: [],
|
|
3564
|
+
4: [],
|
|
3565
|
+
5: [],
|
|
3566
|
+
6: [],
|
|
3567
|
+
7: [],
|
|
3568
|
+
};
|
|
3538
3569
|
}
|
|
3539
3570
|
get settings() {
|
|
3540
3571
|
return this.#contextSettings;
|
|
@@ -3548,32 +3579,38 @@
|
|
|
3548
3579
|
});
|
|
3549
3580
|
}
|
|
3550
3581
|
clear() {
|
|
3551
|
-
let pluginHandled = false;
|
|
3552
3582
|
for (const plugin of this.#canvasClearPlugins) {
|
|
3553
|
-
|
|
3554
|
-
|
|
3555
|
-
break;
|
|
3583
|
+
if (plugin.canvasClear?.() ?? false) {
|
|
3584
|
+
return;
|
|
3556
3585
|
}
|
|
3557
3586
|
}
|
|
3558
|
-
|
|
3559
|
-
|
|
3587
|
+
for (const layer of Object.values(DrawLayer)) {
|
|
3588
|
+
if (typeof layer === "number") {
|
|
3589
|
+
for (const plugin of this.#getLayerPlugins(layer)) {
|
|
3590
|
+
if (plugin.canvasClear?.() ?? false) {
|
|
3591
|
+
return;
|
|
3592
|
+
}
|
|
3593
|
+
}
|
|
3594
|
+
}
|
|
3560
3595
|
}
|
|
3561
3596
|
this.canvasClear();
|
|
3562
3597
|
}
|
|
3563
3598
|
destroy() {
|
|
3564
3599
|
this.stop();
|
|
3600
|
+
this.#backgroundElement = null;
|
|
3601
|
+
this.#backgroundWarnings.clear();
|
|
3565
3602
|
this.#preDrawUpdaters = [];
|
|
3566
3603
|
this.#postDrawUpdaters = [];
|
|
3567
|
-
this.#colorPlugins = [];
|
|
3568
3604
|
this.#canvasClearPlugins = [];
|
|
3569
|
-
this.#
|
|
3570
|
-
this.#clearDrawPlugins = [];
|
|
3605
|
+
this.#colorPlugins = [];
|
|
3571
3606
|
this.#drawParticlePlugins = [];
|
|
3572
3607
|
this.#drawParticlesCleanupPlugins = [];
|
|
3573
3608
|
this.#drawParticlesSetupPlugins = [];
|
|
3574
|
-
|
|
3575
|
-
|
|
3576
|
-
|
|
3609
|
+
for (const layer of Object.values(DrawLayer)) {
|
|
3610
|
+
if (typeof layer === "number") {
|
|
3611
|
+
this.#layers[layer] = [];
|
|
3612
|
+
}
|
|
3613
|
+
}
|
|
3577
3614
|
}
|
|
3578
3615
|
draw(cb) {
|
|
3579
3616
|
const ctx = this.#context;
|
|
@@ -3630,21 +3667,40 @@
|
|
|
3630
3667
|
});
|
|
3631
3668
|
}
|
|
3632
3669
|
drawParticles(delta) {
|
|
3633
|
-
const { particles } = this.#container;
|
|
3670
|
+
const { particles, actualOptions } = this.#container;
|
|
3634
3671
|
this.clear();
|
|
3635
3672
|
particles.update(delta);
|
|
3636
3673
|
this.draw(ctx => {
|
|
3637
|
-
|
|
3674
|
+
const width = this.#canvasManager.size.width, height = this.#canvasManager.size.height;
|
|
3675
|
+
if (this.#backgroundElement) {
|
|
3676
|
+
try {
|
|
3677
|
+
ctx.drawImage(this.#backgroundElement, originPoint.x, originPoint.y, width, height);
|
|
3678
|
+
}
|
|
3679
|
+
catch {
|
|
3680
|
+
this.#warnOnce("background-element-draw-error", "Error drawing background element onto canvas");
|
|
3681
|
+
}
|
|
3682
|
+
}
|
|
3683
|
+
const background = actualOptions.background;
|
|
3684
|
+
if (background.draw) {
|
|
3685
|
+
try {
|
|
3686
|
+
background.draw(ctx, delta);
|
|
3687
|
+
}
|
|
3688
|
+
catch {
|
|
3689
|
+
this.#warnOnce("background-draw-error", "Error in background.draw callback");
|
|
3690
|
+
}
|
|
3691
|
+
}
|
|
3692
|
+
for (const plugin of this.#getLayerPlugins(DrawLayer.BackgroundMask)) {
|
|
3693
|
+
plugin.canvasPaint?.();
|
|
3694
|
+
}
|
|
3695
|
+
for (const plugin of this.#getLayerPlugins(DrawLayer.CanvasSetup)) {
|
|
3638
3696
|
plugin.drawSettingsSetup?.(ctx, delta);
|
|
3639
3697
|
}
|
|
3640
|
-
for (const plugin of this.#
|
|
3698
|
+
for (const plugin of this.#getLayerPlugins(DrawLayer.PluginContent)) {
|
|
3641
3699
|
plugin.draw?.(ctx, delta);
|
|
3642
3700
|
}
|
|
3643
3701
|
particles.drawParticles(delta);
|
|
3644
|
-
for (const plugin of this.#
|
|
3702
|
+
for (const plugin of this.#getLayerPlugins(DrawLayer.CanvasCleanup)) {
|
|
3645
3703
|
plugin.clearDraw?.(ctx, delta);
|
|
3646
|
-
}
|
|
3647
|
-
for (const plugin of this.#drawSettingsCleanupPlugins) {
|
|
3648
3704
|
plugin.drawSettingsCleanup?.(ctx, delta);
|
|
3649
3705
|
}
|
|
3650
3706
|
});
|
|
@@ -3652,29 +3708,24 @@
|
|
|
3652
3708
|
init() {
|
|
3653
3709
|
this.initUpdaters();
|
|
3654
3710
|
this.initPlugins();
|
|
3711
|
+
this.#resolveBackgroundElement();
|
|
3655
3712
|
this.paint();
|
|
3656
3713
|
}
|
|
3657
3714
|
initPlugins() {
|
|
3658
|
-
this.#colorPlugins = [];
|
|
3659
3715
|
this.#canvasClearPlugins = [];
|
|
3660
|
-
this.#
|
|
3661
|
-
this.#clearDrawPlugins = [];
|
|
3716
|
+
this.#colorPlugins = [];
|
|
3662
3717
|
this.#drawParticlePlugins = [];
|
|
3663
3718
|
this.#drawParticlesSetupPlugins = [];
|
|
3664
3719
|
this.#drawParticlesCleanupPlugins = [];
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
|
|
3720
|
+
for (const layer of Object.values(DrawLayer)) {
|
|
3721
|
+
if (typeof layer === "number") {
|
|
3722
|
+
this.#layers[layer] = [];
|
|
3723
|
+
}
|
|
3724
|
+
}
|
|
3668
3725
|
for (const plugin of this.#container.plugins) {
|
|
3669
3726
|
if (plugin.particleFillColor ?? plugin.particleStrokeColor) {
|
|
3670
3727
|
this.#colorPlugins.push(plugin);
|
|
3671
3728
|
}
|
|
3672
|
-
if (plugin.canvasClear) {
|
|
3673
|
-
this.#canvasClearPlugins.push(plugin);
|
|
3674
|
-
}
|
|
3675
|
-
if (plugin.canvasPaint) {
|
|
3676
|
-
this.#canvasPaintPlugins.push(plugin);
|
|
3677
|
-
}
|
|
3678
3729
|
if (plugin.drawParticle) {
|
|
3679
3730
|
this.#drawParticlePlugins.push(plugin);
|
|
3680
3731
|
}
|
|
@@ -3684,17 +3735,20 @@
|
|
|
3684
3735
|
if (plugin.drawParticleCleanup) {
|
|
3685
3736
|
this.#drawParticlesCleanupPlugins.push(plugin);
|
|
3686
3737
|
}
|
|
3687
|
-
if (plugin.
|
|
3688
|
-
this.#
|
|
3738
|
+
if (plugin.canvasClear) {
|
|
3739
|
+
this.#canvasClearPlugins.push(plugin);
|
|
3740
|
+
}
|
|
3741
|
+
if (plugin.canvasPaint) {
|
|
3742
|
+
this.#getLayerPlugins(DrawLayer.BackgroundMask).push(plugin);
|
|
3689
3743
|
}
|
|
3690
3744
|
if (plugin.drawSettingsSetup) {
|
|
3691
|
-
this.#
|
|
3745
|
+
this.#getLayerPlugins(DrawLayer.CanvasSetup).push(plugin);
|
|
3692
3746
|
}
|
|
3693
|
-
if (plugin.
|
|
3694
|
-
this.#
|
|
3747
|
+
if (plugin.draw) {
|
|
3748
|
+
this.#getLayerPlugins(DrawLayer.PluginContent).push(plugin);
|
|
3695
3749
|
}
|
|
3696
|
-
if (plugin.clearDraw) {
|
|
3697
|
-
this.#
|
|
3750
|
+
if (plugin.clearDraw ?? plugin.drawSettingsCleanup) {
|
|
3751
|
+
this.#getLayerPlugins(DrawLayer.CanvasCleanup).push(plugin);
|
|
3698
3752
|
}
|
|
3699
3753
|
}
|
|
3700
3754
|
}
|
|
@@ -3712,7 +3766,7 @@
|
|
|
3712
3766
|
}
|
|
3713
3767
|
paint() {
|
|
3714
3768
|
let handled = false;
|
|
3715
|
-
for (const plugin of this.#
|
|
3769
|
+
for (const plugin of this.#getLayerPlugins(DrawLayer.BackgroundMask)) {
|
|
3716
3770
|
handled = plugin.canvasPaint?.() ?? false;
|
|
3717
3771
|
if (handled) {
|
|
3718
3772
|
break;
|
|
@@ -3885,6 +3939,9 @@
|
|
|
3885
3939
|
}
|
|
3886
3940
|
drawer.beforeDraw(data);
|
|
3887
3941
|
}
|
|
3942
|
+
#getLayerPlugins(layer) {
|
|
3943
|
+
return this.#layers[layer];
|
|
3944
|
+
}
|
|
3888
3945
|
#getPluginParticleColors(particle) {
|
|
3889
3946
|
let fColor, sColor;
|
|
3890
3947
|
for (const plugin of this.#colorPlugins) {
|
|
@@ -3902,6 +3959,39 @@
|
|
|
3902
3959
|
this.#reusablePluginColors[sColorIndex] = sColor;
|
|
3903
3960
|
return this.#reusablePluginColors;
|
|
3904
3961
|
}
|
|
3962
|
+
#resolveBackgroundElement() {
|
|
3963
|
+
const background = this.#container.actualOptions.background;
|
|
3964
|
+
this.#backgroundElement = null;
|
|
3965
|
+
if (!background.element) {
|
|
3966
|
+
return;
|
|
3967
|
+
}
|
|
3968
|
+
if (typeof background.element === "string") {
|
|
3969
|
+
if (typeof document !== "undefined") {
|
|
3970
|
+
const node = document.querySelector(background.element);
|
|
3971
|
+
if (node instanceof HTMLCanvasElement || node instanceof HTMLVideoElement || node instanceof HTMLImageElement) {
|
|
3972
|
+
this.#backgroundElement = node;
|
|
3973
|
+
}
|
|
3974
|
+
else if (node) {
|
|
3975
|
+
this.#warnOnce("background-element-not-supported", `Background element "${background.element}" is not a supported drawable element (canvas, video, or img)`);
|
|
3976
|
+
}
|
|
3977
|
+
else {
|
|
3978
|
+
this.#warnOnce("background-element-not-found", `Background element selector "${background.element}" not found`);
|
|
3979
|
+
}
|
|
3980
|
+
}
|
|
3981
|
+
}
|
|
3982
|
+
else if (background.element instanceof HTMLCanvasElement ||
|
|
3983
|
+
background.element instanceof OffscreenCanvas ||
|
|
3984
|
+
background.element instanceof HTMLVideoElement ||
|
|
3985
|
+
background.element instanceof HTMLImageElement) {
|
|
3986
|
+
this.#backgroundElement = background.element;
|
|
3987
|
+
}
|
|
3988
|
+
}
|
|
3989
|
+
#warnOnce(key, message) {
|
|
3990
|
+
if (!this.#backgroundWarnings.has(key)) {
|
|
3991
|
+
this.#backgroundWarnings.add(key);
|
|
3992
|
+
getLogger().warning(message);
|
|
3993
|
+
}
|
|
3994
|
+
}
|
|
3905
3995
|
}
|
|
3906
3996
|
|
|
3907
3997
|
const transferredCanvases = new WeakMap(), getTransferredCanvas = (canvas) => {
|
|
@@ -4478,7 +4568,6 @@
|
|
|
4478
4568
|
}
|
|
4479
4569
|
class Particle {
|
|
4480
4570
|
backColor;
|
|
4481
|
-
bubble;
|
|
4482
4571
|
destroyed;
|
|
4483
4572
|
direction;
|
|
4484
4573
|
effect;
|
|
@@ -4512,7 +4601,6 @@
|
|
|
4512
4601
|
shapeData;
|
|
4513
4602
|
sides;
|
|
4514
4603
|
size;
|
|
4515
|
-
slow;
|
|
4516
4604
|
spawning;
|
|
4517
4605
|
strokeColor;
|
|
4518
4606
|
strokeOpacity;
|
|
@@ -4534,18 +4622,25 @@
|
|
|
4534
4622
|
d: 1,
|
|
4535
4623
|
};
|
|
4536
4624
|
#container;
|
|
4625
|
+
#modifiers = [];
|
|
4537
4626
|
#pluginManager;
|
|
4538
4627
|
constructor(pluginManager, container) {
|
|
4539
4628
|
this.#pluginManager = pluginManager;
|
|
4540
4629
|
this.#container = container;
|
|
4541
4630
|
}
|
|
4631
|
+
addModifier(modifier) {
|
|
4632
|
+
this.#modifiers.push(modifier);
|
|
4633
|
+
this.#modifiers.sort((a, b) => a.priority - b.priority);
|
|
4634
|
+
}
|
|
4635
|
+
clearModifiers() {
|
|
4636
|
+
this.#modifiers.length = 0;
|
|
4637
|
+
}
|
|
4542
4638
|
destroy(override) {
|
|
4543
4639
|
if (this.unbreakable || this.destroyed) {
|
|
4544
4640
|
return;
|
|
4545
4641
|
}
|
|
4546
4642
|
this.destroyed = true;
|
|
4547
|
-
this.
|
|
4548
|
-
this.slow.inRange = false;
|
|
4643
|
+
this.clearModifiers();
|
|
4549
4644
|
const container = this.#container, shapeDrawer = this.shape ? container.shapeDrawers.get(this.shape) : undefined;
|
|
4550
4645
|
shapeDrawer?.particleDestroy?.(this);
|
|
4551
4646
|
for (const plugin of container.particleDestroyedPlugins) {
|
|
@@ -4567,13 +4662,16 @@
|
|
|
4567
4662
|
return this.rotation + (this.pathRotation ? this.velocity.angle : defaultAngle);
|
|
4568
4663
|
}
|
|
4569
4664
|
getFillColor() {
|
|
4570
|
-
return this.#getRollColor(this
|
|
4665
|
+
return this.#getRollColor(this.#applyModifiers(getHslFromAnimation(this.fillColor), m => m.fillColor));
|
|
4571
4666
|
}
|
|
4572
4667
|
getMass() {
|
|
4573
4668
|
return this.getRadius() ** squareExp * Math.PI * half;
|
|
4574
4669
|
}
|
|
4670
|
+
getModifier(id) {
|
|
4671
|
+
return this.#modifiers.find(m => m.id === id);
|
|
4672
|
+
}
|
|
4575
4673
|
getOpacity() {
|
|
4576
|
-
const zIndexOptions = this.options.zIndex, zIndexFactor = zIndexFactorOffset - this.zIndexFactor, zOpacityFactor = zIndexFactor ** zIndexOptions.opacityRate,
|
|
4674
|
+
const zIndexOptions = this.options.zIndex, zIndexFactor = zIndexFactorOffset - this.zIndexFactor, zOpacityFactor = zIndexFactor ** zIndexOptions.opacityRate, baseOpacity = getRangeValue(this.opacity?.value ?? defaultOpacity$1), modifierOpacity = this.#applyModifiers(undefined, m => m.opacity), opacity = modifierOpacity ?? baseOpacity, fillOpacity = this.fillOpacity ?? defaultOpacity$1, strokeOpacity = this.strokeOpacity ?? defaultOpacity$1;
|
|
4577
4675
|
this.#cachedOpacityData.fillOpacity = opacity * fillOpacity * zOpacityFactor;
|
|
4578
4676
|
this.#cachedOpacityData.opacity = opacity * zOpacityFactor;
|
|
4579
4677
|
this.#cachedOpacityData.strokeOpacity = opacity * strokeOpacity * zOpacityFactor;
|
|
@@ -4586,7 +4684,7 @@
|
|
|
4586
4684
|
return this.#cachedPosition;
|
|
4587
4685
|
}
|
|
4588
4686
|
getRadius() {
|
|
4589
|
-
return this.
|
|
4687
|
+
return this.#applyModifiers(this.size.value, m => m.radius);
|
|
4590
4688
|
}
|
|
4591
4689
|
getRotateData() {
|
|
4592
4690
|
const angle = this.getAngle();
|
|
@@ -4595,7 +4693,7 @@
|
|
|
4595
4693
|
return this.#cachedRotateData;
|
|
4596
4694
|
}
|
|
4597
4695
|
getStrokeColor() {
|
|
4598
|
-
return this.#getRollColor(this
|
|
4696
|
+
return this.#getRollColor(this.#applyModifiers(getHslFromAnimation(this.strokeColor), m => m.strokeColor));
|
|
4599
4697
|
}
|
|
4600
4698
|
getTransformData(externalTransform) {
|
|
4601
4699
|
const rotateData = this.getRotateData(), rotating = this.isRotating;
|
|
@@ -4615,13 +4713,6 @@
|
|
|
4615
4713
|
this.options = resolveParticleOptions(this, container, this.#pluginManager, overrideOptions);
|
|
4616
4714
|
container.retina.initParticle(this);
|
|
4617
4715
|
runUpdaterPreInit(container.particleUpdaters, this);
|
|
4618
|
-
this.bubble = {
|
|
4619
|
-
inRange: false,
|
|
4620
|
-
};
|
|
4621
|
-
this.slow = {
|
|
4622
|
-
inRange: false,
|
|
4623
|
-
factor: 1,
|
|
4624
|
-
};
|
|
4625
4716
|
this.#initPosition(position);
|
|
4626
4717
|
this.initialVelocity = this.#calculateVelocity();
|
|
4627
4718
|
this.velocity = this.initialVelocity.copy();
|
|
@@ -4661,11 +4752,29 @@
|
|
|
4661
4752
|
isVisible() {
|
|
4662
4753
|
return !this.destroyed && !this.spawning && this.isInsideCanvas();
|
|
4663
4754
|
}
|
|
4755
|
+
removeModifier(id) {
|
|
4756
|
+
const idx = this.#modifiers.findIndex(m => m.id === id);
|
|
4757
|
+
if (idx >= defaultAngle) {
|
|
4758
|
+
this.#modifiers.splice(idx, identity);
|
|
4759
|
+
}
|
|
4760
|
+
}
|
|
4664
4761
|
reset() {
|
|
4665
4762
|
for (const updater of this.#container.particleUpdaters) {
|
|
4666
4763
|
updater.reset?.(this);
|
|
4667
4764
|
}
|
|
4668
4765
|
}
|
|
4766
|
+
#applyModifiers(base, getter) {
|
|
4767
|
+
let value = base;
|
|
4768
|
+
for (const mod of this.#modifiers) {
|
|
4769
|
+
if (mod.enabled) {
|
|
4770
|
+
const override = getter(mod);
|
|
4771
|
+
if (override !== undefined) {
|
|
4772
|
+
value = override;
|
|
4773
|
+
}
|
|
4774
|
+
}
|
|
4775
|
+
}
|
|
4776
|
+
return value;
|
|
4777
|
+
}
|
|
4669
4778
|
#calcPosition(position, zIndex) {
|
|
4670
4779
|
let tryCount = defaultRetryCount, posVec = position ? Vector3d.create(position.x, position.y, zIndex) : undefined;
|
|
4671
4780
|
const container = this.#container, plugins = container.particlePositionPlugins, outModes = this.options.move.outModes, radius = this.getRadius(), canvasSize = container.canvas.size;
|
|
@@ -5767,6 +5876,7 @@
|
|
|
5767
5876
|
});
|
|
5768
5877
|
|
|
5769
5878
|
class BlendPluginInstance {
|
|
5879
|
+
layer = DrawLayer.CanvasSetup;
|
|
5770
5880
|
#container;
|
|
5771
5881
|
#defaultCompositeValue;
|
|
5772
5882
|
constructor(container) {
|
|
@@ -5912,7 +6022,8 @@
|
|
|
5912
6022
|
particle.lastPathTime -= pathDelay;
|
|
5913
6023
|
}
|
|
5914
6024
|
function getProximitySpeedFactor(particle) {
|
|
5915
|
-
|
|
6025
|
+
const mod = particle.getModifier("slow");
|
|
6026
|
+
return mod?.enabled ? (mod.speedFactor ?? identity) : identity;
|
|
5916
6027
|
}
|
|
5917
6028
|
function initSpin(container, particle) {
|
|
5918
6029
|
const options = particle.options, spinOptions = options.move.spin;
|
|
@@ -6090,6 +6201,7 @@
|
|
|
6090
6201
|
|
|
6091
6202
|
const minimumLength = 0;
|
|
6092
6203
|
class TrailPluginInstance {
|
|
6204
|
+
layer = DrawLayer.PluginContent;
|
|
6093
6205
|
#container;
|
|
6094
6206
|
#pluginManager;
|
|
6095
6207
|
#trailFill;
|