@tsparticles/engine 3.3.0 → 3.5.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.
- package/README.md +0 -4
- package/browser/Core/Canvas.js +27 -22
- package/browser/Core/Container.js +57 -44
- package/browser/Core/Engine.js +82 -74
- package/browser/Core/Particle.js +29 -15
- package/browser/Core/Particles.js +23 -24
- package/browser/Core/Utils/EventListeners.js +18 -17
- package/browser/Core/Utils/ExternalInteractorBase.js +2 -1
- package/browser/Core/Utils/InteractionManager.js +3 -2
- package/browser/Core/Utils/ParticlesInteractorBase.js +2 -1
- package/browser/Core/Utils/QuadTree.js +1 -1
- package/browser/Core/Utils/Ranges.js +5 -4
- package/browser/Enums/AnimationStatus.js +5 -1
- package/browser/Enums/Directions/MoveDirection.js +14 -1
- package/browser/Enums/Directions/OutModeDirection.js +7 -1
- package/browser/Enums/Directions/RotateDirection.js +6 -1
- package/browser/Enums/InteractivityDetect.js +6 -1
- package/browser/Enums/Modes/AnimationMode.js +7 -1
- package/browser/Enums/Modes/CollisionMode.js +6 -1
- package/browser/Enums/Modes/LimitMode.js +5 -1
- package/browser/Enums/Modes/OutMode.js +8 -1
- package/browser/Enums/Modes/PixelMode.js +5 -1
- package/browser/Enums/Modes/ResponsiveMode.js +5 -1
- package/browser/Enums/Modes/ThemeMode.js +6 -1
- package/browser/Enums/Types/AlterType.js +5 -1
- package/browser/Enums/Types/DestroyType.js +6 -1
- package/browser/Enums/Types/DivType.js +5 -1
- package/browser/Enums/Types/EasingType.js +30 -1
- package/browser/Enums/Types/EventType.js +15 -1
- package/browser/Enums/Types/GradientType.js +6 -1
- package/browser/Enums/Types/InteractorType.js +5 -1
- package/browser/Enums/Types/ParticleOutType.js +6 -1
- package/browser/Enums/Types/StartValueType.js +6 -1
- package/browser/Options/Classes/AnimationOptions.js +4 -2
- package/browser/Options/Classes/Interactivity/Events/DivEvent.js +2 -1
- package/browser/Options/Classes/Interactivity/Events/Events.js +1 -1
- package/browser/Options/Classes/Interactivity/Interactivity.js +2 -1
- package/browser/Options/Classes/ManualParticle.js +2 -1
- package/browser/Options/Classes/Options.js +14 -12
- package/browser/Options/Classes/Particles/Collisions/Collisions.js +2 -1
- package/browser/Options/Classes/Particles/Move/Move.js +2 -1
- package/browser/Options/Classes/Particles/Move/MoveCenter.js +2 -1
- package/browser/Options/Classes/Particles/Move/OutModes.js +2 -1
- package/browser/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -1
- package/browser/Options/Classes/Particles/Opacity/OpacityAnimation.js +2 -1
- package/browser/Options/Classes/Particles/ParticlesOptions.js +1 -1
- package/browser/Options/Classes/Particles/Size/SizeAnimation.js +2 -1
- package/browser/Options/Classes/Responsive.js +5 -4
- package/browser/Options/Classes/Theme/ThemeDefault.js +2 -1
- package/browser/Types/RangeType.js +5 -1
- package/browser/Utils/CanvasUtils.js +13 -7
- package/browser/Utils/ColorUtils.js +17 -9
- package/browser/Utils/EventDispatcher.js +1 -1
- package/browser/Utils/HslColorManager.js +11 -4
- package/browser/Utils/NumberUtils.js +28 -14
- package/browser/Utils/RgbColorManager.js +11 -4
- package/browser/Utils/Utils.js +37 -31
- package/cjs/Core/Canvas.js +27 -22
- package/cjs/Core/Container.js +57 -44
- package/cjs/Core/Engine.js +82 -74
- package/cjs/Core/Particle.js +29 -15
- package/cjs/Core/Particles.js +23 -24
- package/cjs/Core/Utils/EventListeners.js +18 -17
- package/cjs/Core/Utils/ExternalInteractorBase.js +2 -1
- package/cjs/Core/Utils/InteractionManager.js +3 -2
- package/cjs/Core/Utils/ParticlesInteractorBase.js +2 -1
- package/cjs/Core/Utils/QuadTree.js +1 -1
- package/cjs/Core/Utils/Ranges.js +5 -4
- package/cjs/Enums/AnimationStatus.js +6 -0
- package/cjs/Enums/Directions/MoveDirection.js +15 -0
- package/cjs/Enums/Directions/OutModeDirection.js +8 -0
- package/cjs/Enums/Directions/RotateDirection.js +7 -0
- package/cjs/Enums/InteractivityDetect.js +7 -0
- package/cjs/Enums/Modes/AnimationMode.js +8 -0
- package/cjs/Enums/Modes/CollisionMode.js +7 -0
- package/cjs/Enums/Modes/LimitMode.js +6 -0
- package/cjs/Enums/Modes/OutMode.js +9 -0
- package/cjs/Enums/Modes/PixelMode.js +6 -0
- package/cjs/Enums/Modes/ResponsiveMode.js +6 -0
- package/cjs/Enums/Modes/ThemeMode.js +7 -0
- package/cjs/Enums/Types/AlterType.js +6 -0
- package/cjs/Enums/Types/DestroyType.js +7 -0
- package/cjs/Enums/Types/DivType.js +6 -0
- package/cjs/Enums/Types/EasingType.js +31 -0
- package/cjs/Enums/Types/EventType.js +16 -0
- package/cjs/Enums/Types/GradientType.js +7 -0
- package/cjs/Enums/Types/InteractorType.js +6 -0
- package/cjs/Enums/Types/ParticleOutType.js +7 -0
- package/cjs/Enums/Types/StartValueType.js +7 -0
- package/cjs/Options/Classes/AnimationOptions.js +4 -2
- package/cjs/Options/Classes/Interactivity/Events/DivEvent.js +2 -1
- package/cjs/Options/Classes/Interactivity/Events/Events.js +1 -1
- package/cjs/Options/Classes/Interactivity/Interactivity.js +2 -1
- package/cjs/Options/Classes/ManualParticle.js +2 -1
- package/cjs/Options/Classes/Options.js +14 -12
- package/cjs/Options/Classes/Particles/Collisions/Collisions.js +2 -1
- package/cjs/Options/Classes/Particles/Move/Move.js +2 -1
- package/cjs/Options/Classes/Particles/Move/MoveCenter.js +2 -1
- package/cjs/Options/Classes/Particles/Move/OutModes.js +2 -1
- package/cjs/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -1
- package/cjs/Options/Classes/Particles/Opacity/OpacityAnimation.js +2 -1
- package/cjs/Options/Classes/Particles/ParticlesOptions.js +1 -1
- package/cjs/Options/Classes/Particles/Size/SizeAnimation.js +2 -1
- package/cjs/Options/Classes/Responsive.js +5 -4
- package/cjs/Options/Classes/Theme/ThemeDefault.js +2 -1
- package/cjs/Types/RangeType.js +6 -0
- package/cjs/Utils/CanvasUtils.js +24 -19
- package/cjs/Utils/ColorUtils.js +37 -30
- package/cjs/Utils/EventDispatcher.js +1 -1
- package/cjs/Utils/HslColorManager.js +11 -4
- package/cjs/Utils/NumberUtils.js +54 -38
- package/cjs/Utils/OptionsUtils.js +2 -3
- package/cjs/Utils/RgbColorManager.js +11 -4
- package/cjs/Utils/TypeUtils.js +6 -7
- package/cjs/Utils/Utils.js +66 -61
- package/cjs/init.js +1 -2
- package/esm/Core/Canvas.js +27 -22
- package/esm/Core/Container.js +57 -44
- package/esm/Core/Engine.js +82 -74
- package/esm/Core/Particle.js +29 -15
- package/esm/Core/Particles.js +23 -24
- package/esm/Core/Utils/EventListeners.js +18 -17
- package/esm/Core/Utils/ExternalInteractorBase.js +2 -1
- package/esm/Core/Utils/InteractionManager.js +3 -2
- package/esm/Core/Utils/ParticlesInteractorBase.js +2 -1
- package/esm/Core/Utils/QuadTree.js +1 -1
- package/esm/Core/Utils/Ranges.js +5 -4
- package/esm/Enums/AnimationStatus.js +5 -1
- package/esm/Enums/Directions/MoveDirection.js +14 -1
- package/esm/Enums/Directions/OutModeDirection.js +7 -1
- package/esm/Enums/Directions/RotateDirection.js +6 -1
- package/esm/Enums/InteractivityDetect.js +6 -1
- package/esm/Enums/Modes/AnimationMode.js +7 -1
- package/esm/Enums/Modes/CollisionMode.js +6 -1
- package/esm/Enums/Modes/LimitMode.js +5 -1
- package/esm/Enums/Modes/OutMode.js +8 -1
- package/esm/Enums/Modes/PixelMode.js +5 -1
- package/esm/Enums/Modes/ResponsiveMode.js +5 -1
- package/esm/Enums/Modes/ThemeMode.js +6 -1
- package/esm/Enums/Types/AlterType.js +5 -1
- package/esm/Enums/Types/DestroyType.js +6 -1
- package/esm/Enums/Types/DivType.js +5 -1
- package/esm/Enums/Types/EasingType.js +30 -1
- package/esm/Enums/Types/EventType.js +15 -1
- package/esm/Enums/Types/GradientType.js +6 -1
- package/esm/Enums/Types/InteractorType.js +5 -1
- package/esm/Enums/Types/ParticleOutType.js +6 -1
- package/esm/Enums/Types/StartValueType.js +6 -1
- package/esm/Options/Classes/AnimationOptions.js +4 -2
- package/esm/Options/Classes/Interactivity/Events/DivEvent.js +2 -1
- package/esm/Options/Classes/Interactivity/Events/Events.js +1 -1
- package/esm/Options/Classes/Interactivity/Interactivity.js +2 -1
- package/esm/Options/Classes/ManualParticle.js +2 -1
- package/esm/Options/Classes/Options.js +14 -12
- package/esm/Options/Classes/Particles/Collisions/Collisions.js +2 -1
- package/esm/Options/Classes/Particles/Move/Move.js +2 -1
- package/esm/Options/Classes/Particles/Move/MoveCenter.js +2 -1
- package/esm/Options/Classes/Particles/Move/OutModes.js +2 -1
- package/esm/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -1
- package/esm/Options/Classes/Particles/Opacity/OpacityAnimation.js +2 -1
- package/esm/Options/Classes/Particles/ParticlesOptions.js +1 -1
- package/esm/Options/Classes/Particles/Size/SizeAnimation.js +2 -1
- package/esm/Options/Classes/Responsive.js +5 -4
- package/esm/Options/Classes/Theme/ThemeDefault.js +2 -1
- package/esm/Types/RangeType.js +5 -1
- package/esm/Utils/CanvasUtils.js +13 -7
- package/esm/Utils/ColorUtils.js +17 -9
- package/esm/Utils/EventDispatcher.js +1 -1
- package/esm/Utils/HslColorManager.js +11 -4
- package/esm/Utils/NumberUtils.js +28 -14
- package/esm/Utils/RgbColorManager.js +11 -4
- package/esm/Utils/Utils.js +37 -31
- package/package.json +1 -1
- package/report.html +1 -1
- package/tsparticles.engine.js +327 -225
- package/tsparticles.engine.min.js +1 -1
- package/tsparticles.engine.min.js.LICENSE.txt +1 -1
- package/types/Core/Container.d.ts +4 -2
- package/types/Core/Engine.d.ts +6 -5
- package/types/Core/Interfaces/IPlugin.d.ts +3 -4
- package/types/Core/Interfaces/IShapeDrawer.d.ts +1 -0
- package/types/Core/Particle.d.ts +1 -0
- package/types/Enums/AnimationStatus.d.ts +1 -1
- package/types/Enums/Directions/MoveDirection.d.ts +1 -1
- package/types/Enums/Directions/OutModeDirection.d.ts +1 -1
- package/types/Enums/Directions/RotateDirection.d.ts +1 -1
- package/types/Enums/InteractivityDetect.d.ts +1 -1
- package/types/Enums/Modes/AnimationMode.d.ts +1 -1
- package/types/Enums/Modes/CollisionMode.d.ts +1 -1
- package/types/Enums/Modes/LimitMode.d.ts +1 -1
- package/types/Enums/Modes/OutMode.d.ts +1 -1
- package/types/Enums/Modes/PixelMode.d.ts +1 -1
- package/types/Enums/Modes/ResponsiveMode.d.ts +1 -1
- package/types/Enums/Modes/ThemeMode.d.ts +1 -1
- package/types/Enums/Types/AlterType.d.ts +1 -1
- package/types/Enums/Types/DestroyType.d.ts +1 -1
- package/types/Enums/Types/DivType.d.ts +1 -1
- package/types/Enums/Types/EasingType.d.ts +1 -1
- package/types/Enums/Types/EventType.d.ts +1 -1
- package/types/Enums/Types/GradientType.d.ts +1 -1
- package/types/Enums/Types/InteractorType.d.ts +1 -1
- package/types/Enums/Types/ParticleOutType.d.ts +1 -1
- package/types/Enums/Types/StartValueType.d.ts +1 -1
- package/types/Options/Classes/Options.d.ts +2 -1
- package/types/Options/Classes/Responsive.d.ts +2 -2
- package/types/Options/Classes/Theme/Theme.d.ts +2 -2
- package/types/Options/Interfaces/IResponsive.d.ts +2 -3
- package/types/Options/Interfaces/Theme/ITheme.d.ts +2 -3
- package/types/Types/RangeType.d.ts +1 -1
- package/types/Utils/NumberUtils.d.ts +3 -0
- package/umd/Core/Canvas.js +27 -22
- package/umd/Core/Container.js +58 -45
- package/umd/Core/Engine.js +83 -99
- package/umd/Core/Particle.js +30 -16
- package/umd/Core/Particles.js +24 -25
- package/umd/Core/Utils/EventListeners.js +19 -18
- package/umd/Core/Utils/ExternalInteractorBase.js +3 -2
- package/umd/Core/Utils/InteractionManager.js +4 -3
- package/umd/Core/Utils/ParticlesInteractorBase.js +3 -2
- package/umd/Core/Utils/QuadTree.js +1 -1
- package/umd/Core/Utils/Ranges.js +6 -5
- package/umd/Enums/AnimationStatus.js +6 -0
- package/umd/Enums/Directions/MoveDirection.js +15 -0
- package/umd/Enums/Directions/OutModeDirection.js +8 -0
- package/umd/Enums/Directions/RotateDirection.js +7 -0
- package/umd/Enums/InteractivityDetect.js +7 -0
- package/umd/Enums/Modes/AnimationMode.js +8 -0
- package/umd/Enums/Modes/CollisionMode.js +7 -0
- package/umd/Enums/Modes/LimitMode.js +6 -0
- package/umd/Enums/Modes/OutMode.js +9 -0
- package/umd/Enums/Modes/PixelMode.js +6 -0
- package/umd/Enums/Modes/ResponsiveMode.js +6 -0
- package/umd/Enums/Modes/ThemeMode.js +7 -0
- package/umd/Enums/Types/AlterType.js +6 -0
- package/umd/Enums/Types/DestroyType.js +7 -0
- package/umd/Enums/Types/DivType.js +6 -0
- package/umd/Enums/Types/EasingType.js +31 -0
- package/umd/Enums/Types/EventType.js +16 -0
- package/umd/Enums/Types/GradientType.js +7 -0
- package/umd/Enums/Types/InteractorType.js +6 -0
- package/umd/Enums/Types/ParticleOutType.js +7 -0
- package/umd/Enums/Types/StartValueType.js +7 -0
- package/umd/Options/Classes/AnimationOptions.js +5 -3
- package/umd/Options/Classes/Interactivity/Events/DivEvent.js +3 -2
- package/umd/Options/Classes/Interactivity/Events/Events.js +1 -1
- package/umd/Options/Classes/Interactivity/Interactivity.js +3 -2
- package/umd/Options/Classes/ManualParticle.js +3 -2
- package/umd/Options/Classes/Options.js +15 -13
- package/umd/Options/Classes/Particles/Collisions/Collisions.js +3 -2
- package/umd/Options/Classes/Particles/Move/Move.js +3 -2
- package/umd/Options/Classes/Particles/Move/MoveCenter.js +3 -2
- package/umd/Options/Classes/Particles/Move/OutModes.js +3 -2
- package/umd/Options/Classes/Particles/Number/ParticlesNumberLimit.js +3 -2
- package/umd/Options/Classes/Particles/Opacity/OpacityAnimation.js +3 -2
- package/umd/Options/Classes/Particles/ParticlesOptions.js +1 -1
- package/umd/Options/Classes/Particles/Size/SizeAnimation.js +3 -2
- package/umd/Options/Classes/Responsive.js +6 -5
- package/umd/Options/Classes/Theme/ThemeDefault.js +3 -2
- package/umd/Types/RangeType.js +6 -0
- package/umd/Utils/CanvasUtils.js +25 -20
- package/umd/Utils/ColorUtils.js +38 -31
- package/umd/Utils/EventDispatcher.js +1 -1
- package/umd/Utils/HslColorManager.js +11 -4
- package/umd/Utils/NumberUtils.js +55 -39
- package/umd/Utils/OptionsUtils.js +2 -3
- package/umd/Utils/RgbColorManager.js +11 -4
- package/umd/Utils/TypeUtils.js +6 -7
- package/umd/Utils/Utils.js +67 -62
- package/umd/init.js +1 -2
- package/174.min.js +0 -2
- package/174.min.js.LICENSE.txt +0 -1
- package/dist_browser_Core_Container_js.js +0 -102
package/umd/Core/Engine.js
CHANGED
|
@@ -1,47 +1,25 @@
|
|
|
1
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
2
|
-
if (k2 === undefined) k2 = k;
|
|
3
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
4
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
5
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
6
|
-
}
|
|
7
|
-
Object.defineProperty(o, k2, desc);
|
|
8
|
-
}) : (function(o, m, k, k2) {
|
|
9
|
-
if (k2 === undefined) k2 = k;
|
|
10
|
-
o[k2] = m[k];
|
|
11
|
-
}));
|
|
12
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
13
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
14
|
-
}) : function(o, v) {
|
|
15
|
-
o["default"] = v;
|
|
16
|
-
});
|
|
17
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
18
|
-
if (mod && mod.__esModule) return mod;
|
|
19
|
-
var result = {};
|
|
20
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
21
|
-
__setModuleDefault(result, mod);
|
|
22
|
-
return result;
|
|
23
|
-
};
|
|
24
1
|
(function (factory) {
|
|
25
2
|
if (typeof module === "object" && typeof module.exports === "object") {
|
|
26
3
|
var v = factory(require, exports);
|
|
27
4
|
if (v !== undefined) module.exports = v;
|
|
28
5
|
}
|
|
29
6
|
else if (typeof define === "function" && define.amd) {
|
|
30
|
-
define(["require", "exports", "./Utils/Constants.js", "../Utils/Utils.js", "../Utils/EventDispatcher.js", "../Utils/NumberUtils.js"], factory);
|
|
7
|
+
define(["require", "exports", "./Utils/Constants.js", "../Utils/Utils.js", "./Container.js", "../Utils/EventDispatcher.js", "../Enums/Types/EventType.js", "../Utils/NumberUtils.js"], factory);
|
|
31
8
|
}
|
|
32
9
|
})(function (require, exports) {
|
|
33
10
|
"use strict";
|
|
34
|
-
var __syncRequire = typeof module === "object" && typeof module.exports === "object";
|
|
35
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
12
|
exports.Engine = void 0;
|
|
37
13
|
const Constants_js_1 = require("./Utils/Constants.js");
|
|
38
14
|
const Utils_js_1 = require("../Utils/Utils.js");
|
|
15
|
+
const Container_js_1 = require("./Container.js");
|
|
39
16
|
const EventDispatcher_js_1 = require("../Utils/EventDispatcher.js");
|
|
17
|
+
const EventType_js_1 = require("../Enums/Types/EventType.js");
|
|
40
18
|
const NumberUtils_js_1 = require("../Utils/NumberUtils.js");
|
|
41
19
|
async function getItemsFromInitializer(container, map, initializers, force = false) {
|
|
42
20
|
let res = map.get(container);
|
|
43
21
|
if (!res || force) {
|
|
44
|
-
res = await Promise.all([...initializers.values()].map(
|
|
22
|
+
res = await Promise.all([...initializers.values()].map(t => t(container)));
|
|
45
23
|
map.set(container, res);
|
|
46
24
|
}
|
|
47
25
|
return res;
|
|
@@ -58,6 +36,46 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
58
36
|
(0, Utils_js_1.getLogger)().error(`${Constants_js_1.errorPrefix} ${response.status} while retrieving config file`);
|
|
59
37
|
return data.fallback;
|
|
60
38
|
}
|
|
39
|
+
const generatedTrue = "true", generatedFalse = "false", canvasTag = "canvas", getCanvasFromContainer = (domContainer) => {
|
|
40
|
+
let canvasEl;
|
|
41
|
+
if (domContainer instanceof HTMLCanvasElement || domContainer.tagName.toLowerCase() === canvasTag) {
|
|
42
|
+
canvasEl = domContainer;
|
|
43
|
+
if (!canvasEl.dataset[Constants_js_1.generatedAttribute]) {
|
|
44
|
+
canvasEl.dataset[Constants_js_1.generatedAttribute] = generatedFalse;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const existingCanvases = domContainer.getElementsByTagName(canvasTag);
|
|
49
|
+
if (existingCanvases.length) {
|
|
50
|
+
const firstIndex = 0;
|
|
51
|
+
canvasEl = existingCanvases[firstIndex];
|
|
52
|
+
canvasEl.dataset[Constants_js_1.generatedAttribute] = generatedFalse;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
canvasEl = document.createElement(canvasTag);
|
|
56
|
+
canvasEl.dataset[Constants_js_1.generatedAttribute] = generatedTrue;
|
|
57
|
+
domContainer.appendChild(canvasEl);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const fullPercent = "100%";
|
|
61
|
+
if (!canvasEl.style.width) {
|
|
62
|
+
canvasEl.style.width = fullPercent;
|
|
63
|
+
}
|
|
64
|
+
if (!canvasEl.style.height) {
|
|
65
|
+
canvasEl.style.height = fullPercent;
|
|
66
|
+
}
|
|
67
|
+
return canvasEl;
|
|
68
|
+
}, getDomContainer = (id, source) => {
|
|
69
|
+
let domContainer = source ?? document.getElementById(id);
|
|
70
|
+
if (domContainer) {
|
|
71
|
+
return domContainer;
|
|
72
|
+
}
|
|
73
|
+
domContainer = document.createElement("div");
|
|
74
|
+
domContainer.id = id;
|
|
75
|
+
domContainer.dataset[Constants_js_1.generatedAttribute] = generatedTrue;
|
|
76
|
+
document.body.append(domContainer);
|
|
77
|
+
return domContainer;
|
|
78
|
+
};
|
|
61
79
|
class Engine {
|
|
62
80
|
constructor() {
|
|
63
81
|
this._configs = new Map();
|
|
@@ -85,16 +103,19 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
85
103
|
}
|
|
86
104
|
return res;
|
|
87
105
|
}
|
|
106
|
+
get items() {
|
|
107
|
+
return this._domArray;
|
|
108
|
+
}
|
|
88
109
|
get version() {
|
|
89
|
-
return "3.
|
|
110
|
+
return "3.5.0";
|
|
90
111
|
}
|
|
91
112
|
addConfig(config) {
|
|
92
113
|
const key = config.key ?? config.name ?? "default";
|
|
93
114
|
this._configs.set(key, config);
|
|
94
|
-
this._eventDispatcher.dispatchEvent(
|
|
115
|
+
this._eventDispatcher.dispatchEvent(EventType_js_1.EventType.configAdded, { data: { name: key, config } });
|
|
95
116
|
}
|
|
96
117
|
async addEffect(effect, drawer, refresh = true) {
|
|
97
|
-
(0, Utils_js_1.executeOnSingleOrMultiple)(effect,
|
|
118
|
+
(0, Utils_js_1.executeOnSingleOrMultiple)(effect, type => {
|
|
98
119
|
if (!this.getEffectDrawer(type)) {
|
|
99
120
|
this.effectDrawers.set(type, drawer);
|
|
100
121
|
}
|
|
@@ -134,12 +155,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
134
155
|
}
|
|
135
156
|
await this.refresh(refresh);
|
|
136
157
|
}
|
|
137
|
-
async addShape(
|
|
138
|
-
(
|
|
139
|
-
if (
|
|
140
|
-
|
|
158
|
+
async addShape(drawer, refresh = true) {
|
|
159
|
+
for (const validType of drawer.validTypes) {
|
|
160
|
+
if (this.getShapeDrawer(validType)) {
|
|
161
|
+
continue;
|
|
141
162
|
}
|
|
142
|
-
|
|
163
|
+
this.shapeDrawers.set(validType, drawer);
|
|
164
|
+
}
|
|
143
165
|
await this.refresh(refresh);
|
|
144
166
|
}
|
|
145
167
|
clearPlugins(container) {
|
|
@@ -151,16 +173,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
151
173
|
this._eventDispatcher.dispatchEvent(type, args);
|
|
152
174
|
}
|
|
153
175
|
dom() {
|
|
154
|
-
return this.
|
|
176
|
+
return this.items;
|
|
155
177
|
}
|
|
156
178
|
domItem(index) {
|
|
157
|
-
|
|
158
|
-
if (!item || item.destroyed) {
|
|
159
|
-
const deleteCount = 1;
|
|
160
|
-
dom.splice(index, deleteCount);
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
return item;
|
|
179
|
+
return this.item(index);
|
|
164
180
|
}
|
|
165
181
|
async getAvailablePlugins(container) {
|
|
166
182
|
const res = new Map();
|
|
@@ -175,16 +191,16 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
175
191
|
return this.effectDrawers.get(type);
|
|
176
192
|
}
|
|
177
193
|
async getInteractors(container, force = false) {
|
|
178
|
-
return
|
|
194
|
+
return getItemsFromInitializer(container, this.interactors, this._initializers.interactors, force);
|
|
179
195
|
}
|
|
180
196
|
async getMovers(container, force = false) {
|
|
181
|
-
return
|
|
197
|
+
return getItemsFromInitializer(container, this.movers, this._initializers.movers, force);
|
|
182
198
|
}
|
|
183
199
|
getPathGenerator(type) {
|
|
184
200
|
return this.pathGenerators.get(type);
|
|
185
201
|
}
|
|
186
202
|
getPlugin(plugin) {
|
|
187
|
-
return this.plugins.find(
|
|
203
|
+
return this.plugins.find(t => t.id === plugin);
|
|
188
204
|
}
|
|
189
205
|
getPreset(preset) {
|
|
190
206
|
return this.presets.get(preset);
|
|
@@ -199,7 +215,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
199
215
|
return this.shapeDrawers.keys();
|
|
200
216
|
}
|
|
201
217
|
async getUpdaters(container, force = false) {
|
|
202
|
-
return
|
|
218
|
+
return getItemsFromInitializer(container, this.updaters, this._initializers.updaters, force);
|
|
203
219
|
}
|
|
204
220
|
init() {
|
|
205
221
|
if (this._initialized) {
|
|
@@ -207,90 +223,58 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
207
223
|
}
|
|
208
224
|
this._initialized = true;
|
|
209
225
|
}
|
|
226
|
+
item(index) {
|
|
227
|
+
const { items } = this, item = items[index];
|
|
228
|
+
if (!item || item.destroyed) {
|
|
229
|
+
const deleteCount = 1;
|
|
230
|
+
items.splice(index, deleteCount);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
return item;
|
|
234
|
+
}
|
|
210
235
|
async load(params) {
|
|
211
236
|
const randomFactor = 10000, id = params.id ?? params.element?.id ?? `tsparticles${Math.floor((0, NumberUtils_js_1.getRandom)() * randomFactor)}`, { index, url } = params, options = url ? await getDataFromUrl({ fallback: params.options, url, index }) : params.options;
|
|
212
|
-
|
|
213
|
-
if (!domContainer) {
|
|
214
|
-
domContainer = document.createElement("div");
|
|
215
|
-
domContainer.id = id;
|
|
216
|
-
document.body.append(domContainer);
|
|
217
|
-
}
|
|
218
|
-
const currentOptions = (0, Utils_js_1.itemFromSingleOrMultiple)(options, index), dom = this.dom(), oldIndex = dom.findIndex((v) => v.id.description === id), minIndex = 0;
|
|
237
|
+
const currentOptions = (0, Utils_js_1.itemFromSingleOrMultiple)(options, index), { items } = this, oldIndex = items.findIndex(v => v.id.description === id), minIndex = 0, newItem = new Container_js_1.Container(this, id, currentOptions);
|
|
219
238
|
if (oldIndex >= minIndex) {
|
|
220
|
-
const old = this.
|
|
239
|
+
const old = this.item(oldIndex), one = 1, none = 0, deleteCount = old ? one : none;
|
|
221
240
|
if (old && !old.destroyed) {
|
|
222
|
-
old.destroy();
|
|
223
|
-
const deleteCount = 1;
|
|
224
|
-
dom.splice(oldIndex, deleteCount);
|
|
241
|
+
old.destroy(false);
|
|
225
242
|
}
|
|
226
|
-
|
|
227
|
-
let canvasEl;
|
|
228
|
-
if (domContainer.tagName.toLowerCase() === "canvas") {
|
|
229
|
-
canvasEl = domContainer;
|
|
230
|
-
canvasEl.dataset[Constants_js_1.generatedAttribute] = "false";
|
|
243
|
+
items.splice(oldIndex, deleteCount, newItem);
|
|
231
244
|
}
|
|
232
245
|
else {
|
|
233
|
-
|
|
234
|
-
if (existingCanvases.length) {
|
|
235
|
-
const firstIndex = 0;
|
|
236
|
-
canvasEl = existingCanvases[firstIndex];
|
|
237
|
-
canvasEl.dataset[Constants_js_1.generatedAttribute] = "false";
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
canvasEl = document.createElement("canvas");
|
|
241
|
-
canvasEl.dataset[Constants_js_1.generatedAttribute] = "true";
|
|
242
|
-
domContainer.appendChild(canvasEl);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
if (!canvasEl.style.width) {
|
|
246
|
-
canvasEl.style.width = "100%";
|
|
247
|
-
}
|
|
248
|
-
if (!canvasEl.style.height) {
|
|
249
|
-
canvasEl.style.height = "100%";
|
|
250
|
-
}
|
|
251
|
-
const { Container } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./Container.js"))) : new Promise((resolve_1, reject_1) => { require(["./Container.js"], resolve_1, reject_1); }).then(__importStar)), newItem = new Container(this, id, currentOptions);
|
|
252
|
-
if (oldIndex >= minIndex) {
|
|
253
|
-
const deleteCount = 0;
|
|
254
|
-
dom.splice(oldIndex, deleteCount, newItem);
|
|
255
|
-
}
|
|
256
|
-
else {
|
|
257
|
-
dom.push(newItem);
|
|
246
|
+
items.push(newItem);
|
|
258
247
|
}
|
|
248
|
+
const domContainer = getDomContainer(id, params.element), canvasEl = getCanvasFromContainer(domContainer);
|
|
259
249
|
newItem.canvas.loadCanvas(canvasEl);
|
|
260
250
|
await newItem.start();
|
|
261
251
|
return newItem;
|
|
262
252
|
}
|
|
263
253
|
loadOptions(options, sourceOptions) {
|
|
264
|
-
|
|
265
|
-
plugin.loadOptions(options, sourceOptions);
|
|
266
|
-
}
|
|
254
|
+
this.plugins.forEach(plugin => plugin.loadOptions?.(options, sourceOptions));
|
|
267
255
|
}
|
|
268
256
|
loadParticlesOptions(container, options, ...sourceOptions) {
|
|
269
257
|
const updaters = this.updaters.get(container);
|
|
270
258
|
if (!updaters) {
|
|
271
259
|
return;
|
|
272
260
|
}
|
|
273
|
-
|
|
274
|
-
updater.loadOptions?.(options, ...sourceOptions);
|
|
275
|
-
}
|
|
261
|
+
updaters.forEach(updater => updater.loadOptions?.(options, ...sourceOptions));
|
|
276
262
|
}
|
|
277
263
|
async refresh(refresh = true) {
|
|
278
264
|
if (!refresh) {
|
|
279
265
|
return;
|
|
280
266
|
}
|
|
281
|
-
await Promise.all(this.
|
|
267
|
+
await Promise.all(this.items.map(t => t.refresh()));
|
|
282
268
|
}
|
|
283
269
|
removeEventListener(type, listener) {
|
|
284
270
|
this._eventDispatcher.removeEventListener(type, listener);
|
|
285
271
|
}
|
|
286
272
|
setOnClickHandler(callback) {
|
|
287
|
-
const
|
|
288
|
-
if (!
|
|
273
|
+
const { items } = this;
|
|
274
|
+
if (!items.length) {
|
|
289
275
|
throw new Error(`${Constants_js_1.errorPrefix} can only set click handlers after calling tsParticles.load()`);
|
|
290
276
|
}
|
|
291
|
-
|
|
292
|
-
domItem.addClickHandler(callback);
|
|
293
|
-
}
|
|
277
|
+
items.forEach(item => item.addClickHandler(callback));
|
|
294
278
|
}
|
|
295
279
|
}
|
|
296
280
|
exports.Engine = Engine;
|
package/umd/Core/Particle.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
if (v !== undefined) module.exports = v;
|
|
5
5
|
}
|
|
6
6
|
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define(["require", "exports", "./Utils/Vectors.js", "../Utils/NumberUtils.js", "../Utils/Utils.js", "./Utils/Constants.js", "../Utils/ColorUtils.js", "../Options/Classes/Interactivity/Interactivity.js", "../Utils/CanvasUtils.js", "../Utils/OptionsUtils.js"], factory);
|
|
7
|
+
define(["require", "exports", "./Utils/Vectors.js", "../Utils/NumberUtils.js", "../Utils/Utils.js", "./Utils/Constants.js", "../Utils/ColorUtils.js", "../Enums/Types/EventType.js", "../Options/Classes/Interactivity/Interactivity.js", "../Enums/Directions/MoveDirection.js", "../Enums/Modes/OutMode.js", "../Enums/Types/ParticleOutType.js", "../Enums/Modes/PixelMode.js", "../Utils/CanvasUtils.js", "../Utils/OptionsUtils.js"], factory);
|
|
8
8
|
}
|
|
9
9
|
})(function (require, exports) {
|
|
10
10
|
"use strict";
|
|
@@ -15,10 +15,15 @@
|
|
|
15
15
|
const Utils_js_1 = require("../Utils/Utils.js");
|
|
16
16
|
const Constants_js_1 = require("./Utils/Constants.js");
|
|
17
17
|
const ColorUtils_js_1 = require("../Utils/ColorUtils.js");
|
|
18
|
+
const EventType_js_1 = require("../Enums/Types/EventType.js");
|
|
18
19
|
const Interactivity_js_1 = require("../Options/Classes/Interactivity/Interactivity.js");
|
|
20
|
+
const MoveDirection_js_1 = require("../Enums/Directions/MoveDirection.js");
|
|
21
|
+
const OutMode_js_1 = require("../Enums/Modes/OutMode.js");
|
|
22
|
+
const ParticleOutType_js_1 = require("../Enums/Types/ParticleOutType.js");
|
|
23
|
+
const PixelMode_js_1 = require("../Enums/Modes/PixelMode.js");
|
|
19
24
|
const CanvasUtils_js_1 = require("../Utils/CanvasUtils.js");
|
|
20
25
|
const OptionsUtils_js_1 = require("../Utils/OptionsUtils.js");
|
|
21
|
-
const defaultRetryCount = 0, double = 2, half = 0.5, squareExp = 2;
|
|
26
|
+
const defaultRetryCount = 0, double = 2, half = 0.5, squareExp = 2, randomString = "random";
|
|
22
27
|
function loadEffectData(effect, effectOptions, id, reduceDuplicates) {
|
|
23
28
|
const effectData = effectOptions.options[effect];
|
|
24
29
|
if (!effectData) {
|
|
@@ -67,7 +72,7 @@
|
|
|
67
72
|
}), pos = Vectors_js_1.Vector3d.create(exactPosition.x, exactPosition.y, zIndex), radius = this.getRadius(), outModes = this.options.move.outModes, fixHorizontal = (outMode) => {
|
|
68
73
|
fixOutMode({
|
|
69
74
|
outMode,
|
|
70
|
-
checkModes: [
|
|
75
|
+
checkModes: [OutMode_js_1.OutMode.bounce],
|
|
71
76
|
coord: pos.x,
|
|
72
77
|
maxCoord: container.canvas.size.width,
|
|
73
78
|
setCb: (value) => (pos.x += value),
|
|
@@ -76,7 +81,7 @@
|
|
|
76
81
|
}, fixVertical = (outMode) => {
|
|
77
82
|
fixOutMode({
|
|
78
83
|
outMode,
|
|
79
|
-
checkModes: [
|
|
84
|
+
checkModes: [OutMode_js_1.OutMode.bounce],
|
|
80
85
|
coord: pos.y,
|
|
81
86
|
maxCoord: container.canvas.size.height,
|
|
82
87
|
setCb: (value) => (pos.y += value),
|
|
@@ -95,7 +100,7 @@
|
|
|
95
100
|
};
|
|
96
101
|
this._calculateVelocity = () => {
|
|
97
102
|
const baseVelocity = (0, NumberUtils_js_1.getParticleBaseVelocity)(this.direction), res = baseVelocity.copy(), moveOptions = this.options.move;
|
|
98
|
-
if (moveOptions.direction ===
|
|
103
|
+
if (moveOptions.direction === MoveDirection_js_1.MoveDirection.inside || moveOptions.direction === MoveDirection_js_1.MoveDirection.outside) {
|
|
99
104
|
return res;
|
|
100
105
|
}
|
|
101
106
|
const rad = (0, NumberUtils_js_1.degToRad)((0, NumberUtils_js_1.getRangeValue)(moveOptions.angle.value)), radOffset = (0, NumberUtils_js_1.degToRad)((0, NumberUtils_js_1.getRangeValue)(moveOptions.angle.offset)), range = {
|
|
@@ -123,9 +128,9 @@
|
|
|
123
128
|
if (retries >= minRetries && tryCount > retries) {
|
|
124
129
|
throw new Error(`${Constants_js_1.errorPrefix} particle is overlapping and can't be placed`);
|
|
125
130
|
}
|
|
126
|
-
return !!this.container.particles.find(
|
|
131
|
+
return !!this.container.particles.find(particle => (0, NumberUtils_js_1.getDistance)(pos, particle.position) < radius + particle.getRadius());
|
|
127
132
|
};
|
|
128
|
-
this._getRollColor =
|
|
133
|
+
this._getRollColor = color => {
|
|
129
134
|
if (!color || !this.roll || (!this.backColor && !this.roll.alter)) {
|
|
130
135
|
return color;
|
|
131
136
|
}
|
|
@@ -141,7 +146,7 @@
|
|
|
141
146
|
}
|
|
142
147
|
return color;
|
|
143
148
|
};
|
|
144
|
-
this._initPosition =
|
|
149
|
+
this._initPosition = position => {
|
|
145
150
|
const container = this.container, zIndexValue = (0, NumberUtils_js_1.getRangeValue)(this.options.zIndex.value), minZ = 0;
|
|
146
151
|
this.position = this._calcPosition(container, position, (0, NumberUtils_js_1.clamp)(zIndexValue, minZ, container.zLayers));
|
|
147
152
|
this.initialPosition = this.position.copy();
|
|
@@ -149,15 +154,15 @@
|
|
|
149
154
|
this.moveCenter = {
|
|
150
155
|
...(0, Utils_js_1.getPosition)(this.options.move.center, canvasSize),
|
|
151
156
|
radius: this.options.move.center.radius ?? defaultRadius,
|
|
152
|
-
mode: this.options.move.center.mode ??
|
|
157
|
+
mode: this.options.move.center.mode ?? PixelMode_js_1.PixelMode.percent,
|
|
153
158
|
};
|
|
154
159
|
this.direction = (0, NumberUtils_js_1.getParticleDirectionAngle)(this.options.move.direction, this.position, this.moveCenter);
|
|
155
160
|
switch (this.options.move.direction) {
|
|
156
|
-
case
|
|
157
|
-
this.outType =
|
|
161
|
+
case MoveDirection_js_1.MoveDirection.inside:
|
|
162
|
+
this.outType = ParticleOutType_js_1.ParticleOutType.inside;
|
|
158
163
|
break;
|
|
159
|
-
case
|
|
160
|
-
this.outType =
|
|
164
|
+
case MoveDirection_js_1.MoveDirection.outside:
|
|
165
|
+
this.outType = ParticleOutType_js_1.ParticleOutType.outside;
|
|
161
166
|
break;
|
|
162
167
|
}
|
|
163
168
|
this.offset = Vectors_js_1.Vector.origin;
|
|
@@ -180,7 +185,7 @@
|
|
|
180
185
|
updater.particleDestroyed?.(this, override);
|
|
181
186
|
}
|
|
182
187
|
pathGenerator?.reset(this);
|
|
183
|
-
this._engine.dispatchEvent(
|
|
188
|
+
this._engine.dispatchEvent(EventType_js_1.EventType.particleDestroyed, {
|
|
184
189
|
container: this.container,
|
|
185
190
|
data: {
|
|
186
191
|
particle: this,
|
|
@@ -225,14 +230,15 @@
|
|
|
225
230
|
this.lastPathTime = 0;
|
|
226
231
|
this.destroyed = false;
|
|
227
232
|
this.unbreakable = false;
|
|
233
|
+
this.isRotating = false;
|
|
228
234
|
this.rotation = 0;
|
|
229
235
|
this.misplaced = false;
|
|
230
236
|
this.retina = {
|
|
231
237
|
maxDistance: {},
|
|
232
238
|
};
|
|
233
|
-
this.outType =
|
|
239
|
+
this.outType = ParticleOutType_js_1.ParticleOutType.normal;
|
|
234
240
|
this.ignoresResizeRatio = true;
|
|
235
|
-
const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = (0, OptionsUtils_js_1.loadParticlesOptions)(this._engine, container, mainOptions.particles), effectType = particlesOptions.effect.type, shapeType = particlesOptions.shape.type
|
|
241
|
+
const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = (0, OptionsUtils_js_1.loadParticlesOptions)(this._engine, container, mainOptions.particles), { reduceDuplicates } = particlesOptions, effectType = particlesOptions.effect.type, shapeType = particlesOptions.shape.type;
|
|
236
242
|
this.effect = (0, Utils_js_1.itemFromSingleOrMultiple)(effectType, this.id, reduceDuplicates);
|
|
237
243
|
this.shape = (0, Utils_js_1.itemFromSingleOrMultiple)(shapeType, this.id, reduceDuplicates);
|
|
238
244
|
const effectOptions = particlesOptions.effect, shapeOptions = particlesOptions.shape;
|
|
@@ -252,6 +258,14 @@
|
|
|
252
258
|
}
|
|
253
259
|
}
|
|
254
260
|
}
|
|
261
|
+
if (this.effect === randomString) {
|
|
262
|
+
const availableEffects = [...this.container.effectDrawers.keys()];
|
|
263
|
+
this.effect = availableEffects[Math.floor(Math.random() * availableEffects.length)];
|
|
264
|
+
}
|
|
265
|
+
if (this.shape === randomString) {
|
|
266
|
+
const availableShapes = [...this.container.shapeDrawers.keys()];
|
|
267
|
+
this.shape = availableShapes[Math.floor(Math.random() * availableShapes.length)];
|
|
268
|
+
}
|
|
255
269
|
this.effectData = loadEffectData(this.effect, effectOptions, this.id, reduceDuplicates);
|
|
256
270
|
this.shapeData = loadShapeData(this.shape, shapeOptions, this.id, reduceDuplicates);
|
|
257
271
|
particlesOptions.load(overrideOptions);
|
package/umd/Core/Particles.js
CHANGED
|
@@ -4,14 +4,16 @@
|
|
|
4
4
|
if (v !== undefined) module.exports = v;
|
|
5
5
|
}
|
|
6
6
|
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define(["require", "exports", "../Utils/Utils.js", "./Utils/InteractionManager.js", "./Particle.js", "./Utils/Point.js", "./Utils/QuadTree.js", "./Utils/Ranges.js", "./Utils/Constants.js"], factory);
|
|
7
|
+
define(["require", "exports", "../Utils/Utils.js", "../Enums/Types/EventType.js", "./Utils/InteractionManager.js", "../Enums/Modes/LimitMode.js", "./Particle.js", "./Utils/Point.js", "./Utils/QuadTree.js", "./Utils/Ranges.js", "./Utils/Constants.js"], factory);
|
|
8
8
|
}
|
|
9
9
|
})(function (require, exports) {
|
|
10
10
|
"use strict";
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.Particles = void 0;
|
|
13
13
|
const Utils_js_1 = require("../Utils/Utils.js");
|
|
14
|
+
const EventType_js_1 = require("../Enums/Types/EventType.js");
|
|
14
15
|
const InteractionManager_js_1 = require("./Utils/InteractionManager.js");
|
|
16
|
+
const LimitMode_js_1 = require("../Enums/Modes/LimitMode.js");
|
|
15
17
|
const Particle_js_1 = require("./Particle.js");
|
|
16
18
|
const Point_js_1 = require("./Utils/Point.js");
|
|
17
19
|
const QuadTree_js_1 = require("./Utils/QuadTree.js");
|
|
@@ -25,9 +27,7 @@
|
|
|
25
27
|
class Particles {
|
|
26
28
|
constructor(engine, container) {
|
|
27
29
|
this._addToPool = (...particles) => {
|
|
28
|
-
|
|
29
|
-
this._pool.push(particle);
|
|
30
|
-
}
|
|
30
|
+
this._pool.push(...particles);
|
|
31
31
|
};
|
|
32
32
|
this._applyDensity = (options, manualCount, group) => {
|
|
33
33
|
const numberOptions = options.number;
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
}
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
|
-
const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, minLimit = 0, optParticlesLimit = numberOptions.limit.value > minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + manualCount, particlesCount = Math.min(this.count, this.filter(
|
|
43
|
+
const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, minLimit = 0, optParticlesLimit = numberOptions.limit.value > minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + manualCount, particlesCount = Math.min(this.count, this.filter(t => t.group === group).length);
|
|
44
44
|
if (group === undefined) {
|
|
45
45
|
this._limit = numberOptions.limit.value * densityFactor;
|
|
46
46
|
}
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
this.removeQuantity(particlesCount - particlesNumber, group);
|
|
55
55
|
}
|
|
56
56
|
};
|
|
57
|
-
this._initDensityFactor =
|
|
57
|
+
this._initDensityFactor = densityOptions => {
|
|
58
58
|
const container = this._container, defaultFactor = 1;
|
|
59
59
|
if (!container.canvas.element || !densityOptions.enable) {
|
|
60
60
|
return defaultFactor;
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
this._array.push(particle);
|
|
80
80
|
this._zArray.push(particle);
|
|
81
81
|
this._nextId++;
|
|
82
|
-
this._engine.dispatchEvent(
|
|
82
|
+
this._engine.dispatchEvent(EventType_js_1.EventType.particleAdded, {
|
|
83
83
|
container: this._container,
|
|
84
84
|
data: {
|
|
85
85
|
particle,
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
this._array.splice(index, deleteCount);
|
|
101
101
|
this._zArray.splice(zIdx, deleteCount);
|
|
102
102
|
particle.destroy(override);
|
|
103
|
-
this._engine.dispatchEvent(
|
|
103
|
+
this._engine.dispatchEvent(EventType_js_1.EventType.particleRemoved, {
|
|
104
104
|
container: this._container,
|
|
105
105
|
data: {
|
|
106
106
|
particle,
|
|
@@ -131,23 +131,24 @@
|
|
|
131
131
|
}
|
|
132
132
|
addManualParticles() {
|
|
133
133
|
const container = this._container, options = container.actualOptions;
|
|
134
|
-
|
|
135
|
-
this.addParticle(particle.position ? (0, Utils_js_1.getPosition)(particle.position, container.canvas.size) : undefined, particle.options);
|
|
136
|
-
}
|
|
134
|
+
options.manualParticles.forEach(p => this.addParticle(p.position ? (0, Utils_js_1.getPosition)(p.position, container.canvas.size) : undefined, p.options));
|
|
137
135
|
}
|
|
138
136
|
addParticle(position, overrideOptions, group, initializer) {
|
|
139
|
-
const
|
|
137
|
+
const limitMode = this._container.actualOptions.particles.number.limit.mode, limit = group === undefined ? this._limit : this._groupLimits.get(group) ?? this._limit, currentCount = this.count, minLimit = 0;
|
|
140
138
|
if (limit > minLimit) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if (currentCount >= limit) {
|
|
149
|
-
return;
|
|
139
|
+
switch (limitMode) {
|
|
140
|
+
case LimitMode_js_1.LimitMode.delete: {
|
|
141
|
+
const countOffset = 1, minCount = 0, countToRemove = currentCount + countOffset - limit;
|
|
142
|
+
if (countToRemove > minCount) {
|
|
143
|
+
this.removeQuantity(countToRemove);
|
|
144
|
+
}
|
|
145
|
+
break;
|
|
150
146
|
}
|
|
147
|
+
case LimitMode_js_1.LimitMode.wait:
|
|
148
|
+
if (currentCount >= limit) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
break;
|
|
151
152
|
}
|
|
152
153
|
}
|
|
153
154
|
return this._pushParticle(position, overrideOptions, group, initializer);
|
|
@@ -193,9 +194,7 @@
|
|
|
193
194
|
await this.initPlugins();
|
|
194
195
|
let handled = false;
|
|
195
196
|
for (const [, plugin] of container.plugins) {
|
|
196
|
-
|
|
197
|
-
handled = plugin.particlesInitialization();
|
|
198
|
-
}
|
|
197
|
+
handled = plugin.particlesInitialization?.() ?? handled;
|
|
199
198
|
if (handled) {
|
|
200
199
|
break;
|
|
201
200
|
}
|
|
@@ -310,7 +309,7 @@
|
|
|
310
309
|
this._array = this.filter(checkDelete);
|
|
311
310
|
this._zArray = this._zArray.filter(checkDelete);
|
|
312
311
|
for (const particle of particlesToDelete) {
|
|
313
|
-
this._engine.dispatchEvent(
|
|
312
|
+
this._engine.dispatchEvent(EventType_js_1.EventType.particleRemoved, {
|
|
314
313
|
container: this._container,
|
|
315
314
|
data: {
|
|
316
315
|
particle,
|