@tsparticles/preset-stars 4.2.1 → 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),
|
|
@@ -3085,10 +3111,10 @@
|
|
|
3085
3111
|
}
|
|
3086
3112
|
}
|
|
3087
3113
|
class RenderManager {
|
|
3114
|
+
#backgroundElement;
|
|
3115
|
+
#backgroundWarnings;
|
|
3088
3116
|
#canvasClearPlugins;
|
|
3089
3117
|
#canvasManager;
|
|
3090
|
-
#canvasPaintPlugins;
|
|
3091
|
-
#clearDrawPlugins;
|
|
3092
3118
|
#colorPlugins;
|
|
3093
3119
|
#container;
|
|
3094
3120
|
#context;
|
|
@@ -3096,9 +3122,7 @@
|
|
|
3096
3122
|
#drawParticlePlugins;
|
|
3097
3123
|
#drawParticlesCleanupPlugins;
|
|
3098
3124
|
#drawParticlesSetupPlugins;
|
|
3099
|
-
#
|
|
3100
|
-
#drawSettingsCleanupPlugins;
|
|
3101
|
-
#drawSettingsSetupPlugins;
|
|
3125
|
+
#layers;
|
|
3102
3126
|
#pluginManager;
|
|
3103
3127
|
#postDrawUpdaters;
|
|
3104
3128
|
#preDrawUpdaters;
|
|
@@ -3110,18 +3134,25 @@
|
|
|
3110
3134
|
this.#container = container;
|
|
3111
3135
|
this.#canvasManager = canvasManager;
|
|
3112
3136
|
this.#context = null;
|
|
3137
|
+
this.#backgroundElement = null;
|
|
3138
|
+
this.#backgroundWarnings = new Set();
|
|
3113
3139
|
this.#preDrawUpdaters = [];
|
|
3114
3140
|
this.#postDrawUpdaters = [];
|
|
3115
|
-
this.#colorPlugins = [];
|
|
3116
3141
|
this.#canvasClearPlugins = [];
|
|
3117
|
-
this.#
|
|
3118
|
-
this.#clearDrawPlugins = [];
|
|
3142
|
+
this.#colorPlugins = [];
|
|
3119
3143
|
this.#drawParticlePlugins = [];
|
|
3120
3144
|
this.#drawParticlesCleanupPlugins = [];
|
|
3121
3145
|
this.#drawParticlesSetupPlugins = [];
|
|
3122
|
-
this.#
|
|
3123
|
-
|
|
3124
|
-
|
|
3146
|
+
this.#layers = {
|
|
3147
|
+
0: [],
|
|
3148
|
+
1: [],
|
|
3149
|
+
2: [],
|
|
3150
|
+
3: [],
|
|
3151
|
+
4: [],
|
|
3152
|
+
5: [],
|
|
3153
|
+
6: [],
|
|
3154
|
+
7: [],
|
|
3155
|
+
};
|
|
3125
3156
|
}
|
|
3126
3157
|
get settings() {
|
|
3127
3158
|
return this.#contextSettings;
|
|
@@ -3135,32 +3166,38 @@
|
|
|
3135
3166
|
});
|
|
3136
3167
|
}
|
|
3137
3168
|
clear() {
|
|
3138
|
-
let pluginHandled = false;
|
|
3139
3169
|
for (const plugin of this.#canvasClearPlugins) {
|
|
3140
|
-
|
|
3141
|
-
|
|
3142
|
-
break;
|
|
3170
|
+
if (plugin.canvasClear?.() ?? false) {
|
|
3171
|
+
return;
|
|
3143
3172
|
}
|
|
3144
3173
|
}
|
|
3145
|
-
|
|
3146
|
-
|
|
3174
|
+
for (const layer of Object.values(DrawLayer)) {
|
|
3175
|
+
if (typeof layer === "number") {
|
|
3176
|
+
for (const plugin of this.#getLayerPlugins(layer)) {
|
|
3177
|
+
if (plugin.canvasClear?.() ?? false) {
|
|
3178
|
+
return;
|
|
3179
|
+
}
|
|
3180
|
+
}
|
|
3181
|
+
}
|
|
3147
3182
|
}
|
|
3148
3183
|
this.canvasClear();
|
|
3149
3184
|
}
|
|
3150
3185
|
destroy() {
|
|
3151
3186
|
this.stop();
|
|
3187
|
+
this.#backgroundElement = null;
|
|
3188
|
+
this.#backgroundWarnings.clear();
|
|
3152
3189
|
this.#preDrawUpdaters = [];
|
|
3153
3190
|
this.#postDrawUpdaters = [];
|
|
3154
|
-
this.#colorPlugins = [];
|
|
3155
3191
|
this.#canvasClearPlugins = [];
|
|
3156
|
-
this.#
|
|
3157
|
-
this.#clearDrawPlugins = [];
|
|
3192
|
+
this.#colorPlugins = [];
|
|
3158
3193
|
this.#drawParticlePlugins = [];
|
|
3159
3194
|
this.#drawParticlesCleanupPlugins = [];
|
|
3160
3195
|
this.#drawParticlesSetupPlugins = [];
|
|
3161
|
-
|
|
3162
|
-
|
|
3163
|
-
|
|
3196
|
+
for (const layer of Object.values(DrawLayer)) {
|
|
3197
|
+
if (typeof layer === "number") {
|
|
3198
|
+
this.#layers[layer] = [];
|
|
3199
|
+
}
|
|
3200
|
+
}
|
|
3164
3201
|
}
|
|
3165
3202
|
draw(cb) {
|
|
3166
3203
|
const ctx = this.#context;
|
|
@@ -3217,21 +3254,40 @@
|
|
|
3217
3254
|
});
|
|
3218
3255
|
}
|
|
3219
3256
|
drawParticles(delta) {
|
|
3220
|
-
const { particles } = this.#container;
|
|
3257
|
+
const { particles, actualOptions } = this.#container;
|
|
3221
3258
|
this.clear();
|
|
3222
3259
|
particles.update(delta);
|
|
3223
3260
|
this.draw(ctx => {
|
|
3224
|
-
|
|
3261
|
+
const width = this.#canvasManager.size.width, height = this.#canvasManager.size.height;
|
|
3262
|
+
if (this.#backgroundElement) {
|
|
3263
|
+
try {
|
|
3264
|
+
ctx.drawImage(this.#backgroundElement, originPoint.x, originPoint.y, width, height);
|
|
3265
|
+
}
|
|
3266
|
+
catch {
|
|
3267
|
+
this.#warnOnce("background-element-draw-error", "Error drawing background element onto canvas");
|
|
3268
|
+
}
|
|
3269
|
+
}
|
|
3270
|
+
const background = actualOptions.background;
|
|
3271
|
+
if (background.draw) {
|
|
3272
|
+
try {
|
|
3273
|
+
background.draw(ctx, delta);
|
|
3274
|
+
}
|
|
3275
|
+
catch {
|
|
3276
|
+
this.#warnOnce("background-draw-error", "Error in background.draw callback");
|
|
3277
|
+
}
|
|
3278
|
+
}
|
|
3279
|
+
for (const plugin of this.#getLayerPlugins(DrawLayer.BackgroundMask)) {
|
|
3280
|
+
plugin.canvasPaint?.();
|
|
3281
|
+
}
|
|
3282
|
+
for (const plugin of this.#getLayerPlugins(DrawLayer.CanvasSetup)) {
|
|
3225
3283
|
plugin.drawSettingsSetup?.(ctx, delta);
|
|
3226
3284
|
}
|
|
3227
|
-
for (const plugin of this.#
|
|
3285
|
+
for (const plugin of this.#getLayerPlugins(DrawLayer.PluginContent)) {
|
|
3228
3286
|
plugin.draw?.(ctx, delta);
|
|
3229
3287
|
}
|
|
3230
3288
|
particles.drawParticles(delta);
|
|
3231
|
-
for (const plugin of this.#
|
|
3289
|
+
for (const plugin of this.#getLayerPlugins(DrawLayer.CanvasCleanup)) {
|
|
3232
3290
|
plugin.clearDraw?.(ctx, delta);
|
|
3233
|
-
}
|
|
3234
|
-
for (const plugin of this.#drawSettingsCleanupPlugins) {
|
|
3235
3291
|
plugin.drawSettingsCleanup?.(ctx, delta);
|
|
3236
3292
|
}
|
|
3237
3293
|
});
|
|
@@ -3239,29 +3295,24 @@
|
|
|
3239
3295
|
init() {
|
|
3240
3296
|
this.initUpdaters();
|
|
3241
3297
|
this.initPlugins();
|
|
3298
|
+
this.#resolveBackgroundElement();
|
|
3242
3299
|
this.paint();
|
|
3243
3300
|
}
|
|
3244
3301
|
initPlugins() {
|
|
3245
|
-
this.#colorPlugins = [];
|
|
3246
3302
|
this.#canvasClearPlugins = [];
|
|
3247
|
-
this.#
|
|
3248
|
-
this.#clearDrawPlugins = [];
|
|
3303
|
+
this.#colorPlugins = [];
|
|
3249
3304
|
this.#drawParticlePlugins = [];
|
|
3250
3305
|
this.#drawParticlesSetupPlugins = [];
|
|
3251
3306
|
this.#drawParticlesCleanupPlugins = [];
|
|
3252
|
-
|
|
3253
|
-
|
|
3254
|
-
|
|
3307
|
+
for (const layer of Object.values(DrawLayer)) {
|
|
3308
|
+
if (typeof layer === "number") {
|
|
3309
|
+
this.#layers[layer] = [];
|
|
3310
|
+
}
|
|
3311
|
+
}
|
|
3255
3312
|
for (const plugin of this.#container.plugins) {
|
|
3256
3313
|
if (plugin.particleFillColor ?? plugin.particleStrokeColor) {
|
|
3257
3314
|
this.#colorPlugins.push(plugin);
|
|
3258
3315
|
}
|
|
3259
|
-
if (plugin.canvasClear) {
|
|
3260
|
-
this.#canvasClearPlugins.push(plugin);
|
|
3261
|
-
}
|
|
3262
|
-
if (plugin.canvasPaint) {
|
|
3263
|
-
this.#canvasPaintPlugins.push(plugin);
|
|
3264
|
-
}
|
|
3265
3316
|
if (plugin.drawParticle) {
|
|
3266
3317
|
this.#drawParticlePlugins.push(plugin);
|
|
3267
3318
|
}
|
|
@@ -3271,17 +3322,20 @@
|
|
|
3271
3322
|
if (plugin.drawParticleCleanup) {
|
|
3272
3323
|
this.#drawParticlesCleanupPlugins.push(plugin);
|
|
3273
3324
|
}
|
|
3274
|
-
if (plugin.
|
|
3275
|
-
this.#
|
|
3325
|
+
if (plugin.canvasClear) {
|
|
3326
|
+
this.#canvasClearPlugins.push(plugin);
|
|
3327
|
+
}
|
|
3328
|
+
if (plugin.canvasPaint) {
|
|
3329
|
+
this.#getLayerPlugins(DrawLayer.BackgroundMask).push(plugin);
|
|
3276
3330
|
}
|
|
3277
3331
|
if (plugin.drawSettingsSetup) {
|
|
3278
|
-
this.#
|
|
3332
|
+
this.#getLayerPlugins(DrawLayer.CanvasSetup).push(plugin);
|
|
3279
3333
|
}
|
|
3280
|
-
if (plugin.
|
|
3281
|
-
this.#
|
|
3334
|
+
if (plugin.draw) {
|
|
3335
|
+
this.#getLayerPlugins(DrawLayer.PluginContent).push(plugin);
|
|
3282
3336
|
}
|
|
3283
|
-
if (plugin.clearDraw) {
|
|
3284
|
-
this.#
|
|
3337
|
+
if (plugin.clearDraw ?? plugin.drawSettingsCleanup) {
|
|
3338
|
+
this.#getLayerPlugins(DrawLayer.CanvasCleanup).push(plugin);
|
|
3285
3339
|
}
|
|
3286
3340
|
}
|
|
3287
3341
|
}
|
|
@@ -3299,7 +3353,7 @@
|
|
|
3299
3353
|
}
|
|
3300
3354
|
paint() {
|
|
3301
3355
|
let handled = false;
|
|
3302
|
-
for (const plugin of this.#
|
|
3356
|
+
for (const plugin of this.#getLayerPlugins(DrawLayer.BackgroundMask)) {
|
|
3303
3357
|
handled = plugin.canvasPaint?.() ?? false;
|
|
3304
3358
|
if (handled) {
|
|
3305
3359
|
break;
|
|
@@ -3472,6 +3526,9 @@
|
|
|
3472
3526
|
}
|
|
3473
3527
|
drawer.beforeDraw(data);
|
|
3474
3528
|
}
|
|
3529
|
+
#getLayerPlugins(layer) {
|
|
3530
|
+
return this.#layers[layer];
|
|
3531
|
+
}
|
|
3475
3532
|
#getPluginParticleColors(particle) {
|
|
3476
3533
|
let fColor, sColor;
|
|
3477
3534
|
for (const plugin of this.#colorPlugins) {
|
|
@@ -3489,6 +3546,39 @@
|
|
|
3489
3546
|
this.#reusablePluginColors[sColorIndex] = sColor;
|
|
3490
3547
|
return this.#reusablePluginColors;
|
|
3491
3548
|
}
|
|
3549
|
+
#resolveBackgroundElement() {
|
|
3550
|
+
const background = this.#container.actualOptions.background;
|
|
3551
|
+
this.#backgroundElement = null;
|
|
3552
|
+
if (!background.element) {
|
|
3553
|
+
return;
|
|
3554
|
+
}
|
|
3555
|
+
if (typeof background.element === "string") {
|
|
3556
|
+
if (typeof document !== "undefined") {
|
|
3557
|
+
const node = document.querySelector(background.element);
|
|
3558
|
+
if (node instanceof HTMLCanvasElement || node instanceof HTMLVideoElement || node instanceof HTMLImageElement) {
|
|
3559
|
+
this.#backgroundElement = node;
|
|
3560
|
+
}
|
|
3561
|
+
else if (node) {
|
|
3562
|
+
this.#warnOnce("background-element-not-supported", `Background element "${background.element}" is not a supported drawable element (canvas, video, or img)`);
|
|
3563
|
+
}
|
|
3564
|
+
else {
|
|
3565
|
+
this.#warnOnce("background-element-not-found", `Background element selector "${background.element}" not found`);
|
|
3566
|
+
}
|
|
3567
|
+
}
|
|
3568
|
+
}
|
|
3569
|
+
else if (background.element instanceof HTMLCanvasElement ||
|
|
3570
|
+
background.element instanceof OffscreenCanvas ||
|
|
3571
|
+
background.element instanceof HTMLVideoElement ||
|
|
3572
|
+
background.element instanceof HTMLImageElement) {
|
|
3573
|
+
this.#backgroundElement = background.element;
|
|
3574
|
+
}
|
|
3575
|
+
}
|
|
3576
|
+
#warnOnce(key, message) {
|
|
3577
|
+
if (!this.#backgroundWarnings.has(key)) {
|
|
3578
|
+
this.#backgroundWarnings.add(key);
|
|
3579
|
+
getLogger().warning(message);
|
|
3580
|
+
}
|
|
3581
|
+
}
|
|
3492
3582
|
}
|
|
3493
3583
|
|
|
3494
3584
|
const transferredCanvases = new WeakMap(), getTransferredCanvas = (canvas) => {
|
|
@@ -4065,7 +4155,6 @@
|
|
|
4065
4155
|
}
|
|
4066
4156
|
class Particle {
|
|
4067
4157
|
backColor;
|
|
4068
|
-
bubble;
|
|
4069
4158
|
destroyed;
|
|
4070
4159
|
direction;
|
|
4071
4160
|
effect;
|
|
@@ -4099,7 +4188,6 @@
|
|
|
4099
4188
|
shapeData;
|
|
4100
4189
|
sides;
|
|
4101
4190
|
size;
|
|
4102
|
-
slow;
|
|
4103
4191
|
spawning;
|
|
4104
4192
|
strokeColor;
|
|
4105
4193
|
strokeOpacity;
|
|
@@ -4121,18 +4209,25 @@
|
|
|
4121
4209
|
d: 1,
|
|
4122
4210
|
};
|
|
4123
4211
|
#container;
|
|
4212
|
+
#modifiers = [];
|
|
4124
4213
|
#pluginManager;
|
|
4125
4214
|
constructor(pluginManager, container) {
|
|
4126
4215
|
this.#pluginManager = pluginManager;
|
|
4127
4216
|
this.#container = container;
|
|
4128
4217
|
}
|
|
4218
|
+
addModifier(modifier) {
|
|
4219
|
+
this.#modifiers.push(modifier);
|
|
4220
|
+
this.#modifiers.sort((a, b) => a.priority - b.priority);
|
|
4221
|
+
}
|
|
4222
|
+
clearModifiers() {
|
|
4223
|
+
this.#modifiers.length = 0;
|
|
4224
|
+
}
|
|
4129
4225
|
destroy(override) {
|
|
4130
4226
|
if (this.unbreakable || this.destroyed) {
|
|
4131
4227
|
return;
|
|
4132
4228
|
}
|
|
4133
4229
|
this.destroyed = true;
|
|
4134
|
-
this.
|
|
4135
|
-
this.slow.inRange = false;
|
|
4230
|
+
this.clearModifiers();
|
|
4136
4231
|
const container = this.#container, shapeDrawer = this.shape ? container.shapeDrawers.get(this.shape) : undefined;
|
|
4137
4232
|
shapeDrawer?.particleDestroy?.(this);
|
|
4138
4233
|
for (const plugin of container.particleDestroyedPlugins) {
|
|
@@ -4154,13 +4249,16 @@
|
|
|
4154
4249
|
return this.rotation + (this.pathRotation ? this.velocity.angle : defaultAngle);
|
|
4155
4250
|
}
|
|
4156
4251
|
getFillColor() {
|
|
4157
|
-
return this.#getRollColor(this
|
|
4252
|
+
return this.#getRollColor(this.#applyModifiers(getHslFromAnimation(this.fillColor), m => m.fillColor));
|
|
4158
4253
|
}
|
|
4159
4254
|
getMass() {
|
|
4160
4255
|
return this.getRadius() ** squareExp * Math.PI * half;
|
|
4161
4256
|
}
|
|
4257
|
+
getModifier(id) {
|
|
4258
|
+
return this.#modifiers.find(m => m.id === id);
|
|
4259
|
+
}
|
|
4162
4260
|
getOpacity() {
|
|
4163
|
-
const zIndexOptions = this.options.zIndex, zIndexFactor = zIndexFactorOffset - this.zIndexFactor, zOpacityFactor = zIndexFactor ** zIndexOptions.opacityRate,
|
|
4261
|
+
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;
|
|
4164
4262
|
this.#cachedOpacityData.fillOpacity = opacity * fillOpacity * zOpacityFactor;
|
|
4165
4263
|
this.#cachedOpacityData.opacity = opacity * zOpacityFactor;
|
|
4166
4264
|
this.#cachedOpacityData.strokeOpacity = opacity * strokeOpacity * zOpacityFactor;
|
|
@@ -4173,7 +4271,7 @@
|
|
|
4173
4271
|
return this.#cachedPosition;
|
|
4174
4272
|
}
|
|
4175
4273
|
getRadius() {
|
|
4176
|
-
return this.
|
|
4274
|
+
return this.#applyModifiers(this.size.value, m => m.radius);
|
|
4177
4275
|
}
|
|
4178
4276
|
getRotateData() {
|
|
4179
4277
|
const angle = this.getAngle();
|
|
@@ -4182,7 +4280,7 @@
|
|
|
4182
4280
|
return this.#cachedRotateData;
|
|
4183
4281
|
}
|
|
4184
4282
|
getStrokeColor() {
|
|
4185
|
-
return this.#getRollColor(this
|
|
4283
|
+
return this.#getRollColor(this.#applyModifiers(getHslFromAnimation(this.strokeColor), m => m.strokeColor));
|
|
4186
4284
|
}
|
|
4187
4285
|
getTransformData(externalTransform) {
|
|
4188
4286
|
const rotateData = this.getRotateData(), rotating = this.isRotating;
|
|
@@ -4202,13 +4300,6 @@
|
|
|
4202
4300
|
this.options = resolveParticleOptions(this, container, this.#pluginManager, overrideOptions);
|
|
4203
4301
|
container.retina.initParticle(this);
|
|
4204
4302
|
runUpdaterPreInit(container.particleUpdaters, this);
|
|
4205
|
-
this.bubble = {
|
|
4206
|
-
inRange: false,
|
|
4207
|
-
};
|
|
4208
|
-
this.slow = {
|
|
4209
|
-
inRange: false,
|
|
4210
|
-
factor: 1,
|
|
4211
|
-
};
|
|
4212
4303
|
this.#initPosition(position);
|
|
4213
4304
|
this.initialVelocity = this.#calculateVelocity();
|
|
4214
4305
|
this.velocity = this.initialVelocity.copy();
|
|
@@ -4248,11 +4339,29 @@
|
|
|
4248
4339
|
isVisible() {
|
|
4249
4340
|
return !this.destroyed && !this.spawning && this.isInsideCanvas();
|
|
4250
4341
|
}
|
|
4342
|
+
removeModifier(id) {
|
|
4343
|
+
const idx = this.#modifiers.findIndex(m => m.id === id);
|
|
4344
|
+
if (idx >= defaultAngle) {
|
|
4345
|
+
this.#modifiers.splice(idx, identity);
|
|
4346
|
+
}
|
|
4347
|
+
}
|
|
4251
4348
|
reset() {
|
|
4252
4349
|
for (const updater of this.#container.particleUpdaters) {
|
|
4253
4350
|
updater.reset?.(this);
|
|
4254
4351
|
}
|
|
4255
4352
|
}
|
|
4353
|
+
#applyModifiers(base, getter) {
|
|
4354
|
+
let value = base;
|
|
4355
|
+
for (const mod of this.#modifiers) {
|
|
4356
|
+
if (mod.enabled) {
|
|
4357
|
+
const override = getter(mod);
|
|
4358
|
+
if (override !== undefined) {
|
|
4359
|
+
value = override;
|
|
4360
|
+
}
|
|
4361
|
+
}
|
|
4362
|
+
}
|
|
4363
|
+
return value;
|
|
4364
|
+
}
|
|
4256
4365
|
#calcPosition(position, zIndex) {
|
|
4257
4366
|
let tryCount = defaultRetryCount, posVec = position ? Vector3d.create(position.x, position.y, zIndex) : undefined;
|
|
4258
4367
|
const container = this.#container, plugins = container.particlePositionPlugins, outModes = this.options.move.outModes, radius = this.getRadius(), canvasSize = container.canvas.size;
|
|
@@ -5354,6 +5463,7 @@
|
|
|
5354
5463
|
});
|
|
5355
5464
|
|
|
5356
5465
|
class BlendPluginInstance {
|
|
5466
|
+
layer = DrawLayer.CanvasSetup;
|
|
5357
5467
|
#container;
|
|
5358
5468
|
#defaultCompositeValue;
|
|
5359
5469
|
constructor(container) {
|
|
@@ -5499,7 +5609,8 @@
|
|
|
5499
5609
|
particle.lastPathTime -= pathDelay;
|
|
5500
5610
|
}
|
|
5501
5611
|
function getProximitySpeedFactor(particle) {
|
|
5502
|
-
|
|
5612
|
+
const mod = particle.getModifier("slow");
|
|
5613
|
+
return mod?.enabled ? (mod.speedFactor ?? identity) : identity;
|
|
5503
5614
|
}
|
|
5504
5615
|
function initSpin(container, particle) {
|
|
5505
5616
|
const options = particle.options, spinOptions = options.move.spin;
|