@tsparticles/updater-life 3.0.3 → 3.2.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,38 +1,40 @@
1
- import { getRandom, getRangeValue, randomInRange, setRangeValue, } from "@tsparticles/engine";
1
+ import { getRandom, getRangeValue, millisecondsToSeconds, } from "@tsparticles/engine";
2
2
  import { Life } from "./Options/Classes/Life.js";
3
+ const noTime = 0, identity = 1, infiniteValue = -1;
3
4
  export class LifeUpdater {
4
5
  constructor(container) {
5
6
  this.container = container;
6
7
  }
7
- init(particle) {
8
+ async init(particle) {
8
9
  const container = this.container, particlesOptions = particle.options, lifeOptions = particlesOptions.life;
9
10
  if (!lifeOptions) {
10
11
  return;
11
12
  }
12
13
  particle.life = {
13
14
  delay: container.retina.reduceFactor
14
- ? ((getRangeValue(lifeOptions.delay.value) * (lifeOptions.delay.sync ? 1 : getRandom())) /
15
+ ? ((getRangeValue(lifeOptions.delay.value) * (lifeOptions.delay.sync ? identity : getRandom())) /
15
16
  container.retina.reduceFactor) *
16
- 1000
17
- : 0,
18
- delayTime: 0,
17
+ millisecondsToSeconds
18
+ : noTime,
19
+ delayTime: noTime,
19
20
  duration: container.retina.reduceFactor
20
- ? ((getRangeValue(lifeOptions.duration.value) * (lifeOptions.duration.sync ? 1 : getRandom())) /
21
+ ? ((getRangeValue(lifeOptions.duration.value) * (lifeOptions.duration.sync ? identity : getRandom())) /
21
22
  container.retina.reduceFactor) *
22
- 1000
23
- : 0,
24
- time: 0,
23
+ millisecondsToSeconds
24
+ : noTime,
25
+ time: noTime,
25
26
  count: lifeOptions.count,
26
27
  };
27
- if (particle.life.duration <= 0) {
28
- particle.life.duration = -1;
28
+ if (particle.life.duration <= noTime) {
29
+ particle.life.duration = infiniteValue;
29
30
  }
30
- if (particle.life.count <= 0) {
31
- particle.life.count = -1;
31
+ if (particle.life.count <= noTime) {
32
+ particle.life.count = infiniteValue;
32
33
  }
33
34
  if (particle.life) {
34
- particle.spawning = particle.life.delay > 0;
35
+ particle.spawning = particle.life.delay > noTime;
35
36
  }
37
+ await Promise.resolve();
36
38
  }
37
39
  isEnabled(particle) {
38
40
  return !particle.destroyed;
@@ -45,58 +47,11 @@ export class LifeUpdater {
45
47
  options.life.load(source?.life);
46
48
  }
47
49
  }
48
- update(particle, delta) {
50
+ async update(particle, delta) {
49
51
  if (!this.isEnabled(particle) || !particle.life) {
50
52
  return;
51
53
  }
52
- const life = particle.life;
53
- let justSpawned = false;
54
- if (particle.spawning) {
55
- life.delayTime += delta.value;
56
- if (life.delayTime >= particle.life.delay) {
57
- justSpawned = true;
58
- particle.spawning = false;
59
- life.delayTime = 0;
60
- life.time = 0;
61
- }
62
- else {
63
- return;
64
- }
65
- }
66
- if (life.duration === -1) {
67
- return;
68
- }
69
- if (particle.spawning) {
70
- return;
71
- }
72
- if (justSpawned) {
73
- life.time = 0;
74
- }
75
- else {
76
- life.time += delta.value;
77
- }
78
- if (life.time < life.duration) {
79
- return;
80
- }
81
- life.time = 0;
82
- if (particle.life.count > 0) {
83
- particle.life.count--;
84
- }
85
- if (particle.life.count === 0) {
86
- particle.destroy();
87
- return;
88
- }
89
- const canvasSize = this.container.canvas.size, widthRange = setRangeValue(0, canvasSize.width), heightRange = setRangeValue(0, canvasSize.width);
90
- particle.position.x = randomInRange(widthRange);
91
- particle.position.y = randomInRange(heightRange);
92
- particle.spawning = true;
93
- life.delayTime = 0;
94
- life.time = 0;
95
- particle.reset();
96
- const lifeOptions = particle.options.life;
97
- if (lifeOptions) {
98
- life.delay = getRangeValue(lifeOptions.delay.value) * 1000;
99
- life.duration = getRangeValue(lifeOptions.duration.value) * 1000;
100
- }
54
+ const { updateLife } = await import("./Utils.js");
55
+ updateLife(particle, delta, this.container.canvas.size);
101
56
  }
102
57
  }
package/esm/Utils.js ADDED
@@ -0,0 +1,56 @@
1
+ import { getRangeValue, millisecondsToSeconds, randomInRange, setRangeValue, } from "@tsparticles/engine";
2
+ const noTime = 0, infiniteValue = -1, noLife = 0, minCanvasSize = 0;
3
+ export function updateLife(particle, delta, canvasSize) {
4
+ if (!particle.life) {
5
+ return;
6
+ }
7
+ const life = particle.life;
8
+ let justSpawned = false;
9
+ if (particle.spawning) {
10
+ life.delayTime += delta.value;
11
+ if (life.delayTime >= particle.life.delay) {
12
+ justSpawned = true;
13
+ particle.spawning = false;
14
+ life.delayTime = noTime;
15
+ life.time = noTime;
16
+ }
17
+ else {
18
+ return;
19
+ }
20
+ }
21
+ if (life.duration === infiniteValue) {
22
+ return;
23
+ }
24
+ if (particle.spawning) {
25
+ return;
26
+ }
27
+ if (justSpawned) {
28
+ life.time = noTime;
29
+ }
30
+ else {
31
+ life.time += delta.value;
32
+ }
33
+ if (life.time < life.duration) {
34
+ return;
35
+ }
36
+ life.time = noTime;
37
+ if (particle.life.count > noLife) {
38
+ particle.life.count--;
39
+ }
40
+ if (particle.life.count === noLife) {
41
+ particle.destroy();
42
+ return;
43
+ }
44
+ const widthRange = setRangeValue(minCanvasSize, canvasSize.width), heightRange = setRangeValue(minCanvasSize, canvasSize.width);
45
+ particle.position.x = randomInRange(widthRange);
46
+ particle.position.y = randomInRange(heightRange);
47
+ particle.spawning = true;
48
+ life.delayTime = noTime;
49
+ life.time = noTime;
50
+ particle.reset();
51
+ const lifeOptions = particle.options.life;
52
+ if (lifeOptions) {
53
+ life.delay = getRangeValue(lifeOptions.delay.value) * millisecondsToSeconds;
54
+ life.duration = getRangeValue(lifeOptions.duration.value) * millisecondsToSeconds;
55
+ }
56
+ }
package/esm/index.js CHANGED
@@ -1,4 +1,6 @@
1
- import { LifeUpdater } from "./LifeUpdater.js";
2
1
  export async function loadLifeUpdater(engine, refresh = true) {
3
- await engine.addParticleUpdater("life", (container) => new LifeUpdater(container), refresh);
2
+ await engine.addParticleUpdater("life", async (container) => {
3
+ const { LifeUpdater } = await import("./LifeUpdater.js");
4
+ return new LifeUpdater(container);
5
+ }, refresh);
4
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsparticles/updater-life",
3
- "version": "3.0.3",
3
+ "version": "3.2.0",
4
4
  "description": "tsParticles particles life updater",
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.3"
90
+ "@tsparticles/engine": "^3.2.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/updater-life [26 Dec 2023 at 19:32]</title>
6
+ <title>@tsparticles/updater-life [31 Jan 2024 at 02:10]</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,8 +31,8 @@
31
31
  <body>
32
32
  <div id="app"></div>
33
33
  <script>
34
- window.chartData = [{"label":"tsparticles.updater.life.js","isAsset":true,"statSize":4110,"parsedSize":8061,"gzipSize":2189,"groups":[{"label":"dist/browser","path":"./dist/browser","statSize":4068,"groups":[{"id":211,"label":"index.js + 4 modules (concatenated)","path":"./dist/browser/index.js + 4 modules (concatenated)","statSize":4068,"parsedSize":8061,"gzipSize":2189,"concatenated":true,"groups":[{"label":"dist/browser","path":"./dist/browser/index.js + 4 modules (concatenated)/dist/browser","statSize":4068,"groups":[{"id":null,"label":"index.js","path":"./dist/browser/index.js + 4 modules (concatenated)/dist/browser/index.js","statSize":206,"parsedSize":408,"gzipSize":110,"inaccurateSizes":true},{"id":null,"label":"LifeUpdater.js","path":"./dist/browser/index.js + 4 modules (concatenated)/dist/browser/LifeUpdater.js","statSize":2805,"parsedSize":5558,"gzipSize":1509,"inaccurateSizes":true},{"label":"Options/Classes","path":"./dist/browser/index.js + 4 modules (concatenated)/dist/browser/Options/Classes","statSize":1057,"groups":[{"id":null,"label":"Life.js","path":"./dist/browser/index.js + 4 modules (concatenated)/dist/browser/Options/Classes/Life.js","statSize":432,"parsedSize":856,"gzipSize":232,"inaccurateSizes":true},{"id":null,"label":"LifeDelay.js","path":"./dist/browser/index.js + 4 modules (concatenated)/dist/browser/Options/Classes/LifeDelay.js","statSize":311,"parsedSize":616,"gzipSize":167,"inaccurateSizes":true},{"id":null,"label":"LifeDuration.js","path":"./dist/browser/index.js + 4 modules (concatenated)/dist/browser/Options/Classes/LifeDuration.js","statSize":314,"parsedSize":622,"gzipSize":168,"inaccurateSizes":true}],"parsedSize":2094,"gzipSize":568,"inaccurateSizes":true}],"parsedSize":8061,"gzipSize":2189,"inaccurateSizes":true}]}],"parsedSize":8061,"gzipSize":2189},{"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.updater.life":true}}];
35
- window.entrypoints = ["tsparticles.updater.life","tsparticles.updater.life.min"];
34
+ window.chartData = [];
35
+ window.entrypoints = ["tsparticles.updater.life.min"];
36
36
  window.defaultSizes = "parsed";
37
37
  </script>
38
38
  </body>