@tsparticles/interaction-particles-collisions 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/browser/Absorb.js +3 -2
- package/browser/Collider.js +3 -1
- package/cjs/Absorb.js +3 -2
- package/cjs/Collider.js +3 -1
- package/esm/Absorb.js +3 -2
- package/esm/Collider.js +3 -1
- package/package.json +2 -2
- package/report.html +2 -2
- package/tsparticles.interaction.particles.collisions.js +9 -4
- package/tsparticles.interaction.particles.collisions.min.js +1 -1
- package/tsparticles.interaction.particles.collisions.min.js.LICENSE.txt +1 -1
- package/umd/Absorb.js +3 -2
- package/umd/Collider.js +3 -1
package/browser/Absorb.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { clamp } from "@tsparticles/engine";
|
|
2
|
+
const half = 0.5, absorbFactor = 10, minAbsorbFactor = 0;
|
|
2
3
|
function updateAbsorb(p1, r1, p2, r2, delta, pixelRatio) {
|
|
3
|
-
const factor = clamp((p1.options.collisions.absorb.speed * delta.factor) /
|
|
4
|
-
p1.size.value += factor
|
|
4
|
+
const factor = clamp((p1.options.collisions.absorb.speed * delta.factor) / absorbFactor, minAbsorbFactor, r2);
|
|
5
|
+
p1.size.value += factor * half;
|
|
5
6
|
p2.size.value -= factor;
|
|
6
7
|
if (r2 <= pixelRatio) {
|
|
7
8
|
p2.size.value = 0;
|
package/browser/Collider.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ParticlesInteractorBase, getDistance } from "@tsparticles/engine";
|
|
2
2
|
import { resolveCollision } from "./ResolveCollision.js";
|
|
3
|
+
const double = 2;
|
|
3
4
|
export class Collider extends ParticlesInteractorBase {
|
|
4
5
|
constructor(container) {
|
|
5
6
|
super(container);
|
|
@@ -12,7 +13,7 @@ export class Collider extends ParticlesInteractorBase {
|
|
|
12
13
|
if (p1.destroyed || p1.spawning) {
|
|
13
14
|
return;
|
|
14
15
|
}
|
|
15
|
-
const container = this.container, pos1 = p1.getPosition(), radius1 = p1.getRadius(), query = container.particles.quadTree.queryCircle(pos1, radius1 *
|
|
16
|
+
const container = this.container, pos1 = p1.getPosition(), radius1 = p1.getRadius(), query = container.particles.quadTree.queryCircle(pos1, radius1 * double);
|
|
16
17
|
for (const p2 of query) {
|
|
17
18
|
if (p1 === p2 ||
|
|
18
19
|
!p2.options.collisions.enable ||
|
|
@@ -31,6 +32,7 @@ export class Collider extends ParticlesInteractorBase {
|
|
|
31
32
|
}
|
|
32
33
|
resolveCollision(p1, p2, delta, container.retina.pixelRatio);
|
|
33
34
|
}
|
|
35
|
+
await Promise.resolve();
|
|
34
36
|
}
|
|
35
37
|
isEnabled(particle) {
|
|
36
38
|
return particle.options.collisions.enable;
|
package/cjs/Absorb.js
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.absorb = void 0;
|
|
4
4
|
const engine_1 = require("@tsparticles/engine");
|
|
5
|
+
const half = 0.5, absorbFactor = 10, minAbsorbFactor = 0;
|
|
5
6
|
function updateAbsorb(p1, r1, p2, r2, delta, pixelRatio) {
|
|
6
|
-
const factor = (0, engine_1.clamp)((p1.options.collisions.absorb.speed * delta.factor) /
|
|
7
|
-
p1.size.value += factor
|
|
7
|
+
const factor = (0, engine_1.clamp)((p1.options.collisions.absorb.speed * delta.factor) / absorbFactor, minAbsorbFactor, r2);
|
|
8
|
+
p1.size.value += factor * half;
|
|
8
9
|
p2.size.value -= factor;
|
|
9
10
|
if (r2 <= pixelRatio) {
|
|
10
11
|
p2.size.value = 0;
|
package/cjs/Collider.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Collider = void 0;
|
|
4
4
|
const engine_1 = require("@tsparticles/engine");
|
|
5
5
|
const ResolveCollision_js_1 = require("./ResolveCollision.js");
|
|
6
|
+
const double = 2;
|
|
6
7
|
class Collider extends engine_1.ParticlesInteractorBase {
|
|
7
8
|
constructor(container) {
|
|
8
9
|
super(container);
|
|
@@ -15,7 +16,7 @@ class Collider extends engine_1.ParticlesInteractorBase {
|
|
|
15
16
|
if (p1.destroyed || p1.spawning) {
|
|
16
17
|
return;
|
|
17
18
|
}
|
|
18
|
-
const container = this.container, pos1 = p1.getPosition(), radius1 = p1.getRadius(), query = container.particles.quadTree.queryCircle(pos1, radius1 *
|
|
19
|
+
const container = this.container, pos1 = p1.getPosition(), radius1 = p1.getRadius(), query = container.particles.quadTree.queryCircle(pos1, radius1 * double);
|
|
19
20
|
for (const p2 of query) {
|
|
20
21
|
if (p1 === p2 ||
|
|
21
22
|
!p2.options.collisions.enable ||
|
|
@@ -34,6 +35,7 @@ class Collider extends engine_1.ParticlesInteractorBase {
|
|
|
34
35
|
}
|
|
35
36
|
(0, ResolveCollision_js_1.resolveCollision)(p1, p2, delta, container.retina.pixelRatio);
|
|
36
37
|
}
|
|
38
|
+
await Promise.resolve();
|
|
37
39
|
}
|
|
38
40
|
isEnabled(particle) {
|
|
39
41
|
return particle.options.collisions.enable;
|
package/esm/Absorb.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { clamp } from "@tsparticles/engine";
|
|
2
|
+
const half = 0.5, absorbFactor = 10, minAbsorbFactor = 0;
|
|
2
3
|
function updateAbsorb(p1, r1, p2, r2, delta, pixelRatio) {
|
|
3
|
-
const factor = clamp((p1.options.collisions.absorb.speed * delta.factor) /
|
|
4
|
-
p1.size.value += factor
|
|
4
|
+
const factor = clamp((p1.options.collisions.absorb.speed * delta.factor) / absorbFactor, minAbsorbFactor, r2);
|
|
5
|
+
p1.size.value += factor * half;
|
|
5
6
|
p2.size.value -= factor;
|
|
6
7
|
if (r2 <= pixelRatio) {
|
|
7
8
|
p2.size.value = 0;
|
package/esm/Collider.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ParticlesInteractorBase, getDistance } from "@tsparticles/engine";
|
|
2
2
|
import { resolveCollision } from "./ResolveCollision.js";
|
|
3
|
+
const double = 2;
|
|
3
4
|
export class Collider extends ParticlesInteractorBase {
|
|
4
5
|
constructor(container) {
|
|
5
6
|
super(container);
|
|
@@ -12,7 +13,7 @@ export class Collider extends ParticlesInteractorBase {
|
|
|
12
13
|
if (p1.destroyed || p1.spawning) {
|
|
13
14
|
return;
|
|
14
15
|
}
|
|
15
|
-
const container = this.container, pos1 = p1.getPosition(), radius1 = p1.getRadius(), query = container.particles.quadTree.queryCircle(pos1, radius1 *
|
|
16
|
+
const container = this.container, pos1 = p1.getPosition(), radius1 = p1.getRadius(), query = container.particles.quadTree.queryCircle(pos1, radius1 * double);
|
|
16
17
|
for (const p2 of query) {
|
|
17
18
|
if (p1 === p2 ||
|
|
18
19
|
!p2.options.collisions.enable ||
|
|
@@ -31,6 +32,7 @@ export class Collider extends ParticlesInteractorBase {
|
|
|
31
32
|
}
|
|
32
33
|
resolveCollision(p1, p2, delta, container.retina.pixelRatio);
|
|
33
34
|
}
|
|
35
|
+
await Promise.resolve();
|
|
34
36
|
}
|
|
35
37
|
isEnabled(particle) {
|
|
36
38
|
return particle.options.collisions.enable;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsparticles/interaction-particles-collisions",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "tsParticles collisions particles interaction",
|
|
5
5
|
"homepage": "https://particles.js.org",
|
|
6
6
|
"repository": {
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"./package.json": "./package.json"
|
|
88
88
|
},
|
|
89
89
|
"dependencies": {
|
|
90
|
-
"@tsparticles/engine": "^3.0
|
|
90
|
+
"@tsparticles/engine": "^3.1.0"
|
|
91
91
|
},
|
|
92
92
|
"publishConfig": {
|
|
93
93
|
"access": "public"
|
package/report.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8"/>
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
6
|
-
<title>@tsparticles/interaction-particles-collisions [
|
|
6
|
+
<title>@tsparticles/interaction-particles-collisions [13 Jan 2024 at 23:00]</title>
|
|
7
7
|
<link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABrVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+O1foceMD///+J0/qK1Pr7/v8Xdr/9///W8P4UdL7L7P0Scr2r4Pyj3vwad8D5/f/2/f+55f3E6f34+/2H0/ojfMKpzOd0rNgQcb3F3O/j9f7c8v6g3Pz0/P/w+v/q+P7n9v6T1/uQ1vuE0vqLut/y+v+Z2fvt+f+15Pzv9fuc2/vR7v2V2Pvd6/bg9P7I6/285/2y4/yp3/zp8vk8i8kqgMT7/P31+fyv4vxGkcz6/P6/6P3j7vfS5PNnpNUxhcbO7f7F6v3O4vHK3/DA2u631Ouy0eqXweKJud5wqthfoNMMbLvY8f73+v2dxeR8sNtTmdDx9/zX6PSjyeaCtd1YnNGX2PuQveCGt95Nls42h8dLlM3F4vBtAAAAM3RSTlMAAyOx0/sKBvik8opWGBMOAe3l1snDm2E9LSb06eHcu5JpHbarfHZCN9CBb08zzkdNS0kYaptYAAAFV0lEQVRYw92X51/aYBDHHS2O2qqttVbrqNq9m+TJIAYIShBkWwqIiCgoWvfeq7Z2/s29hyQNyUcR7LveGwVyXy6XH8/9rqxglLfUPLxVduUor3h0rfp2TYvpivk37929TkG037hffoX0+peVtZQc1589rigVUdXS/ABSAyEmGIO/1XfvldSK8vs3OqB6u3m0nxmIrvgB0dj7rr7Y9IbuF68hnfFaiHA/sxqm0wciIG43P60qKv9WXWc1RXGh/mFESFABTSBi0sNAKzqet17eCtOb3kZIDwxEEU0oAIJGYxNBDhBND29e0rtXXbcpuPmED9IhEAAQ/AXEaF8EPmnrrKsv0LvWR3fg5sWDNAFZOgAgaKvZDogHNU9MFwnnYROkc56RD5CjAbQX9Ow4g7upCsvYu55aSI/Nj0H1akgKQEUM94dwK65hYRmFU9MIcH/fqJYOZYcnuJSU/waKDgTOEVaVKhwrTRP5XzgSpAITYzom7UvkhFX5VutmxeNnWDjjswTKTyfgluNDGbUpWissXhF3s7mlSml+czWkg3D0l1nNjGNjz3myOQOa1KM/jOS6ebdbAVTCi4gljHSFrviza7tOgRWcS0MOUX9zdNgag5w7rRqA44Lzw0hr1WqES36dFliSJFlh2rXIae3FFcDDgKdxrUIDePr8jGcSClV1u7A9xeN0ModY/pHMxmR1EzRh8TJiwqsHmKW0l4FCEZI+jHio+JdPPE9qwQtTRxku2D8sIeRL2LnxWSllANCQGOIiqVHAz2ye2JR0DcH+HoxDkaADLjgxjKQ+AwCX/g0+DNgdG0ukYCONAe+dbc2IAc6fwt1ARoDSezNHxV2Cmzwv3O6lDMV55edBGwGK9n1+x2F8EDfAGCxug8MhpsMEcTEAWf3rx2vZhe/LAmtIn/6apE6PN0ULKgywD9mmdxbmFl3OvD5AS5fW5zLbv/YHmcsBTjf/afDz3MaZTVCfAP9z6/Bw6ycv8EUBWJIn9zYcoAWWlW9+OzO3vkTy8H+RANLmdrpOuYWdZYEXpo+TlCJrW5EARb7fF+bWdqf3hhyZI1nWJQHgznErZhbjoEsWqi8dQNoE294aldzFurwSABL2XXMf9+H1VQGke9exw5P/AnA5Pv5ngMul7LOvO922iwACu8WkCwLCafvM4CeWPxfA8lNHcWZSoi8EwMAIciKX2Z4SWCMAa3snCZ/G4EA8D6CMLNFsGQhkkz/gQNEBbPCbWsxGUpYVu3z8IyNAknwJkfPMEhLyrdi5RTyUVACkw4GSFRNWJNEW+fgPGwHD8/JxnRuLabN4CGNRkAE23na2+VmEAUmrYymSGjMAYqH84YUIyzgzs3XC7gNgH36Vcc4zKY9o9fgPBXUAiHHwVboBHGLiX6Zcjp1f2wu4tvzZKo0ecPnDtQYDQvJXaBeNzce45Fp28ZQLrEZVuFqgBwOalArKXnW1UzlnSusQKJqKYNuz4tOnI6sZG4zanpemv+7ySU2jbA9h6uhcgpfy6G2PahirDZ6zvq6zDduMVFTKvzw8wgyEdelwY9in3XkEPs3osJuwRQ4qTkfzifndg9Gfc4pdsu82+tTnHZTBa2EAMrqr2t43pguc8tNm7JQVQ2S0ukj2d22dhXYP0/veWtwKrCkNoNimAN5+Xr/oLrxswKbVJjteWrX7eR63o4j9q0GxnaBdWgGA5VStpanIjQmEhV0/nVt5VOFUvix6awJhPcAaTEShgrG+iGyvb5a0Ndb1YGHFPEwoqAinoaykaID1o1pdPNu7XsnCKQ3R+hwWIIhGvORcJUBYXe3Xa3vq/mF/N9V13ugufMkfXn+KHsRD0B8AAAAASUVORK5CYII=" type="image/x-icon" />
|
|
8
8
|
|
|
9
9
|
<script>
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
<body>
|
|
32
32
|
<div id="app"></div>
|
|
33
33
|
<script>
|
|
34
|
-
window.chartData = [{"label":"tsparticles.interaction.particles.collisions.js","isAsset":true,"statSize":
|
|
34
|
+
window.chartData = [{"label":"tsparticles.interaction.particles.collisions.js","isAsset":true,"statSize":3861,"parsedSize":7675,"gzipSize":2314,"groups":[{"label":"dist/browser","path":"./dist/browser","statSize":3819,"groups":[{"id":303,"label":"index.js + 5 modules (concatenated)","path":"./dist/browser/index.js + 5 modules (concatenated)","statSize":3819,"parsedSize":7675,"gzipSize":2314,"concatenated":true,"groups":[{"label":"dist/browser","path":"./dist/browser/index.js + 5 modules (concatenated)/dist/browser","statSize":3819,"groups":[{"id":null,"label":"index.js","path":"./dist/browser/index.js + 5 modules (concatenated)/dist/browser/index.js","statSize":226,"parsedSize":454,"gzipSize":136,"inaccurateSizes":true},{"id":null,"label":"Collider.js","path":"./dist/browser/index.js + 5 modules (concatenated)/dist/browser/Collider.js","statSize":1267,"parsedSize":2546,"gzipSize":767,"inaccurateSizes":true},{"id":null,"label":"ResolveCollision.js","path":"./dist/browser/index.js + 5 modules (concatenated)/dist/browser/ResolveCollision.js","statSize":466,"parsedSize":936,"gzipSize":282,"inaccurateSizes":true},{"id":null,"label":"Absorb.js","path":"./dist/browser/index.js + 5 modules (concatenated)/dist/browser/Absorb.js","statSize":859,"parsedSize":1726,"gzipSize":520,"inaccurateSizes":true},{"id":null,"label":"Bounce.js","path":"./dist/browser/index.js + 5 modules (concatenated)/dist/browser/Bounce.js","statSize":509,"parsedSize":1022,"gzipSize":308,"inaccurateSizes":true},{"id":null,"label":"Destroy.js","path":"./dist/browser/index.js + 5 modules (concatenated)/dist/browser/Destroy.js","statSize":492,"parsedSize":988,"gzipSize":298,"inaccurateSizes":true}],"parsedSize":7675,"gzipSize":2314,"inaccurateSizes":true}]}],"parsedSize":7675,"gzipSize":2314},{"label":"engine\",\"commonjs2\":\"@tsparticles/engine\",\"amd\":\"@tsparticles","path":"./engine\",\"commonjs2\":\"@tsparticles/engine\",\"amd\":\"@tsparticles","statSize":42,"groups":[{"id":533,"label":"engine\",\"root\":\"window\"}","path":"./engine\",\"commonjs2\":\"@tsparticles/engine\",\"amd\":\"@tsparticles/engine\",\"root\":\"window\"}","statSize":42}],"parsedSize":0,"gzipSize":0}],"isInitialByEntrypoint":{"tsparticles.interaction.particles.collisions":true}}];
|
|
35
35
|
window.entrypoints = ["tsparticles.interaction.particles.collisions","tsparticles.interaction.particles.collisions.min"];
|
|
36
36
|
window.defaultSizes = "parsed";
|
|
37
37
|
</script>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Demo / Generator : https://particles.js.org/
|
|
5
5
|
* GitHub : https://www.github.com/matteobruni/tsparticles
|
|
6
6
|
* How to use? : Check the GitHub README
|
|
7
|
-
* v3.0
|
|
7
|
+
* v3.1.0
|
|
8
8
|
*/
|
|
9
9
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
10
10
|
if(typeof exports === 'object' && typeof module === 'object')
|
|
@@ -98,9 +98,12 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
98
98
|
var engine_root_window_ = __webpack_require__(533);
|
|
99
99
|
;// CONCATENATED MODULE: ./dist/browser/Absorb.js
|
|
100
100
|
|
|
101
|
+
const half = 0.5,
|
|
102
|
+
absorbFactor = 10,
|
|
103
|
+
minAbsorbFactor = 0;
|
|
101
104
|
function updateAbsorb(p1, r1, p2, r2, delta, pixelRatio) {
|
|
102
|
-
const factor = (0,engine_root_window_.clamp)(p1.options.collisions.absorb.speed * delta.factor /
|
|
103
|
-
p1.size.value += factor
|
|
105
|
+
const factor = (0,engine_root_window_.clamp)(p1.options.collisions.absorb.speed * delta.factor / absorbFactor, minAbsorbFactor, r2);
|
|
106
|
+
p1.size.value += factor * half;
|
|
104
107
|
p2.size.value -= factor;
|
|
105
108
|
if (r2 <= pixelRatio) {
|
|
106
109
|
p2.size.value = 0;
|
|
@@ -178,6 +181,7 @@ function resolveCollision(p1, p2, delta, pixelRatio) {
|
|
|
178
181
|
;// CONCATENATED MODULE: ./dist/browser/Collider.js
|
|
179
182
|
|
|
180
183
|
|
|
184
|
+
const Collider_double = 2;
|
|
181
185
|
class Collider extends engine_root_window_.ParticlesInteractorBase {
|
|
182
186
|
constructor(container) {
|
|
183
187
|
super(container);
|
|
@@ -191,7 +195,7 @@ class Collider extends engine_root_window_.ParticlesInteractorBase {
|
|
|
191
195
|
const container = this.container,
|
|
192
196
|
pos1 = p1.getPosition(),
|
|
193
197
|
radius1 = p1.getRadius(),
|
|
194
|
-
query = container.particles.quadTree.queryCircle(pos1, radius1 *
|
|
198
|
+
query = container.particles.quadTree.queryCircle(pos1, radius1 * Collider_double);
|
|
195
199
|
for (const p2 of query) {
|
|
196
200
|
if (p1 === p2 || !p2.options.collisions.enable || p1.options.collisions.mode !== p2.options.collisions.mode || p2.destroyed || p2.spawning) {
|
|
197
201
|
continue;
|
|
@@ -208,6 +212,7 @@ class Collider extends engine_root_window_.ParticlesInteractorBase {
|
|
|
208
212
|
}
|
|
209
213
|
resolveCollision(p1, p2, delta, container.retina.pixelRatio);
|
|
210
214
|
}
|
|
215
|
+
await Promise.resolve();
|
|
211
216
|
}
|
|
212
217
|
isEnabled(particle) {
|
|
213
218
|
return particle.options.collisions.enable;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see tsparticles.interaction.particles.collisions.min.js.LICENSE.txt */
|
|
2
|
-
!function(e,o){if("object"==typeof exports&&"object"==typeof module)module.exports=o(require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine"],o);else{var t="object"==typeof exports?o(require("@tsparticles/engine")):o(e.window);for(var i in t)("object"==typeof exports?exports:e)[i]=t[i]}}(this,(e=>(()=>{"use strict";var o={533:o=>{o.exports=e}},t={};function i(e){var s=t[e];if(void 0!==s)return s.exports;var n=t[e]={exports:{}};return o[e](n,n.exports,i),n.exports}i.d=(e,o)=>{for(var t in o)i.o(o,t)&&!i.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:o[t]})},i.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var s={};return(()=>{i.r(s),i.d(s,{loadParticlesCollisionsInteraction:()=>
|
|
2
|
+
!function(e,o){if("object"==typeof exports&&"object"==typeof module)module.exports=o(require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine"],o);else{var t="object"==typeof exports?o(require("@tsparticles/engine")):o(e.window);for(var i in t)("object"==typeof exports?exports:e)[i]=t[i]}}(this,(e=>(()=>{"use strict";var o={533:o=>{o.exports=e}},t={};function i(e){var s=t[e];if(void 0!==s)return s.exports;var n=t[e]={exports:{}};return o[e](n,n.exports,i),n.exports}i.d=(e,o)=>{for(var t in o)i.o(o,t)&&!i.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:o[t]})},i.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var s={};return(()=>{i.r(s),i.d(s,{loadParticlesCollisionsInteraction:()=>u});var e=i(533);const o=.5,t=10,n=0;function r(i,s,r,a,c,l){const d=(0,e.clamp)(i.options.collisions.absorb.speed*c.factor/t,n,a);i.size.value+=d*o,r.size.value-=d,a<=l&&(r.size.value=0,r.destroy())}const a=o=>{void 0===o.collisionMaxSpeed&&(o.collisionMaxSpeed=(0,e.getRangeValue)(o.options.collisions.maxSpeed)),o.velocity.length>o.collisionMaxSpeed&&(o.velocity.length=o.collisionMaxSpeed)};function c(o,t){(0,e.circleBounce)((0,e.circleBounceDataFromParticle)(o),(0,e.circleBounceDataFromParticle)(t)),a(o),a(t)}function l(e,o,t,i){switch(e.options.collisions.mode){case"absorb":!function(e,o,t,i){const s=e.getRadius(),n=o.getRadius();void 0===s&&void 0!==n?e.destroy():void 0!==s&&void 0===n?o.destroy():void 0!==s&&void 0!==n&&(s>=n?r(e,0,o,n,t,i):r(o,0,e,s,t,i))}(e,o,t,i);break;case"bounce":c(e,o);break;case"destroy":!function(e,o){e.unbreakable||o.unbreakable||c(e,o),void 0===e.getRadius()&&void 0!==o.getRadius()?e.destroy():void 0!==e.getRadius()&&void 0===o.getRadius()?o.destroy():void 0!==e.getRadius()&&void 0!==o.getRadius()&&(e.getRadius()>=o.getRadius()?o:e).destroy()}(e,o)}}class d extends e.ParticlesInteractorBase{constructor(e){super(e)}clear(){}init(){}async interact(o,t){if(o.destroyed||o.spawning)return;const i=this.container,s=o.getPosition(),n=o.getRadius(),r=i.particles.quadTree.queryCircle(s,2*n);for(const a of r){if(o===a||!a.options.collisions.enable||o.options.collisions.mode!==a.options.collisions.mode||a.destroyed||a.spawning)continue;const r=a.getPosition(),c=a.getRadius();if(Math.abs(Math.round(s.z)-Math.round(r.z))>n+c)continue;(0,e.getDistance)(s,r)>n+c||l(o,a,t,i.retina.pixelRatio)}await Promise.resolve()}isEnabled(e){return e.options.collisions.enable}reset(){}}async function u(e,o=!0){await e.addInteractor("particlesCollisions",(e=>new d(e)),o)}})(),s})()));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
/*! tsParticles Collisions Particles Interaction v3.0
|
|
1
|
+
/*! tsParticles Collisions Particles Interaction v3.1.0 by Matteo Bruni */
|
package/umd/Absorb.js
CHANGED
|
@@ -11,9 +11,10 @@
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.absorb = void 0;
|
|
13
13
|
const engine_1 = require("@tsparticles/engine");
|
|
14
|
+
const half = 0.5, absorbFactor = 10, minAbsorbFactor = 0;
|
|
14
15
|
function updateAbsorb(p1, r1, p2, r2, delta, pixelRatio) {
|
|
15
|
-
const factor = (0, engine_1.clamp)((p1.options.collisions.absorb.speed * delta.factor) /
|
|
16
|
-
p1.size.value += factor
|
|
16
|
+
const factor = (0, engine_1.clamp)((p1.options.collisions.absorb.speed * delta.factor) / absorbFactor, minAbsorbFactor, r2);
|
|
17
|
+
p1.size.value += factor * half;
|
|
17
18
|
p2.size.value -= factor;
|
|
18
19
|
if (r2 <= pixelRatio) {
|
|
19
20
|
p2.size.value = 0;
|
package/umd/Collider.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
exports.Collider = void 0;
|
|
13
13
|
const engine_1 = require("@tsparticles/engine");
|
|
14
14
|
const ResolveCollision_js_1 = require("./ResolveCollision.js");
|
|
15
|
+
const double = 2;
|
|
15
16
|
class Collider extends engine_1.ParticlesInteractorBase {
|
|
16
17
|
constructor(container) {
|
|
17
18
|
super(container);
|
|
@@ -24,7 +25,7 @@
|
|
|
24
25
|
if (p1.destroyed || p1.spawning) {
|
|
25
26
|
return;
|
|
26
27
|
}
|
|
27
|
-
const container = this.container, pos1 = p1.getPosition(), radius1 = p1.getRadius(), query = container.particles.quadTree.queryCircle(pos1, radius1 *
|
|
28
|
+
const container = this.container, pos1 = p1.getPosition(), radius1 = p1.getRadius(), query = container.particles.quadTree.queryCircle(pos1, radius1 * double);
|
|
28
29
|
for (const p2 of query) {
|
|
29
30
|
if (p1 === p2 ||
|
|
30
31
|
!p2.options.collisions.enable ||
|
|
@@ -43,6 +44,7 @@
|
|
|
43
44
|
}
|
|
44
45
|
(0, ResolveCollision_js_1.resolveCollision)(p1, p2, delta, container.retina.pixelRatio);
|
|
45
46
|
}
|
|
47
|
+
await Promise.resolve();
|
|
46
48
|
}
|
|
47
49
|
isEnabled(particle) {
|
|
48
50
|
return particle.options.collisions.enable;
|