@tsparticles/interaction-particles-repulse 3.0.3 → 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.
@@ -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
- const { dx, dy, distance } = getDistances(pos2, pos1);
31
- const velocity = p1.repulse.speed * p1.repulse.factor;
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
- const { dx, dy, distance } = (0, engine_1.getDistances)(pos2, pos1);
34
- const velocity = p1.repulse.speed * p1.repulse.factor;
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
- const { dx, dy, distance } = getDistances(pos2, pos1);
31
- const velocity = p1.repulse.speed * p1.repulse.factor;
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",
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.3"
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 [26 Dec 2023 at 19:26]</title>
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":2911,"parsedSize":6890,"gzipSize":2110,"groups":[{"label":"dist/browser","path":"./dist/browser","statSize":2869,"groups":[{"id":229,"label":"index.js + 2 modules (concatenated)","path":"./dist/browser/index.js + 2 modules (concatenated)","statSize":2869,"parsedSize":6890,"gzipSize":2110,"concatenated":true,"groups":[{"label":"dist/browser","path":"./dist/browser/index.js + 2 modules (concatenated)/dist/browser","statSize":2869,"groups":[{"id":null,"label":"index.js","path":"./dist/browser/index.js + 2 modules (concatenated)/dist/browser/index.js","statSize":220,"parsedSize":528,"gzipSize":161,"inaccurateSizes":true},{"id":null,"label":"Repulser.js","path":"./dist/browser/index.js + 2 modules (concatenated)/dist/browser/Repulser.js","statSize":1844,"parsedSize":4428,"gzipSize":1356,"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":1933,"gzipSize":592,"inaccurateSizes":true}],"parsedSize":1933,"gzipSize":592,"inaccurateSizes":true}],"parsedSize":6890,"gzipSize":2110,"inaccurateSizes":true}]}],"parsedSize":6890,"gzipSize":2110},{"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}}];
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.3
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
- const {
162
- dx,
163
- dy,
164
- distance
165
- } = (0,engine_root_window_.getDistances)(pos2, pos1);
166
- const velocity = p1.repulse.speed * p1.repulse.factor;
167
- if (distance > 0) {
168
- const repulseFactor = (0,engine_root_window_.clamp)((1 - Math.pow(distance / p1.repulse.distance, 2)) * velocity, 0, velocity);
169
- const normVec = engine_root_window_.Vector.create(dx / distance * repulseFactor, dy / distance * repulseFactor);
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 n=o[e]={exports:{}};return t[e](n,n.exports,s),n.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:()=>n});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:n,dy:a,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(n/i*s,a/i*s);o.position.addTo(r)}else{const t=e.Vector.create(c,c);o.position.addTo(t)}}}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 n(e,t=!0){await e.addInteractor("particlesRepulse",(e=>new o(e)),t)}})(),r})()));
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.3 by Matteo Bruni */
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
- const { dx, dy, distance } = (0, engine_1.getDistances)(pos2, pos1);
43
- const velocity = p1.repulse.speed * p1.repulse.factor;
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;