@tsparticles/interaction-particles-repulse 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/Repulser.js +5 -6
- package/cjs/Repulser.js +5 -6
- package/esm/Repulser.js +5 -6
- package/package.json +2 -2
- package/report.html +2 -2
- package/tsparticles.interaction.particles.repulse.js +16 -11
- package/tsparticles.interaction.particles.repulse.min.js +1 -1
- package/tsparticles.interaction.particles.repulse.min.js.LICENSE.txt +1 -1
- package/umd/Repulser.js +5 -6
package/browser/Repulser.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ParticlesInteractorBase, Vector, clamp, getDistances, getRangeValue, } from "@tsparticles/engine";
|
|
2
2
|
import { ParticlesRepulse } from "./Options/Classes/ParticlesRepulse.js";
|
|
3
|
+
const minDistance = 0, identity = 1, squareExp = 2, minVelocity = 0;
|
|
3
4
|
export class Repulser extends ParticlesInteractorBase {
|
|
4
5
|
constructor(container) {
|
|
5
6
|
super(container);
|
|
@@ -26,12 +27,9 @@ export class Repulser extends ParticlesInteractorBase {
|
|
|
26
27
|
if (p1 === p2 || p2.destroyed) {
|
|
27
28
|
continue;
|
|
28
29
|
}
|
|
29
|
-
const pos2 = p2.getPosition();
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (distance > 0) {
|
|
33
|
-
const repulseFactor = clamp((1 - Math.pow(distance / p1.repulse.distance, 2)) * velocity, 0, velocity);
|
|
34
|
-
const normVec = Vector.create((dx / distance) * repulseFactor, (dy / distance) * repulseFactor);
|
|
30
|
+
const pos2 = p2.getPosition(), { dx, dy, distance } = getDistances(pos2, pos1), velocity = p1.repulse.speed * p1.repulse.factor;
|
|
31
|
+
if (distance > minDistance) {
|
|
32
|
+
const repulseFactor = clamp((identity - Math.pow(distance / p1.repulse.distance, squareExp)) * velocity, minVelocity, velocity), normVec = Vector.create((dx / distance) * repulseFactor, (dy / distance) * repulseFactor);
|
|
35
33
|
p2.position.addTo(normVec);
|
|
36
34
|
}
|
|
37
35
|
else {
|
|
@@ -39,6 +37,7 @@ export class Repulser extends ParticlesInteractorBase {
|
|
|
39
37
|
p2.position.addTo(velocityVec);
|
|
40
38
|
}
|
|
41
39
|
}
|
|
40
|
+
await Promise.resolve();
|
|
42
41
|
}
|
|
43
42
|
isEnabled(particle) {
|
|
44
43
|
return particle.options.repulse?.enabled ?? false;
|
package/cjs/Repulser.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Repulser = void 0;
|
|
4
4
|
const engine_1 = require("@tsparticles/engine");
|
|
5
5
|
const ParticlesRepulse_js_1 = require("./Options/Classes/ParticlesRepulse.js");
|
|
6
|
+
const minDistance = 0, identity = 1, squareExp = 2, minVelocity = 0;
|
|
6
7
|
class Repulser extends engine_1.ParticlesInteractorBase {
|
|
7
8
|
constructor(container) {
|
|
8
9
|
super(container);
|
|
@@ -29,12 +30,9 @@ class Repulser extends engine_1.ParticlesInteractorBase {
|
|
|
29
30
|
if (p1 === p2 || p2.destroyed) {
|
|
30
31
|
continue;
|
|
31
32
|
}
|
|
32
|
-
const pos2 = p2.getPosition();
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (distance > 0) {
|
|
36
|
-
const repulseFactor = (0, engine_1.clamp)((1 - Math.pow(distance / p1.repulse.distance, 2)) * velocity, 0, velocity);
|
|
37
|
-
const normVec = engine_1.Vector.create((dx / distance) * repulseFactor, (dy / distance) * repulseFactor);
|
|
33
|
+
const pos2 = p2.getPosition(), { dx, dy, distance } = (0, engine_1.getDistances)(pos2, pos1), velocity = p1.repulse.speed * p1.repulse.factor;
|
|
34
|
+
if (distance > minDistance) {
|
|
35
|
+
const repulseFactor = (0, engine_1.clamp)((identity - Math.pow(distance / p1.repulse.distance, squareExp)) * velocity, minVelocity, velocity), normVec = engine_1.Vector.create((dx / distance) * repulseFactor, (dy / distance) * repulseFactor);
|
|
38
36
|
p2.position.addTo(normVec);
|
|
39
37
|
}
|
|
40
38
|
else {
|
|
@@ -42,6 +40,7 @@ class Repulser extends engine_1.ParticlesInteractorBase {
|
|
|
42
40
|
p2.position.addTo(velocityVec);
|
|
43
41
|
}
|
|
44
42
|
}
|
|
43
|
+
await Promise.resolve();
|
|
45
44
|
}
|
|
46
45
|
isEnabled(particle) {
|
|
47
46
|
return particle.options.repulse?.enabled ?? false;
|
package/esm/Repulser.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ParticlesInteractorBase, Vector, clamp, getDistances, getRangeValue, } from "@tsparticles/engine";
|
|
2
2
|
import { ParticlesRepulse } from "./Options/Classes/ParticlesRepulse.js";
|
|
3
|
+
const minDistance = 0, identity = 1, squareExp = 2, minVelocity = 0;
|
|
3
4
|
export class Repulser extends ParticlesInteractorBase {
|
|
4
5
|
constructor(container) {
|
|
5
6
|
super(container);
|
|
@@ -26,12 +27,9 @@ export class Repulser extends ParticlesInteractorBase {
|
|
|
26
27
|
if (p1 === p2 || p2.destroyed) {
|
|
27
28
|
continue;
|
|
28
29
|
}
|
|
29
|
-
const pos2 = p2.getPosition();
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (distance > 0) {
|
|
33
|
-
const repulseFactor = clamp((1 - Math.pow(distance / p1.repulse.distance, 2)) * velocity, 0, velocity);
|
|
34
|
-
const normVec = Vector.create((dx / distance) * repulseFactor, (dy / distance) * repulseFactor);
|
|
30
|
+
const pos2 = p2.getPosition(), { dx, dy, distance } = getDistances(pos2, pos1), velocity = p1.repulse.speed * p1.repulse.factor;
|
|
31
|
+
if (distance > minDistance) {
|
|
32
|
+
const repulseFactor = clamp((identity - Math.pow(distance / p1.repulse.distance, squareExp)) * velocity, minVelocity, velocity), normVec = Vector.create((dx / distance) * repulseFactor, (dy / distance) * repulseFactor);
|
|
35
33
|
p2.position.addTo(normVec);
|
|
36
34
|
}
|
|
37
35
|
else {
|
|
@@ -39,6 +37,7 @@ export class Repulser extends ParticlesInteractorBase {
|
|
|
39
37
|
p2.position.addTo(velocityVec);
|
|
40
38
|
}
|
|
41
39
|
}
|
|
40
|
+
await Promise.resolve();
|
|
42
41
|
}
|
|
43
42
|
isEnabled(particle) {
|
|
44
43
|
return particle.options.repulse?.enabled ?? false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsparticles/interaction-particles-repulse",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "tsParticles repulse particles interaction",
|
|
5
5
|
"homepage": "https://particles.js.org",
|
|
6
6
|
"repository": {
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"./package.json": "./package.json"
|
|
102
102
|
},
|
|
103
103
|
"dependencies": {
|
|
104
|
-
"@tsparticles/engine": "^3.0
|
|
104
|
+
"@tsparticles/engine": "^3.1.0"
|
|
105
105
|
},
|
|
106
106
|
"publishConfig": {
|
|
107
107
|
"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-repulse [
|
|
6
|
+
<title>@tsparticles/interaction-particles-repulse [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.repulse.js","isAsset":true,"statSize":
|
|
34
|
+
window.chartData = [{"label":"tsparticles.interaction.particles.repulse.js","isAsset":true,"statSize":3046,"parsedSize":7025,"gzipSize":2167,"groups":[{"label":"dist/browser","path":"./dist/browser","statSize":3004,"groups":[{"id":819,"label":"index.js + 2 modules (concatenated)","path":"./dist/browser/index.js + 2 modules (concatenated)","statSize":3004,"parsedSize":7025,"gzipSize":2167,"concatenated":true,"groups":[{"label":"dist/browser","path":"./dist/browser/index.js + 2 modules (concatenated)/dist/browser","statSize":3004,"groups":[{"id":null,"label":"index.js","path":"./dist/browser/index.js + 2 modules (concatenated)/dist/browser/index.js","statSize":220,"parsedSize":514,"gzipSize":158,"inaccurateSizes":true},{"id":null,"label":"Repulser.js","path":"./dist/browser/index.js + 2 modules (concatenated)/dist/browser/Repulser.js","statSize":1979,"parsedSize":4627,"gzipSize":1427,"inaccurateSizes":true},{"label":"Options/Classes","path":"./dist/browser/index.js + 2 modules (concatenated)/dist/browser/Options/Classes","statSize":805,"groups":[{"id":null,"label":"ParticlesRepulse.js","path":"./dist/browser/index.js + 2 modules (concatenated)/dist/browser/Options/Classes/ParticlesRepulse.js","statSize":805,"parsedSize":1882,"gzipSize":580,"inaccurateSizes":true}],"parsedSize":1882,"gzipSize":580,"inaccurateSizes":true}],"parsedSize":7025,"gzipSize":2167,"inaccurateSizes":true}]}],"parsedSize":7025,"gzipSize":2167},{"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.repulse":true}}];
|
|
35
35
|
window.entrypoints = ["tsparticles.interaction.particles.repulse","tsparticles.interaction.particles.repulse.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')
|
|
@@ -132,6 +132,10 @@ class ParticlesRepulse extends engine_root_window_.ValueWithRandom {
|
|
|
132
132
|
;// CONCATENATED MODULE: ./dist/browser/Repulser.js
|
|
133
133
|
|
|
134
134
|
|
|
135
|
+
const minDistance = 0,
|
|
136
|
+
identity = 1,
|
|
137
|
+
squareExp = 2,
|
|
138
|
+
minVelocity = 0;
|
|
135
139
|
class Repulser extends engine_root_window_.ParticlesInteractorBase {
|
|
136
140
|
constructor(container) {
|
|
137
141
|
super(container);
|
|
@@ -157,22 +161,23 @@ class Repulser extends engine_root_window_.ParticlesInteractorBase {
|
|
|
157
161
|
if (p1 === p2 || p2.destroyed) {
|
|
158
162
|
continue;
|
|
159
163
|
}
|
|
160
|
-
const pos2 = p2.getPosition()
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
if (distance >
|
|
168
|
-
const repulseFactor = (0,engine_root_window_.clamp)((
|
|
169
|
-
|
|
164
|
+
const pos2 = p2.getPosition(),
|
|
165
|
+
{
|
|
166
|
+
dx,
|
|
167
|
+
dy,
|
|
168
|
+
distance
|
|
169
|
+
} = (0,engine_root_window_.getDistances)(pos2, pos1),
|
|
170
|
+
velocity = p1.repulse.speed * p1.repulse.factor;
|
|
171
|
+
if (distance > minDistance) {
|
|
172
|
+
const repulseFactor = (0,engine_root_window_.clamp)((identity - Math.pow(distance / p1.repulse.distance, squareExp)) * velocity, minVelocity, velocity),
|
|
173
|
+
normVec = engine_root_window_.Vector.create(dx / distance * repulseFactor, dy / distance * repulseFactor);
|
|
170
174
|
p2.position.addTo(normVec);
|
|
171
175
|
} else {
|
|
172
176
|
const velocityVec = engine_root_window_.Vector.create(velocity, velocity);
|
|
173
177
|
p2.position.addTo(velocityVec);
|
|
174
178
|
}
|
|
175
179
|
}
|
|
180
|
+
await Promise.resolve();
|
|
176
181
|
}
|
|
177
182
|
isEnabled(particle) {
|
|
178
183
|
return particle.options.repulse?.enabled ?? false;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see tsparticles.interaction.particles.repulse.min.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine"],t);else{var o="object"==typeof exports?t(require("@tsparticles/engine")):t(e.window);for(var s in o)("object"==typeof exports?exports:e)[s]=o[s]}}(this,(e=>(()=>{"use strict";var t={533:t=>{t.exports=e}},o={};function s(e){var r=o[e];if(void 0!==r)return r.exports;var
|
|
2
|
+
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine"],t);else{var o="object"==typeof exports?t(require("@tsparticles/engine")):t(e.window);for(var s in o)("object"==typeof exports?exports:e)[s]=o[s]}}(this,(e=>(()=>{"use strict";var t={533:t=>{t.exports=e}},o={};function s(e){var r=o[e];if(void 0!==r)return r.exports;var a=o[e]={exports:{}};return t[e](a,a.exports,s),a.exports}s.d=(e,t)=>{for(var o in t)s.o(t,o)&&!s.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{s.r(r),s.d(r,{loadParticlesRepulseInteraction:()=>a});var e=s(533);class t extends e.ValueWithRandom{constructor(){super(),this.enabled=!1,this.distance=1,this.duration=1,this.factor=1,this.speed=1}load(t){super.load(t),t&&(void 0!==t.enabled&&(this.enabled=t.enabled),void 0!==t.distance&&(this.distance=(0,e.setRangeValue)(t.distance)),void 0!==t.duration&&(this.duration=(0,e.setRangeValue)(t.duration)),void 0!==t.factor&&(this.factor=(0,e.setRangeValue)(t.factor)),void 0!==t.speed&&(this.speed=(0,e.setRangeValue)(t.speed)))}}class o extends e.ParticlesInteractorBase{constructor(e){super(e)}clear(){}init(){}async interact(t){const o=this.container;if(!t.repulse){const s=t.options.repulse;if(!s)return;t.repulse={distance:(0,e.getRangeValue)(s.distance)*o.retina.pixelRatio,speed:(0,e.getRangeValue)(s.speed),factor:(0,e.getRangeValue)(s.factor)}}const s=t.getPosition(),r=o.particles.quadTree.queryCircle(s,t.repulse.distance);for(const o of r){if(t===o||o.destroyed)continue;const r=o.getPosition(),{dx:a,dy:n,distance:i}=(0,e.getDistances)(r,s),c=t.repulse.speed*t.repulse.factor;if(i>0){const s=(0,e.clamp)((1-Math.pow(i/t.repulse.distance,2))*c,0,c),r=e.Vector.create(a/i*s,n/i*s);o.position.addTo(r)}else{const t=e.Vector.create(c,c);o.position.addTo(t)}}await Promise.resolve()}isEnabled(e){return e.options.repulse?.enabled??!1}loadParticlesOptions(e,...o){e.repulse||(e.repulse=new t);for(const t of o)e.repulse.load(t?.repulse)}reset(){}}async function a(e,t=!0){await e.addInteractor("particlesRepulse",(e=>new o(e)),t)}})(),r})()));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
/*! tsParticles Repulse Particles Interaction v3.0
|
|
1
|
+
/*! tsParticles Repulse Particles Interaction v3.1.0 by Matteo Bruni */
|
package/umd/Repulser.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
exports.Repulser = void 0;
|
|
13
13
|
const engine_1 = require("@tsparticles/engine");
|
|
14
14
|
const ParticlesRepulse_js_1 = require("./Options/Classes/ParticlesRepulse.js");
|
|
15
|
+
const minDistance = 0, identity = 1, squareExp = 2, minVelocity = 0;
|
|
15
16
|
class Repulser extends engine_1.ParticlesInteractorBase {
|
|
16
17
|
constructor(container) {
|
|
17
18
|
super(container);
|
|
@@ -38,12 +39,9 @@
|
|
|
38
39
|
if (p1 === p2 || p2.destroyed) {
|
|
39
40
|
continue;
|
|
40
41
|
}
|
|
41
|
-
const pos2 = p2.getPosition();
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (distance > 0) {
|
|
45
|
-
const repulseFactor = (0, engine_1.clamp)((1 - Math.pow(distance / p1.repulse.distance, 2)) * velocity, 0, velocity);
|
|
46
|
-
const normVec = engine_1.Vector.create((dx / distance) * repulseFactor, (dy / distance) * repulseFactor);
|
|
42
|
+
const pos2 = p2.getPosition(), { dx, dy, distance } = (0, engine_1.getDistances)(pos2, pos1), velocity = p1.repulse.speed * p1.repulse.factor;
|
|
43
|
+
if (distance > minDistance) {
|
|
44
|
+
const repulseFactor = (0, engine_1.clamp)((identity - Math.pow(distance / p1.repulse.distance, squareExp)) * velocity, minVelocity, velocity), normVec = engine_1.Vector.create((dx / distance) * repulseFactor, (dy / distance) * repulseFactor);
|
|
47
45
|
p2.position.addTo(normVec);
|
|
48
46
|
}
|
|
49
47
|
else {
|
|
@@ -51,6 +49,7 @@
|
|
|
51
49
|
p2.position.addTo(velocityVec);
|
|
52
50
|
}
|
|
53
51
|
}
|
|
52
|
+
await Promise.resolve();
|
|
54
53
|
}
|
|
55
54
|
isEnabled(particle) {
|
|
56
55
|
return particle.options.repulse?.enabled ?? false;
|