@tsparticles/engine 3.0.2 → 3.1.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 +283 -163
- package/browser/Core/Canvas.js +19 -19
- package/browser/Core/Container.js +45 -34
- package/browser/Core/Engine.js +36 -20
- package/browser/Core/Particle.js +35 -36
- package/browser/Core/Particles.js +30 -24
- package/browser/Core/Retina.js +5 -4
- package/browser/Core/Utils/Circle.js +4 -3
- package/browser/Core/Utils/Constants.js +3 -0
- package/browser/Core/Utils/EventListeners.js +18 -15
- package/browser/Core/Utils/ExternalInteractorBase.js +1 -1
- package/browser/Core/Utils/InteractionManager.js +14 -6
- package/browser/Core/Utils/ParticlesInteractorBase.js +1 -1
- package/browser/Core/Utils/QuadTree.js +5 -3
- package/browser/Core/Utils/Vector.js +7 -2
- package/browser/Core/Utils/Vector3d.js +14 -9
- package/browser/Options/Classes/ManualParticle.js +3 -2
- package/browser/Options/Classes/Options.js +3 -0
- package/browser/Utils/CanvasUtils.js +36 -26
- package/browser/Utils/ColorUtils.js +124 -45
- package/browser/Utils/EventDispatcher.js +6 -5
- package/browser/Utils/HslColorManager.js +5 -5
- package/browser/Utils/NumberUtils.js +35 -23
- package/browser/Utils/RgbColorManager.js +5 -5
- package/browser/Utils/Utils.js +102 -19
- package/cjs/Core/Canvas.js +19 -19
- package/cjs/Core/Container.js +45 -34
- package/cjs/Core/Engine.js +36 -20
- package/cjs/Core/Particle.js +34 -35
- package/cjs/Core/Particles.js +30 -24
- package/cjs/Core/Retina.js +5 -4
- package/cjs/Core/Utils/Circle.js +4 -3
- package/cjs/Core/Utils/Constants.js +4 -1
- package/cjs/Core/Utils/EventListeners.js +17 -14
- package/cjs/Core/Utils/ExternalInteractorBase.js +1 -1
- package/cjs/Core/Utils/InteractionManager.js +14 -6
- package/cjs/Core/Utils/ParticlesInteractorBase.js +1 -1
- package/cjs/Core/Utils/QuadTree.js +5 -3
- package/cjs/Core/Utils/Vector.js +7 -2
- package/cjs/Core/Utils/Vector3d.js +14 -9
- package/cjs/Options/Classes/ManualParticle.js +3 -2
- package/cjs/Options/Classes/Options.js +3 -0
- package/cjs/Utils/CanvasUtils.js +36 -26
- package/cjs/Utils/ColorUtils.js +126 -45
- package/cjs/Utils/EventDispatcher.js +6 -5
- package/cjs/Utils/HslColorManager.js +5 -5
- package/cjs/Utils/NumberUtils.js +37 -24
- package/cjs/Utils/RgbColorManager.js +5 -5
- package/cjs/Utils/Utils.js +103 -19
- package/esm/Core/Canvas.js +19 -19
- package/esm/Core/Container.js +45 -34
- package/esm/Core/Engine.js +36 -20
- package/esm/Core/Particle.js +35 -36
- package/esm/Core/Particles.js +30 -24
- package/esm/Core/Retina.js +5 -4
- package/esm/Core/Utils/Circle.js +4 -3
- package/esm/Core/Utils/Constants.js +3 -0
- package/esm/Core/Utils/EventListeners.js +18 -15
- package/esm/Core/Utils/ExternalInteractorBase.js +1 -1
- package/esm/Core/Utils/InteractionManager.js +14 -6
- package/esm/Core/Utils/ParticlesInteractorBase.js +1 -1
- package/esm/Core/Utils/QuadTree.js +5 -3
- package/esm/Core/Utils/Vector.js +7 -2
- package/esm/Core/Utils/Vector3d.js +14 -9
- package/esm/Options/Classes/ManualParticle.js +3 -2
- package/esm/Options/Classes/Options.js +3 -0
- package/esm/Utils/CanvasUtils.js +36 -26
- package/esm/Utils/ColorUtils.js +124 -45
- package/esm/Utils/EventDispatcher.js +6 -5
- package/esm/Utils/HslColorManager.js +5 -5
- package/esm/Utils/NumberUtils.js +35 -23
- package/esm/Utils/RgbColorManager.js +5 -5
- package/esm/Utils/Utils.js +102 -19
- package/package.json +1 -1
- package/report.html +2 -2
- package/tsparticles.engine.js +693 -334
- package/tsparticles.engine.min.js +1 -1
- package/tsparticles.engine.min.js.LICENSE.txt +1 -1
- package/types/Core/Interfaces/IParticleHslAnimation.d.ts +4 -4
- package/types/Core/Interfaces/IParticleValueAnimation.d.ts +4 -0
- package/types/Core/Interfaces/IShapeDrawData.d.ts +2 -2
- package/types/Core/Utils/Constants.d.ts +3 -0
- package/types/Core/Utils/ExternalInteractorBase.d.ts +1 -1
- package/types/Core/Utils/InteractionManager.d.ts +1 -1
- package/types/Core/Utils/ParticlesInteractorBase.d.ts +1 -1
- package/types/Core/Utils/Point.d.ts +1 -1
- package/types/Options/Classes/Options.d.ts +1 -0
- package/types/Options/Classes/Particles/Move/Move.d.ts +1 -2
- package/types/Options/Classes/Particles/Move/OutModes.d.ts +1 -2
- package/types/Options/Interfaces/IOptions.d.ts +1 -0
- package/types/Options/Interfaces/Interactivity/Modes/IModes.d.ts +1 -3
- package/types/Types/CustomEventArgs.d.ts +2 -2
- package/types/Types/ExportResult.d.ts +2 -2
- package/types/Types/ParticlesGroups.d.ts +1 -3
- package/types/Types/PathOptions.d.ts +1 -3
- package/types/Types/ShapeData.d.ts +1 -3
- package/types/Utils/CanvasUtils.d.ts +3 -2
- package/types/Utils/ColorUtils.d.ts +5 -0
- package/types/Utils/NumberUtils.d.ts +2 -2
- package/types/Utils/Utils.d.ts +9 -6
- package/umd/Core/Canvas.js +19 -19
- package/umd/Core/Container.js +46 -35
- package/umd/Core/Engine.js +36 -20
- package/umd/Core/Particle.js +35 -36
- package/umd/Core/Particles.js +30 -24
- package/umd/Core/Retina.js +5 -4
- package/umd/Core/Utils/Circle.js +4 -3
- package/umd/Core/Utils/Constants.js +4 -1
- package/umd/Core/Utils/EventListeners.js +17 -14
- package/umd/Core/Utils/ExternalInteractorBase.js +1 -1
- package/umd/Core/Utils/InteractionManager.js +14 -6
- package/umd/Core/Utils/ParticlesInteractorBase.js +1 -1
- package/umd/Core/Utils/QuadTree.js +5 -3
- package/umd/Core/Utils/Vector.js +7 -2
- package/umd/Core/Utils/Vector3d.js +14 -9
- package/umd/Options/Classes/ManualParticle.js +3 -2
- package/umd/Options/Classes/Options.js +3 -0
- package/umd/Utils/CanvasUtils.js +36 -26
- package/umd/Utils/ColorUtils.js +127 -46
- package/umd/Utils/EventDispatcher.js +6 -5
- package/umd/Utils/HslColorManager.js +5 -5
- package/umd/Utils/NumberUtils.js +38 -25
- package/umd/Utils/RgbColorManager.js +5 -5
- package/umd/Utils/Utils.js +104 -20
package/umd/Utils/NumberUtils.js
CHANGED
|
@@ -4,16 +4,17 @@
|
|
|
4
4
|
if (v !== undefined) module.exports = v;
|
|
5
5
|
}
|
|
6
6
|
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define(["require", "exports", "../Core/Utils/Vector.js", "./Utils.js"], factory);
|
|
7
|
+
define(["require", "exports", "../Core/Utils/Vector.js", "./Utils.js", "../Core/Utils/Constants.js"], factory);
|
|
8
8
|
}
|
|
9
9
|
})(function (require, exports) {
|
|
10
10
|
"use strict";
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.parseAlpha = exports.calcExactPositionOrRandomFromSizeRanged = exports.calcExactPositionOrRandomFromSize = exports.calcPositionOrRandomFromSizeRanged = exports.calcPositionOrRandomFromSize = exports.calcPositionFromSize = exports.collisionVelocity = exports.getParticleBaseVelocity = exports.getParticleDirectionAngle = exports.getDistance = exports.getDistances = exports.setRangeValue = exports.getRangeMax = exports.getRangeMin = exports.getRangeValue = exports.randomInRange = exports.mix = exports.clamp = exports.getRandom = exports.setRandom = exports.getEasing = exports.addEasing = void 0;
|
|
12
|
+
exports.parseAlpha = exports.calcExactPositionOrRandomFromSizeRanged = exports.calcExactPositionOrRandomFromSize = exports.calcPositionOrRandomFromSizeRanged = exports.calcPositionOrRandomFromSize = exports.calcPositionFromSize = exports.collisionVelocity = exports.getParticleBaseVelocity = exports.getParticleDirectionAngle = exports.degToRad = exports.getDistance = exports.getDistances = exports.setRangeValue = exports.getRangeMax = exports.getRangeMin = exports.getRangeValue = exports.randomInRange = exports.mix = exports.clamp = exports.getRandom = exports.setRandom = exports.getEasing = exports.addEasing = void 0;
|
|
13
13
|
const Vector_js_1 = require("../Core/Utils/Vector.js");
|
|
14
14
|
const Utils_js_1 = require("./Utils.js");
|
|
15
|
+
const Constants_js_1 = require("../Core/Utils/Constants.js");
|
|
15
16
|
let _random = Math.random;
|
|
16
|
-
const easings = new Map();
|
|
17
|
+
const easings = new Map(), double = 2, doublePI = Math.PI * double;
|
|
17
18
|
function addEasing(name, easing) {
|
|
18
19
|
if (easings.get(name)) {
|
|
19
20
|
return;
|
|
@@ -22,7 +23,7 @@
|
|
|
22
23
|
}
|
|
23
24
|
exports.addEasing = addEasing;
|
|
24
25
|
function getEasing(name) {
|
|
25
|
-
return easings.get(name)
|
|
26
|
+
return easings.get(name) ?? ((value) => value);
|
|
26
27
|
}
|
|
27
28
|
exports.getEasing = getEasing;
|
|
28
29
|
function setRandom(rnd = Math.random) {
|
|
@@ -30,7 +31,8 @@
|
|
|
30
31
|
}
|
|
31
32
|
exports.setRandom = setRandom;
|
|
32
33
|
function getRandom() {
|
|
33
|
-
|
|
34
|
+
const min = 0, max = 1;
|
|
35
|
+
return clamp(_random(), min, max - Number.EPSILON);
|
|
34
36
|
}
|
|
35
37
|
exports.getRandom = getRandom;
|
|
36
38
|
function clamp(num, min, max) {
|
|
@@ -42,10 +44,10 @@
|
|
|
42
44
|
}
|
|
43
45
|
exports.mix = mix;
|
|
44
46
|
function randomInRange(r) {
|
|
45
|
-
const max = getRangeMax(r);
|
|
47
|
+
const max = getRangeMax(r), minOffset = 0;
|
|
46
48
|
let min = getRangeMin(r);
|
|
47
49
|
if (max === min) {
|
|
48
|
-
min =
|
|
50
|
+
min = minOffset;
|
|
49
51
|
}
|
|
50
52
|
return getRandom() * (max - min) + min;
|
|
51
53
|
}
|
|
@@ -76,41 +78,47 @@
|
|
|
76
78
|
}
|
|
77
79
|
exports.setRangeValue = setRangeValue;
|
|
78
80
|
function getDistances(pointA, pointB) {
|
|
79
|
-
const dx = pointA.x - pointB.x, dy = pointA.y - pointB.y;
|
|
80
|
-
return { dx: dx, dy: dy, distance: Math.sqrt(dx **
|
|
81
|
+
const dx = pointA.x - pointB.x, dy = pointA.y - pointB.y, squareExp = 2;
|
|
82
|
+
return { dx: dx, dy: dy, distance: Math.sqrt(dx ** squareExp + dy ** squareExp) };
|
|
81
83
|
}
|
|
82
84
|
exports.getDistances = getDistances;
|
|
83
85
|
function getDistance(pointA, pointB) {
|
|
84
86
|
return getDistances(pointA, pointB).distance;
|
|
85
87
|
}
|
|
86
88
|
exports.getDistance = getDistance;
|
|
89
|
+
function degToRad(degrees) {
|
|
90
|
+
const PIDeg = 180;
|
|
91
|
+
return (degrees * Math.PI) / PIDeg;
|
|
92
|
+
}
|
|
93
|
+
exports.degToRad = degToRad;
|
|
87
94
|
function getParticleDirectionAngle(direction, position, center) {
|
|
88
95
|
if ((0, Utils_js_1.isNumber)(direction)) {
|
|
89
|
-
return (direction
|
|
96
|
+
return degToRad(direction);
|
|
90
97
|
}
|
|
98
|
+
const empty = 0, half = 0.5, quarter = 0.25, threeQuarter = half + quarter;
|
|
91
99
|
switch (direction) {
|
|
92
100
|
case "top":
|
|
93
|
-
return -Math.PI *
|
|
101
|
+
return -Math.PI * half;
|
|
94
102
|
case "top-right":
|
|
95
|
-
return -Math.PI *
|
|
103
|
+
return -Math.PI * quarter;
|
|
96
104
|
case "right":
|
|
97
|
-
return
|
|
105
|
+
return empty;
|
|
98
106
|
case "bottom-right":
|
|
99
|
-
return Math.PI *
|
|
107
|
+
return Math.PI * quarter;
|
|
100
108
|
case "bottom":
|
|
101
|
-
return Math.PI *
|
|
109
|
+
return Math.PI * half;
|
|
102
110
|
case "bottom-left":
|
|
103
|
-
return Math.PI *
|
|
111
|
+
return Math.PI * threeQuarter;
|
|
104
112
|
case "left":
|
|
105
113
|
return Math.PI;
|
|
106
114
|
case "top-left":
|
|
107
|
-
return -Math.PI *
|
|
115
|
+
return -Math.PI * threeQuarter;
|
|
108
116
|
case "inside":
|
|
109
117
|
return Math.atan2(center.y - position.y, center.x - position.x);
|
|
110
118
|
case "outside":
|
|
111
119
|
return Math.atan2(position.y - center.y, position.x - center.x);
|
|
112
120
|
default:
|
|
113
|
-
return getRandom() *
|
|
121
|
+
return getRandom() * doublePI;
|
|
114
122
|
}
|
|
115
123
|
}
|
|
116
124
|
exports.getParticleDirectionAngle = getParticleDirectionAngle;
|
|
@@ -122,22 +130,23 @@
|
|
|
122
130
|
}
|
|
123
131
|
exports.getParticleBaseVelocity = getParticleBaseVelocity;
|
|
124
132
|
function collisionVelocity(v1, v2, m1, m2) {
|
|
125
|
-
|
|
133
|
+
const double = 2;
|
|
134
|
+
return Vector_js_1.Vector.create((v1.x * (m1 - m2)) / (m1 + m2) + (v2.x * double * m2) / (m1 + m2), v1.y);
|
|
126
135
|
}
|
|
127
136
|
exports.collisionVelocity = collisionVelocity;
|
|
128
137
|
function calcPositionFromSize(data) {
|
|
129
|
-
return data.position
|
|
138
|
+
return data.position?.x !== undefined && data.position.y !== undefined
|
|
130
139
|
? {
|
|
131
|
-
x: (data.position.x * data.size.width) /
|
|
132
|
-
y: (data.position.y * data.size.height) /
|
|
140
|
+
x: (data.position.x * data.size.width) / Constants_js_1.percentDenominator,
|
|
141
|
+
y: (data.position.y * data.size.height) / Constants_js_1.percentDenominator,
|
|
133
142
|
}
|
|
134
143
|
: undefined;
|
|
135
144
|
}
|
|
136
145
|
exports.calcPositionFromSize = calcPositionFromSize;
|
|
137
146
|
function calcPositionOrRandomFromSize(data) {
|
|
138
147
|
return {
|
|
139
|
-
x: ((data.position?.x ?? getRandom() *
|
|
140
|
-
y: ((data.position?.y ?? getRandom() *
|
|
148
|
+
x: ((data.position?.x ?? getRandom() * Constants_js_1.percentDenominator) * data.size.width) / Constants_js_1.percentDenominator,
|
|
149
|
+
y: ((data.position?.y ?? getRandom() * Constants_js_1.percentDenominator) * data.size.height) / Constants_js_1.percentDenominator,
|
|
141
150
|
};
|
|
142
151
|
}
|
|
143
152
|
exports.calcPositionOrRandomFromSize = calcPositionOrRandomFromSize;
|
|
@@ -165,7 +174,11 @@
|
|
|
165
174
|
}
|
|
166
175
|
exports.calcExactPositionOrRandomFromSizeRanged = calcExactPositionOrRandomFromSizeRanged;
|
|
167
176
|
function parseAlpha(input) {
|
|
168
|
-
|
|
177
|
+
const defaultAlpha = 1;
|
|
178
|
+
if (!input) {
|
|
179
|
+
return defaultAlpha;
|
|
180
|
+
}
|
|
181
|
+
return input.endsWith("%") ? parseFloat(input) / Constants_js_1.percentDenominator : parseFloat(input);
|
|
169
182
|
}
|
|
170
183
|
exports.parseAlpha = parseAlpha;
|
|
171
184
|
});
|
|
@@ -36,13 +36,13 @@
|
|
|
36
36
|
if (!input.startsWith(this.stringPrefix)) {
|
|
37
37
|
return;
|
|
38
38
|
}
|
|
39
|
-
const regex = /rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([\d.%]+)\s*)?\)/i, result = regex.exec(input);
|
|
39
|
+
const regex = /rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([\d.%]+)\s*)?\)/i, result = regex.exec(input), radix = 10, minLength = 4, defaultAlpha = 1;
|
|
40
40
|
return result
|
|
41
41
|
? {
|
|
42
|
-
a: result.length >
|
|
43
|
-
b: parseInt(result[3],
|
|
44
|
-
g: parseInt(result[2],
|
|
45
|
-
r: parseInt(result[1],
|
|
42
|
+
a: result.length > minLength ? (0, NumberUtils_js_1.parseAlpha)(result[5]) : defaultAlpha,
|
|
43
|
+
b: parseInt(result[3], radix),
|
|
44
|
+
g: parseInt(result[2], radix),
|
|
45
|
+
r: parseInt(result[1], radix),
|
|
46
46
|
}
|
|
47
47
|
: undefined;
|
|
48
48
|
}
|
package/umd/Utils/Utils.js
CHANGED
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
if (v !== undefined) module.exports = v;
|
|
5
5
|
}
|
|
6
6
|
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define(["require", "exports", "./NumberUtils.js", "../Core/Utils/Vector.js"], factory);
|
|
7
|
+
define(["require", "exports", "./NumberUtils.js", "../Core/Utils/Constants.js", "../Core/Utils/Vector.js"], factory);
|
|
8
8
|
}
|
|
9
9
|
})(function (require, exports) {
|
|
10
10
|
"use strict";
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.isArray = exports.isObject = exports.isFunction = exports.isNumber = exports.isString = exports.isBoolean = exports.getSize = exports.getPosition = exports.initParticleNumericAnimationValue = exports.findItemFromSingleOrMultiple = exports.itemFromSingleOrMultiple = exports.executeOnSingleOrMultiple = exports.rectBounce = exports.circleBounce = exports.circleBounceDataFromParticle = exports.divMode = exports.singleDivModeExecute = exports.divModeExecute = exports.isDivModeEnabled = exports.deepExtend = exports.calculateBounds = exports.areBoundsInside = exports.isPointInside = exports.itemFromArray = exports.arrayRandomIndex = exports.loadFont = exports.isInArray = exports.safeMutationObserver = exports.safeIntersectionObserver = exports.safeMatchMedia = exports.hasMatchMedia = exports.isSsr = exports.getLogger = exports.setLogger = void 0;
|
|
12
|
+
exports.updateAnimation = exports.isArray = exports.isObject = exports.isFunction = exports.isNumber = exports.isString = exports.isBoolean = exports.getSize = exports.getPosition = exports.initParticleNumericAnimationValue = exports.findItemFromSingleOrMultiple = exports.itemFromSingleOrMultiple = exports.executeOnSingleOrMultiple = exports.rectBounce = exports.circleBounce = exports.circleBounceDataFromParticle = exports.divMode = exports.singleDivModeExecute = exports.divModeExecute = exports.isDivModeEnabled = exports.deepExtend = exports.calculateBounds = exports.areBoundsInside = exports.isPointInside = exports.itemFromArray = exports.arrayRandomIndex = exports.loadFont = exports.isInArray = exports.safeMutationObserver = exports.safeIntersectionObserver = exports.safeMatchMedia = exports.hasMatchMedia = exports.isSsr = exports.getLogger = exports.setLogger = void 0;
|
|
13
13
|
const NumberUtils_js_1 = require("./NumberUtils.js");
|
|
14
|
+
const Constants_js_1 = require("../Core/Utils/Constants.js");
|
|
14
15
|
const Vector_js_1 = require("../Core/Utils/Vector.js");
|
|
15
16
|
const _logger = {
|
|
16
17
|
debug: console.debug,
|
|
@@ -34,15 +35,15 @@
|
|
|
34
35
|
}
|
|
35
36
|
exports.getLogger = getLogger;
|
|
36
37
|
function rectSideBounce(data) {
|
|
37
|
-
const res = { bounced: false }, { pSide, pOtherSide, rectSide, rectOtherSide, velocity, factor } = data;
|
|
38
|
+
const res = { bounced: false }, { pSide, pOtherSide, rectSide, rectOtherSide, velocity, factor } = data, half = 0.5, minVelocity = 0;
|
|
38
39
|
if (pOtherSide.min < rectOtherSide.min ||
|
|
39
40
|
pOtherSide.min > rectOtherSide.max ||
|
|
40
41
|
pOtherSide.max < rectOtherSide.min ||
|
|
41
42
|
pOtherSide.max > rectOtherSide.max) {
|
|
42
43
|
return res;
|
|
43
44
|
}
|
|
44
|
-
if ((pSide.max >= rectSide.min && pSide.max <= (rectSide.max + rectSide.min) *
|
|
45
|
-
(pSide.min <= rectSide.max && pSide.min > (rectSide.max + rectSide.min) *
|
|
45
|
+
if ((pSide.max >= rectSide.min && pSide.max <= (rectSide.max + rectSide.min) * half && velocity > minVelocity) ||
|
|
46
|
+
(pSide.min <= rectSide.max && pSide.min > (rectSide.max + rectSide.min) * half && velocity < minVelocity)) {
|
|
46
47
|
res.velocity = velocity * -factor;
|
|
47
48
|
res.bounced = true;
|
|
48
49
|
}
|
|
@@ -84,7 +85,8 @@
|
|
|
84
85
|
}
|
|
85
86
|
exports.safeMutationObserver = safeMutationObserver;
|
|
86
87
|
function isInArray(value, array) {
|
|
87
|
-
|
|
88
|
+
const invalidIndex = -1;
|
|
89
|
+
return value === array || (isArray(array) && array.indexOf(value) > invalidIndex);
|
|
88
90
|
}
|
|
89
91
|
exports.isInArray = isInArray;
|
|
90
92
|
async function loadFont(font, weight) {
|
|
@@ -104,7 +106,8 @@
|
|
|
104
106
|
}
|
|
105
107
|
exports.itemFromArray = itemFromArray;
|
|
106
108
|
function isPointInside(point, size, offset, radius, direction) {
|
|
107
|
-
|
|
109
|
+
const minRadius = 0;
|
|
110
|
+
return areBoundsInside(calculateBounds(point, radius ?? minRadius), size, offset, direction);
|
|
108
111
|
}
|
|
109
112
|
exports.isPointInside = isPointInside;
|
|
110
113
|
function areBoundsInside(bounds, size, offset, direction) {
|
|
@@ -203,8 +206,8 @@
|
|
|
203
206
|
}
|
|
204
207
|
exports.circleBounceDataFromParticle = circleBounceDataFromParticle;
|
|
205
208
|
function circleBounce(p1, p2) {
|
|
206
|
-
const { x: xVelocityDiff, y: yVelocityDiff } = p1.velocity.sub(p2.velocity), [pos1, pos2] = [p1.position, p2.position], { dx: xDist, dy: yDist } = (0, NumberUtils_js_1.getDistances)(pos2, pos1);
|
|
207
|
-
if (xVelocityDiff * xDist + yVelocityDiff * yDist <
|
|
209
|
+
const { x: xVelocityDiff, y: yVelocityDiff } = p1.velocity.sub(p2.velocity), [pos1, pos2] = [p1.position, p2.position], { dx: xDist, dy: yDist } = (0, NumberUtils_js_1.getDistances)(pos2, pos1), minimumDistance = 0;
|
|
210
|
+
if (xVelocityDiff * xDist + yVelocityDiff * yDist < minimumDistance) {
|
|
208
211
|
return;
|
|
209
212
|
}
|
|
210
213
|
const angle = -Math.atan2(yDist, xDist), m1 = p1.mass, m2 = p2.mass, u1 = p1.velocity.rotate(angle), u2 = p2.velocity.rotate(angle), v1 = (0, NumberUtils_js_1.collisionVelocity)(u1, u2, m1, m2), v2 = (0, NumberUtils_js_1.collisionVelocity)(u2, u1, m1, m2), vFinal1 = v1.rotate(-angle), vFinal2 = v2.rotate(-angle);
|
|
@@ -274,7 +277,8 @@
|
|
|
274
277
|
}
|
|
275
278
|
exports.rectBounce = rectBounce;
|
|
276
279
|
function executeOnSingleOrMultiple(obj, callback) {
|
|
277
|
-
|
|
280
|
+
const defaultIndex = 0;
|
|
281
|
+
return isArray(obj) ? obj.map((item, index) => callback(item, index)) : callback(obj, defaultIndex);
|
|
278
282
|
}
|
|
279
283
|
exports.executeOnSingleOrMultiple = executeOnSingleOrMultiple;
|
|
280
284
|
function itemFromSingleOrMultiple(obj, index, useIndex) {
|
|
@@ -282,12 +286,16 @@
|
|
|
282
286
|
}
|
|
283
287
|
exports.itemFromSingleOrMultiple = itemFromSingleOrMultiple;
|
|
284
288
|
function findItemFromSingleOrMultiple(obj, callback) {
|
|
285
|
-
|
|
289
|
+
if (isArray(obj)) {
|
|
290
|
+
return obj.find((t, index) => callback(t, index));
|
|
291
|
+
}
|
|
292
|
+
const defaultIndex = 0;
|
|
293
|
+
return callback(obj, defaultIndex) ? obj : undefined;
|
|
286
294
|
}
|
|
287
295
|
exports.findItemFromSingleOrMultiple = findItemFromSingleOrMultiple;
|
|
288
296
|
function initParticleNumericAnimationValue(options, pxRatio) {
|
|
289
297
|
const valueRange = options.value, animationOptions = options.animation, res = {
|
|
290
|
-
delayTime: (0, NumberUtils_js_1.getRangeValue)(animationOptions.delay) *
|
|
298
|
+
delayTime: (0, NumberUtils_js_1.getRangeValue)(animationOptions.delay) * Constants_js_1.millisecondsToSeconds,
|
|
291
299
|
enable: animationOptions.enable,
|
|
292
300
|
value: (0, NumberUtils_js_1.getRangeValue)(options.value) * pxRatio,
|
|
293
301
|
max: (0, NumberUtils_js_1.getRangeMax)(valueRange) * pxRatio,
|
|
@@ -295,9 +303,9 @@
|
|
|
295
303
|
loops: 0,
|
|
296
304
|
maxLoops: (0, NumberUtils_js_1.getRangeValue)(animationOptions.count),
|
|
297
305
|
time: 0,
|
|
298
|
-
};
|
|
306
|
+
}, decayOffset = 1;
|
|
299
307
|
if (animationOptions.enable) {
|
|
300
|
-
res.decay =
|
|
308
|
+
res.decay = decayOffset - (0, NumberUtils_js_1.getRangeValue)(animationOptions.decay);
|
|
301
309
|
switch (animationOptions.mode) {
|
|
302
310
|
case "increase":
|
|
303
311
|
res.status = "increasing";
|
|
@@ -306,7 +314,7 @@
|
|
|
306
314
|
res.status = "decreasing";
|
|
307
315
|
break;
|
|
308
316
|
case "random":
|
|
309
|
-
res.status = (0, NumberUtils_js_1.getRandom)() >=
|
|
317
|
+
res.status = (0, NumberUtils_js_1.getRandom)() >= Constants_js_1.halfRandom ? "increasing" : "decreasing";
|
|
310
318
|
break;
|
|
311
319
|
}
|
|
312
320
|
const autoStatus = animationOptions.mode === "auto";
|
|
@@ -327,7 +335,7 @@
|
|
|
327
335
|
default:
|
|
328
336
|
res.value = (0, NumberUtils_js_1.randomInRange)(res);
|
|
329
337
|
if (autoStatus) {
|
|
330
|
-
res.status = (0, NumberUtils_js_1.getRandom)() >=
|
|
338
|
+
res.status = (0, NumberUtils_js_1.getRandom)() >= Constants_js_1.halfRandom ? "increasing" : "decreasing";
|
|
331
339
|
}
|
|
332
340
|
break;
|
|
333
341
|
}
|
|
@@ -345,14 +353,14 @@
|
|
|
345
353
|
const isPosition = "x" in positionOrSize;
|
|
346
354
|
if (isPosition) {
|
|
347
355
|
return {
|
|
348
|
-
x: (positionOrSize.x /
|
|
349
|
-
y: (positionOrSize.y /
|
|
356
|
+
x: (positionOrSize.x / Constants_js_1.percentDenominator) * canvasSize.width,
|
|
357
|
+
y: (positionOrSize.y / Constants_js_1.percentDenominator) * canvasSize.height,
|
|
350
358
|
};
|
|
351
359
|
}
|
|
352
360
|
else {
|
|
353
361
|
return {
|
|
354
|
-
width: (positionOrSize.width /
|
|
355
|
-
height: (positionOrSize.height /
|
|
362
|
+
width: (positionOrSize.width / Constants_js_1.percentDenominator) * canvasSize.width,
|
|
363
|
+
height: (positionOrSize.height / Constants_js_1.percentDenominator) * canvasSize.height,
|
|
356
364
|
};
|
|
357
365
|
}
|
|
358
366
|
}
|
|
@@ -388,4 +396,80 @@
|
|
|
388
396
|
return Array.isArray(arg);
|
|
389
397
|
}
|
|
390
398
|
exports.isArray = isArray;
|
|
399
|
+
function checkDestroy(particle, destroyType, value, minValue, maxValue) {
|
|
400
|
+
switch (destroyType) {
|
|
401
|
+
case "max":
|
|
402
|
+
if (value >= maxValue) {
|
|
403
|
+
particle.destroy();
|
|
404
|
+
}
|
|
405
|
+
break;
|
|
406
|
+
case "min":
|
|
407
|
+
if (value <= minValue) {
|
|
408
|
+
particle.destroy();
|
|
409
|
+
}
|
|
410
|
+
break;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
function updateAnimation(particle, data, changeDirection, destroyType, delta) {
|
|
414
|
+
const minLoops = 0, minDelay = 0, identity = 1, minVelocity = 0, minDecay = 1;
|
|
415
|
+
if (particle.destroyed ||
|
|
416
|
+
!data ||
|
|
417
|
+
!data.enable ||
|
|
418
|
+
((data.maxLoops ?? minLoops) > minLoops && (data.loops ?? minLoops) > (data.maxLoops ?? minLoops))) {
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
const velocity = (data.velocity ?? minVelocity) * delta.factor, minValue = data.min, maxValue = data.max, decay = data.decay ?? minDecay;
|
|
422
|
+
if (!data.time) {
|
|
423
|
+
data.time = 0;
|
|
424
|
+
}
|
|
425
|
+
if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {
|
|
426
|
+
data.time += delta.value;
|
|
427
|
+
}
|
|
428
|
+
if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
switch (data.status) {
|
|
432
|
+
case "increasing":
|
|
433
|
+
if (data.value >= maxValue) {
|
|
434
|
+
if (changeDirection) {
|
|
435
|
+
data.status = "decreasing";
|
|
436
|
+
}
|
|
437
|
+
else {
|
|
438
|
+
data.value -= maxValue;
|
|
439
|
+
}
|
|
440
|
+
if (!data.loops) {
|
|
441
|
+
data.loops = minLoops;
|
|
442
|
+
}
|
|
443
|
+
data.loops++;
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
data.value += velocity;
|
|
447
|
+
}
|
|
448
|
+
break;
|
|
449
|
+
case "decreasing":
|
|
450
|
+
if (data.value <= minValue) {
|
|
451
|
+
if (changeDirection) {
|
|
452
|
+
data.status = "increasing";
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
data.value += maxValue;
|
|
456
|
+
}
|
|
457
|
+
if (!data.loops) {
|
|
458
|
+
data.loops = minLoops;
|
|
459
|
+
}
|
|
460
|
+
data.loops++;
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
data.value -= velocity;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
if (data.velocity && decay !== identity) {
|
|
467
|
+
data.velocity *= decay;
|
|
468
|
+
}
|
|
469
|
+
checkDestroy(particle, destroyType, data.value, minValue, maxValue);
|
|
470
|
+
if (!particle.destroyed) {
|
|
471
|
+
data.value = (0, NumberUtils_js_1.clamp)(data.value, minValue, maxValue);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
exports.updateAnimation = updateAnimation;
|
|
391
475
|
});
|