@tsparticles/move-base 3.1.0 → 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.
- package/103.min.js +2 -0
- package/103.min.js.LICENSE.txt +1 -0
- package/460.min.js +2 -0
- package/460.min.js.LICENSE.txt +1 -0
- package/browser/BaseMover.js +11 -28
- package/browser/Utils.js +24 -5
- package/browser/index.js +4 -2
- package/cjs/BaseMover.js +35 -29
- package/cjs/Utils.js +25 -5
- package/cjs/index.js +27 -2
- package/dist_browser_BaseMover_js.js +30 -0
- package/dist_browser_Utils_js.js +30 -0
- package/esm/BaseMover.js +11 -28
- package/esm/Utils.js +24 -5
- package/esm/index.js +4 -2
- package/package.json +2 -2
- package/report.html +3 -3
- package/tsparticles.move.base.js +241 -226
- package/tsparticles.move.base.min.js +1 -1
- package/tsparticles.move.base.min.js.LICENSE.txt +1 -1
- package/types/BaseMover.d.ts +2 -3
- package/types/Utils.d.ts +3 -2
- package/umd/BaseMover.js +37 -30
- package/umd/Utils.js +25 -5
- package/umd/index.js +29 -3
package/103.min.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! For license information please see 103.min.js.LICENSE.txt */
|
|
2
|
+
(this.webpackChunk_tsparticles_move_base=this.webpackChunk_tsparticles_move_base||[]).push([[103],{103:(i,e,t)=>{t.d(e,{applyDistance:()=>y,getProximitySpeedFactor:()=>d,initSpin:()=>x,move:()=>p,spin:()=>v});var n=t(533);const a=.5,s=0,o=1,c=60,l=0,r=.01;function y(i){const e=i.initialPosition,{dx:t,dy:o}=(0,n.getDistances)(e,i.position),c=Math.abs(t),l=Math.abs(o),{maxDistance:r}=i.retina,y=r.horizontal,p=r.vertical;if(!y&&!p)return;if(!((y&&c>=y)??!1)&&!((p&&l>=p)??!1)||i.misplaced){if((!y||c<y)&&(!p||l<p)&&i.misplaced)i.misplaced=!1;else if(i.misplaced){const t=i.position,a=i.velocity;y&&(t.x<e.x&&a.x<s||t.x>e.x&&a.x>s)&&(a.x*=-(0,n.getRandom)()),p&&(t.y<e.y&&a.y<s||t.y>e.y&&a.y>s)&&(a.y*=-(0,n.getRandom)())}}else i.misplaced=!!y&&c>y||!!p&&l>p,y&&(i.velocity.x=i.velocity.y*a-i.velocity.x),p&&(i.velocity.y=i.velocity.x*a-i.velocity.y)}async function p(i,e,t,a,l,r){await async function(i,e){const t=i.options,a=t.move.path;if(!a.enable)return;if(i.lastPathTime<=i.pathDelay)return void(i.lastPathTime+=e.value);const s=await(i.pathGenerator?.generate(i,e));s&&i.velocity.addTo(s);a.clamp&&(i.velocity.x=(0,n.clamp)(i.velocity.x,-o,o),i.velocity.y=(0,n.clamp)(i.velocity.y,-o,o));i.lastPathTime-=i.pathDelay}(i,r);const y=i.gravity,p=y?.enable&&y.inverse?-o:o;l&&t&&(i.velocity.x+=l*r.factor/(c*t)),y?.enable&&t&&(i.velocity.y+=p*(y.acceleration*r.factor)/(c*t));const v=i.moveDecay;i.velocity.multTo(v);const d=i.velocity.mult(t);y?.enable&&a>s&&(!y.inverse&&d.y>=s&&d.y>=a||y.inverse&&d.y<=s&&d.y<=-a)&&(d.y=p*a,t&&(i.velocity.y=d.y/t));const x=i.options.zIndex,h=(o-i.zIndexFactor)**x.velocityRate;d.multTo(h);const{position:u}=i;u.addTo(d),e.vibrate&&(u.x+=Math.sin(u.x*Math.cos(u.y)),u.y+=Math.cos(u.y*Math.sin(u.x)))}function v(i,e){const t=i.container;if(!i.spin)return;const n={x:"clockwise"===i.spin.direction?Math.cos:Math.sin,y:"clockwise"===i.spin.direction?Math.sin:Math.cos};i.position.x=i.spin.center.x+i.spin.radius*n.x(i.spin.angle),i.position.y=i.spin.center.y+i.spin.radius*n.y(i.spin.angle),i.spin.radius+=i.spin.acceleration;const s=Math.max(t.canvas.size.width,t.canvas.size.height),c=s*a;i.spin.radius>c?(i.spin.radius=c,i.spin.acceleration*=-o):i.spin.radius<l&&(i.spin.radius=l,i.spin.acceleration*=-o),i.spin.angle+=e*r*(o-i.spin.radius/s)}function d(i){return i.slow.inRange?i.slow.factor:o}function x(i){const e=i.container,t=i.options.move.spin;if(!t.enable)return;const a=t.position??{x:50,y:50},s={x:.01*a.x*e.canvas.size.width,y:.01*a.y*e.canvas.size.height},o=i.getPosition(),c=(0,n.getDistance)(o,s),l=(0,n.getRangeValue)(t.acceleration);i.retina.spinAcceleration=l*e.retina.pixelRatio;i.spin={center:s,direction:i.velocity.x>=0?"clockwise":"counter-clockwise",angle:i.velocity.angle,radius:c,acceleration:i.retina.spinAcceleration}}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! tsParticles Base Move v3.2.0 by Matteo Bruni */
|
package/460.min.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! For license information please see 460.min.js.LICENSE.txt */
|
|
2
|
+
(this.webpackChunk_tsparticles_move_base=this.webpackChunk_tsparticles_move_base||[]).push([[460],{460:(e,a,t)=>{t.d(a,{BaseMover:()=>i});var n=t(533);class i{async init(e){const a=e.options.move.gravity;e.gravity={enable:a.enable,acceleration:(0,n.getRangeValue)(a.acceleration),inverse:a.inverse};const{initSpin:i}=await t.e(103).then(t.bind(t,103));i(e),await Promise.resolve()}isEnabled(e){return!e.destroyed&&e.options.move.enable}async move(e,a){const i=e.options,o=i.move;if(!o.enable)return;const s=e.container,r=s.retina.pixelRatio;e.retina.moveSpeed??=(0,n.getRangeValue)(o.speed)*r,e.retina.moveDrift??=(0,n.getRangeValue)(e.options.move.drift)*r;const{getProximitySpeedFactor:c}=await t.e(103).then(t.bind(t,103)),p=c(e),v=e.retina.moveSpeed*s.retina.reduceFactor,l=e.retina.moveDrift,d=(0,n.getRangeMax)(i.size.value)*r,m=v*(o.size?e.getRadius()/d:1)*p*(a.factor||1)/2,b=e.retina.maxSpeed??s.retina.maxSpeed;if(o.spin.enable){const{spin:a}=await t.e(103).then(t.bind(t,103));a(e,m)}else{const{move:n}=await t.e(103).then(t.bind(t,103));await n(e,o,m,b,l,a)}const{applyDistance:g}=await t.e(103).then(t.bind(t,103));g(e)}}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! tsParticles Base Move v3.2.0 by Matteo Bruni */
|
package/browser/BaseMover.js
CHANGED
|
@@ -1,41 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { applyDistance, getProximitySpeedFactor, move, spin } from "./Utils.js";
|
|
1
|
+
import { getRangeMax, getRangeValue } from "@tsparticles/engine";
|
|
3
2
|
const diffFactor = 2, defaultSizeFactor = 1, defaultDeltaFactor = 1;
|
|
4
3
|
export class BaseMover {
|
|
5
|
-
|
|
6
|
-
this._initSpin = (particle) => {
|
|
7
|
-
const container = particle.container, options = particle.options, spinOptions = options.move.spin;
|
|
8
|
-
if (!spinOptions.enable) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
const spinPos = spinOptions.position ?? { x: 50, y: 50 }, spinFactor = 0.01, spinCenter = {
|
|
12
|
-
x: spinPos.x * spinFactor * container.canvas.size.width,
|
|
13
|
-
y: spinPos.y * spinFactor * container.canvas.size.height,
|
|
14
|
-
}, pos = particle.getPosition(), distance = getDistance(pos, spinCenter), spinAcceleration = getRangeValue(spinOptions.acceleration);
|
|
15
|
-
particle.retina.spinAcceleration = spinAcceleration * container.retina.pixelRatio;
|
|
16
|
-
const minVelocity = 0;
|
|
17
|
-
particle.spin = {
|
|
18
|
-
center: spinCenter,
|
|
19
|
-
direction: particle.velocity.x >= minVelocity ? "clockwise" : "counter-clockwise",
|
|
20
|
-
angle: particle.velocity.angle,
|
|
21
|
-
radius: distance,
|
|
22
|
-
acceleration: particle.retina.spinAcceleration,
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
init(particle) {
|
|
4
|
+
async init(particle) {
|
|
27
5
|
const options = particle.options, gravityOptions = options.move.gravity;
|
|
28
6
|
particle.gravity = {
|
|
29
7
|
enable: gravityOptions.enable,
|
|
30
8
|
acceleration: getRangeValue(gravityOptions.acceleration),
|
|
31
9
|
inverse: gravityOptions.inverse,
|
|
32
10
|
};
|
|
33
|
-
|
|
11
|
+
const { initSpin } = await import("./Utils.js");
|
|
12
|
+
initSpin(particle);
|
|
13
|
+
await Promise.resolve();
|
|
34
14
|
}
|
|
35
15
|
isEnabled(particle) {
|
|
36
16
|
return !particle.destroyed && particle.options.move.enable;
|
|
37
17
|
}
|
|
38
|
-
move(particle, delta) {
|
|
18
|
+
async move(particle, delta) {
|
|
39
19
|
const particleOptions = particle.options, moveOptions = particleOptions.move;
|
|
40
20
|
if (!moveOptions.enable) {
|
|
41
21
|
return;
|
|
@@ -43,13 +23,16 @@ export class BaseMover {
|
|
|
43
23
|
const container = particle.container, pxRatio = container.retina.pixelRatio;
|
|
44
24
|
particle.retina.moveSpeed ??= getRangeValue(moveOptions.speed) * pxRatio;
|
|
45
25
|
particle.retina.moveDrift ??= getRangeValue(particle.options.move.drift) * pxRatio;
|
|
46
|
-
const slowFactor = getProximitySpeedFactor(particle), baseSpeed = particle.retina.moveSpeed * container.retina.reduceFactor, moveDrift = particle.retina.moveDrift, maxSize = getRangeMax(particleOptions.size.value) * pxRatio, sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : defaultSizeFactor, deltaFactor = delta.factor || defaultDeltaFactor, moveSpeed = (baseSpeed * sizeFactor * slowFactor * deltaFactor) / diffFactor, maxSpeed = particle.retina.maxSpeed ?? container.retina.maxSpeed;
|
|
26
|
+
const { getProximitySpeedFactor } = await import("./Utils.js"), slowFactor = getProximitySpeedFactor(particle), baseSpeed = particle.retina.moveSpeed * container.retina.reduceFactor, moveDrift = particle.retina.moveDrift, maxSize = getRangeMax(particleOptions.size.value) * pxRatio, sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : defaultSizeFactor, deltaFactor = delta.factor || defaultDeltaFactor, moveSpeed = (baseSpeed * sizeFactor * slowFactor * deltaFactor) / diffFactor, maxSpeed = particle.retina.maxSpeed ?? container.retina.maxSpeed;
|
|
47
27
|
if (moveOptions.spin.enable) {
|
|
28
|
+
const { spin } = await import("./Utils.js");
|
|
48
29
|
spin(particle, moveSpeed);
|
|
49
30
|
}
|
|
50
31
|
else {
|
|
51
|
-
move
|
|
32
|
+
const { move } = await import("./Utils.js");
|
|
33
|
+
await move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta);
|
|
52
34
|
}
|
|
35
|
+
const { applyDistance } = await import("./Utils.js");
|
|
53
36
|
applyDistance(particle);
|
|
54
37
|
}
|
|
55
38
|
}
|
package/browser/Utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { clamp, getDistances, getRandom, } from "@tsparticles/engine";
|
|
1
|
+
import { clamp, getDistance, getDistances, getRandom, getRangeValue, } from "@tsparticles/engine";
|
|
2
2
|
const half = 0.5, minVelocity = 0, identity = 1, moveSpeedFactor = 60, minSpinRadius = 0, spinFactor = 0.01;
|
|
3
3
|
export function applyDistance(particle) {
|
|
4
4
|
const initialPosition = particle.initialPosition, { dx, dy } = getDistances(initialPosition, particle.position), dxFixed = Math.abs(dx), dyFixed = Math.abs(dy), { maxDistance } = particle.retina, hDistance = maxDistance.horizontal, vDistance = maxDistance.vertical;
|
|
@@ -30,8 +30,8 @@ export function applyDistance(particle) {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
export function move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta) {
|
|
34
|
-
applyPath(particle, delta);
|
|
33
|
+
export async function move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta) {
|
|
34
|
+
await applyPath(particle, delta);
|
|
35
35
|
const gravityOptions = particle.gravity, gravityFactor = gravityOptions?.enable && gravityOptions.inverse ? -identity : identity;
|
|
36
36
|
if (moveDrift && moveSpeed) {
|
|
37
37
|
particle.velocity.x += (moveDrift * delta.factor) / (moveSpeedFactor * moveSpeed);
|
|
@@ -84,7 +84,7 @@ export function spin(particle, moveSpeed) {
|
|
|
84
84
|
}
|
|
85
85
|
particle.spin.angle += moveSpeed * spinFactor * (identity - particle.spin.radius / maxCanvasSize);
|
|
86
86
|
}
|
|
87
|
-
export function applyPath(particle, delta) {
|
|
87
|
+
export async function applyPath(particle, delta) {
|
|
88
88
|
const particlesOptions = particle.options, pathOptions = particlesOptions.move.path, pathEnabled = pathOptions.enable;
|
|
89
89
|
if (!pathEnabled) {
|
|
90
90
|
return;
|
|
@@ -93,7 +93,7 @@ export function applyPath(particle, delta) {
|
|
|
93
93
|
particle.lastPathTime += delta.value;
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
|
-
const path = particle.pathGenerator?.generate(particle, delta);
|
|
96
|
+
const path = await particle.pathGenerator?.generate(particle, delta);
|
|
97
97
|
if (path) {
|
|
98
98
|
particle.velocity.addTo(path);
|
|
99
99
|
}
|
|
@@ -106,3 +106,22 @@ export function applyPath(particle, delta) {
|
|
|
106
106
|
export function getProximitySpeedFactor(particle) {
|
|
107
107
|
return particle.slow.inRange ? particle.slow.factor : identity;
|
|
108
108
|
}
|
|
109
|
+
export function initSpin(particle) {
|
|
110
|
+
const container = particle.container, options = particle.options, spinOptions = options.move.spin;
|
|
111
|
+
if (!spinOptions.enable) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const spinPos = spinOptions.position ?? { x: 50, y: 50 }, spinFactor = 0.01, spinCenter = {
|
|
115
|
+
x: spinPos.x * spinFactor * container.canvas.size.width,
|
|
116
|
+
y: spinPos.y * spinFactor * container.canvas.size.height,
|
|
117
|
+
}, pos = particle.getPosition(), distance = getDistance(pos, spinCenter), spinAcceleration = getRangeValue(spinOptions.acceleration);
|
|
118
|
+
particle.retina.spinAcceleration = spinAcceleration * container.retina.pixelRatio;
|
|
119
|
+
const minVelocity = 0;
|
|
120
|
+
particle.spin = {
|
|
121
|
+
center: spinCenter,
|
|
122
|
+
direction: particle.velocity.x >= minVelocity ? "clockwise" : "counter-clockwise",
|
|
123
|
+
angle: particle.velocity.angle,
|
|
124
|
+
radius: distance,
|
|
125
|
+
acceleration: particle.retina.spinAcceleration,
|
|
126
|
+
};
|
|
127
|
+
}
|
package/browser/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { BaseMover } from "./BaseMover.js";
|
|
2
1
|
export async function loadBaseMover(engine, refresh = true) {
|
|
3
|
-
await engine.addMover("base", () =>
|
|
2
|
+
await engine.addMover("base", async () => {
|
|
3
|
+
const { BaseMover } = await import("./BaseMover.js");
|
|
4
|
+
return new BaseMover();
|
|
5
|
+
}, refresh);
|
|
4
6
|
}
|
package/cjs/BaseMover.js
CHANGED
|
@@ -1,44 +1,47 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
26
|
exports.BaseMover = void 0;
|
|
4
27
|
const engine_1 = require("@tsparticles/engine");
|
|
5
|
-
const Utils_js_1 = require("./Utils.js");
|
|
6
28
|
const diffFactor = 2, defaultSizeFactor = 1, defaultDeltaFactor = 1;
|
|
7
29
|
class BaseMover {
|
|
8
|
-
|
|
9
|
-
this._initSpin = (particle) => {
|
|
10
|
-
const container = particle.container, options = particle.options, spinOptions = options.move.spin;
|
|
11
|
-
if (!spinOptions.enable) {
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
const spinPos = spinOptions.position ?? { x: 50, y: 50 }, spinFactor = 0.01, spinCenter = {
|
|
15
|
-
x: spinPos.x * spinFactor * container.canvas.size.width,
|
|
16
|
-
y: spinPos.y * spinFactor * container.canvas.size.height,
|
|
17
|
-
}, pos = particle.getPosition(), distance = (0, engine_1.getDistance)(pos, spinCenter), spinAcceleration = (0, engine_1.getRangeValue)(spinOptions.acceleration);
|
|
18
|
-
particle.retina.spinAcceleration = spinAcceleration * container.retina.pixelRatio;
|
|
19
|
-
const minVelocity = 0;
|
|
20
|
-
particle.spin = {
|
|
21
|
-
center: spinCenter,
|
|
22
|
-
direction: particle.velocity.x >= minVelocity ? "clockwise" : "counter-clockwise",
|
|
23
|
-
angle: particle.velocity.angle,
|
|
24
|
-
radius: distance,
|
|
25
|
-
acceleration: particle.retina.spinAcceleration,
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
init(particle) {
|
|
30
|
+
async init(particle) {
|
|
30
31
|
const options = particle.options, gravityOptions = options.move.gravity;
|
|
31
32
|
particle.gravity = {
|
|
32
33
|
enable: gravityOptions.enable,
|
|
33
34
|
acceleration: (0, engine_1.getRangeValue)(gravityOptions.acceleration),
|
|
34
35
|
inverse: gravityOptions.inverse,
|
|
35
36
|
};
|
|
36
|
-
|
|
37
|
+
const { initSpin } = await Promise.resolve().then(() => __importStar(require("./Utils.js")));
|
|
38
|
+
initSpin(particle);
|
|
39
|
+
await Promise.resolve();
|
|
37
40
|
}
|
|
38
41
|
isEnabled(particle) {
|
|
39
42
|
return !particle.destroyed && particle.options.move.enable;
|
|
40
43
|
}
|
|
41
|
-
move(particle, delta) {
|
|
44
|
+
async move(particle, delta) {
|
|
42
45
|
const particleOptions = particle.options, moveOptions = particleOptions.move;
|
|
43
46
|
if (!moveOptions.enable) {
|
|
44
47
|
return;
|
|
@@ -46,14 +49,17 @@ class BaseMover {
|
|
|
46
49
|
const container = particle.container, pxRatio = container.retina.pixelRatio;
|
|
47
50
|
particle.retina.moveSpeed ??= (0, engine_1.getRangeValue)(moveOptions.speed) * pxRatio;
|
|
48
51
|
particle.retina.moveDrift ??= (0, engine_1.getRangeValue)(particle.options.move.drift) * pxRatio;
|
|
49
|
-
const
|
|
52
|
+
const { getProximitySpeedFactor } = await Promise.resolve().then(() => __importStar(require("./Utils.js"))), slowFactor = getProximitySpeedFactor(particle), baseSpeed = particle.retina.moveSpeed * container.retina.reduceFactor, moveDrift = particle.retina.moveDrift, maxSize = (0, engine_1.getRangeMax)(particleOptions.size.value) * pxRatio, sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : defaultSizeFactor, deltaFactor = delta.factor || defaultDeltaFactor, moveSpeed = (baseSpeed * sizeFactor * slowFactor * deltaFactor) / diffFactor, maxSpeed = particle.retina.maxSpeed ?? container.retina.maxSpeed;
|
|
50
53
|
if (moveOptions.spin.enable) {
|
|
51
|
-
|
|
54
|
+
const { spin } = await Promise.resolve().then(() => __importStar(require("./Utils.js")));
|
|
55
|
+
spin(particle, moveSpeed);
|
|
52
56
|
}
|
|
53
57
|
else {
|
|
54
|
-
|
|
58
|
+
const { move } = await Promise.resolve().then(() => __importStar(require("./Utils.js")));
|
|
59
|
+
await move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta);
|
|
55
60
|
}
|
|
56
|
-
|
|
61
|
+
const { applyDistance } = await Promise.resolve().then(() => __importStar(require("./Utils.js")));
|
|
62
|
+
applyDistance(particle);
|
|
57
63
|
}
|
|
58
64
|
}
|
|
59
65
|
exports.BaseMover = BaseMover;
|
package/cjs/Utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getProximitySpeedFactor = exports.applyPath = exports.spin = exports.move = exports.applyDistance = void 0;
|
|
3
|
+
exports.initSpin = exports.getProximitySpeedFactor = exports.applyPath = exports.spin = exports.move = exports.applyDistance = void 0;
|
|
4
4
|
const engine_1 = require("@tsparticles/engine");
|
|
5
5
|
const half = 0.5, minVelocity = 0, identity = 1, moveSpeedFactor = 60, minSpinRadius = 0, spinFactor = 0.01;
|
|
6
6
|
function applyDistance(particle) {
|
|
@@ -34,8 +34,8 @@ function applyDistance(particle) {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
exports.applyDistance = applyDistance;
|
|
37
|
-
function move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta) {
|
|
38
|
-
applyPath(particle, delta);
|
|
37
|
+
async function move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta) {
|
|
38
|
+
await applyPath(particle, delta);
|
|
39
39
|
const gravityOptions = particle.gravity, gravityFactor = gravityOptions?.enable && gravityOptions.inverse ? -identity : identity;
|
|
40
40
|
if (moveDrift && moveSpeed) {
|
|
41
41
|
particle.velocity.x += (moveDrift * delta.factor) / (moveSpeedFactor * moveSpeed);
|
|
@@ -90,7 +90,7 @@ function spin(particle, moveSpeed) {
|
|
|
90
90
|
particle.spin.angle += moveSpeed * spinFactor * (identity - particle.spin.radius / maxCanvasSize);
|
|
91
91
|
}
|
|
92
92
|
exports.spin = spin;
|
|
93
|
-
function applyPath(particle, delta) {
|
|
93
|
+
async function applyPath(particle, delta) {
|
|
94
94
|
const particlesOptions = particle.options, pathOptions = particlesOptions.move.path, pathEnabled = pathOptions.enable;
|
|
95
95
|
if (!pathEnabled) {
|
|
96
96
|
return;
|
|
@@ -99,7 +99,7 @@ function applyPath(particle, delta) {
|
|
|
99
99
|
particle.lastPathTime += delta.value;
|
|
100
100
|
return;
|
|
101
101
|
}
|
|
102
|
-
const path = particle.pathGenerator?.generate(particle, delta);
|
|
102
|
+
const path = await particle.pathGenerator?.generate(particle, delta);
|
|
103
103
|
if (path) {
|
|
104
104
|
particle.velocity.addTo(path);
|
|
105
105
|
}
|
|
@@ -114,3 +114,23 @@ function getProximitySpeedFactor(particle) {
|
|
|
114
114
|
return particle.slow.inRange ? particle.slow.factor : identity;
|
|
115
115
|
}
|
|
116
116
|
exports.getProximitySpeedFactor = getProximitySpeedFactor;
|
|
117
|
+
function initSpin(particle) {
|
|
118
|
+
const container = particle.container, options = particle.options, spinOptions = options.move.spin;
|
|
119
|
+
if (!spinOptions.enable) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const spinPos = spinOptions.position ?? { x: 50, y: 50 }, spinFactor = 0.01, spinCenter = {
|
|
123
|
+
x: spinPos.x * spinFactor * container.canvas.size.width,
|
|
124
|
+
y: spinPos.y * spinFactor * container.canvas.size.height,
|
|
125
|
+
}, pos = particle.getPosition(), distance = (0, engine_1.getDistance)(pos, spinCenter), spinAcceleration = (0, engine_1.getRangeValue)(spinOptions.acceleration);
|
|
126
|
+
particle.retina.spinAcceleration = spinAcceleration * container.retina.pixelRatio;
|
|
127
|
+
const minVelocity = 0;
|
|
128
|
+
particle.spin = {
|
|
129
|
+
center: spinCenter,
|
|
130
|
+
direction: particle.velocity.x >= minVelocity ? "clockwise" : "counter-clockwise",
|
|
131
|
+
angle: particle.velocity.angle,
|
|
132
|
+
radius: distance,
|
|
133
|
+
acceleration: particle.retina.spinAcceleration,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
exports.initSpin = initSpin;
|
package/cjs/index.js
CHANGED
|
@@ -1,8 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
26
|
exports.loadBaseMover = void 0;
|
|
4
|
-
const BaseMover_js_1 = require("./BaseMover.js");
|
|
5
27
|
async function loadBaseMover(engine, refresh = true) {
|
|
6
|
-
await engine.addMover("base", () =>
|
|
28
|
+
await engine.addMover("base", async () => {
|
|
29
|
+
const { BaseMover } = await Promise.resolve().then(() => __importStar(require("./BaseMover.js")));
|
|
30
|
+
return new BaseMover();
|
|
31
|
+
}, refresh);
|
|
7
32
|
}
|
|
8
33
|
exports.loadBaseMover = loadBaseMover;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Author : Matteo Bruni
|
|
3
|
+
* MIT license: https://opensource.org/licenses/MIT
|
|
4
|
+
* Demo / Generator : https://particles.js.org/
|
|
5
|
+
* GitHub : https://www.github.com/matteobruni/tsparticles
|
|
6
|
+
* How to use? : Check the GitHub README
|
|
7
|
+
* v3.2.0
|
|
8
|
+
*/
|
|
9
|
+
"use strict";
|
|
10
|
+
/*
|
|
11
|
+
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
|
|
12
|
+
* This devtool is neither made for production nor for readable output files.
|
|
13
|
+
* It uses "eval()" calls to create a separate source file in the browser devtools.
|
|
14
|
+
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
15
|
+
* or disable the default devtool with "devtool: false".
|
|
16
|
+
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
17
|
+
*/
|
|
18
|
+
(this["webpackChunk_tsparticles_move_base"] = this["webpackChunk_tsparticles_move_base"] || []).push([["dist_browser_BaseMover_js"],{
|
|
19
|
+
|
|
20
|
+
/***/ "./dist/browser/BaseMover.js":
|
|
21
|
+
/*!***********************************!*\
|
|
22
|
+
!*** ./dist/browser/BaseMover.js ***!
|
|
23
|
+
\***********************************/
|
|
24
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
25
|
+
|
|
26
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BaseMover: () => (/* binding */ BaseMover)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__);\n\nconst diffFactor = 2,\n defaultSizeFactor = 1,\n defaultDeltaFactor = 1;\nclass BaseMover {\n async init(particle) {\n const options = particle.options,\n gravityOptions = options.move.gravity;\n particle.gravity = {\n enable: gravityOptions.enable,\n acceleration: (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(gravityOptions.acceleration),\n inverse: gravityOptions.inverse\n };\n const {\n initSpin\n } = await __webpack_require__.e(/*! import() */ \"dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"./dist/browser/Utils.js\"));\n initSpin(particle);\n await Promise.resolve();\n }\n isEnabled(particle) {\n return !particle.destroyed && particle.options.move.enable;\n }\n async move(particle, delta) {\n const particleOptions = particle.options,\n moveOptions = particleOptions.move;\n if (!moveOptions.enable) {\n return;\n }\n const container = particle.container,\n pxRatio = container.retina.pixelRatio;\n particle.retina.moveSpeed ??= (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(moveOptions.speed) * pxRatio;\n particle.retina.moveDrift ??= (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(particle.options.move.drift) * pxRatio;\n const {\n getProximitySpeedFactor\n } = await __webpack_require__.e(/*! import() */ \"dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"./dist/browser/Utils.js\")),\n slowFactor = getProximitySpeedFactor(particle),\n baseSpeed = particle.retina.moveSpeed * container.retina.reduceFactor,\n moveDrift = particle.retina.moveDrift,\n maxSize = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeMax)(particleOptions.size.value) * pxRatio,\n sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : defaultSizeFactor,\n deltaFactor = delta.factor || defaultDeltaFactor,\n moveSpeed = baseSpeed * sizeFactor * slowFactor * deltaFactor / diffFactor,\n maxSpeed = particle.retina.maxSpeed ?? container.retina.maxSpeed;\n if (moveOptions.spin.enable) {\n const {\n spin\n } = await __webpack_require__.e(/*! import() */ \"dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"./dist/browser/Utils.js\"));\n spin(particle, moveSpeed);\n } else {\n const {\n move\n } = await __webpack_require__.e(/*! import() */ \"dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"./dist/browser/Utils.js\"));\n await move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta);\n }\n const {\n applyDistance\n } = await __webpack_require__.e(/*! import() */ \"dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"./dist/browser/Utils.js\"));\n applyDistance(particle);\n }\n}\n\n//# sourceURL=webpack://@tsparticles/move-base/./dist/browser/BaseMover.js?");
|
|
27
|
+
|
|
28
|
+
/***/ })
|
|
29
|
+
|
|
30
|
+
}]);
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Author : Matteo Bruni
|
|
3
|
+
* MIT license: https://opensource.org/licenses/MIT
|
|
4
|
+
* Demo / Generator : https://particles.js.org/
|
|
5
|
+
* GitHub : https://www.github.com/matteobruni/tsparticles
|
|
6
|
+
* How to use? : Check the GitHub README
|
|
7
|
+
* v3.2.0
|
|
8
|
+
*/
|
|
9
|
+
"use strict";
|
|
10
|
+
/*
|
|
11
|
+
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
|
|
12
|
+
* This devtool is neither made for production nor for readable output files.
|
|
13
|
+
* It uses "eval()" calls to create a separate source file in the browser devtools.
|
|
14
|
+
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
15
|
+
* or disable the default devtool with "devtool: false".
|
|
16
|
+
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
17
|
+
*/
|
|
18
|
+
(this["webpackChunk_tsparticles_move_base"] = this["webpackChunk_tsparticles_move_base"] || []).push([["dist_browser_Utils_js"],{
|
|
19
|
+
|
|
20
|
+
/***/ "./dist/browser/Utils.js":
|
|
21
|
+
/*!*******************************!*\
|
|
22
|
+
!*** ./dist/browser/Utils.js ***!
|
|
23
|
+
\*******************************/
|
|
24
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
25
|
+
|
|
26
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ applyDistance: () => (/* binding */ applyDistance),\n/* harmony export */ applyPath: () => (/* binding */ applyPath),\n/* harmony export */ getProximitySpeedFactor: () => (/* binding */ getProximitySpeedFactor),\n/* harmony export */ initSpin: () => (/* binding */ initSpin),\n/* harmony export */ move: () => (/* binding */ move),\n/* harmony export */ spin: () => (/* binding */ spin)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__);\n\nconst half = 0.5,\n minVelocity = 0,\n identity = 1,\n moveSpeedFactor = 60,\n minSpinRadius = 0,\n spinFactor = 0.01;\nfunction applyDistance(particle) {\n const initialPosition = particle.initialPosition,\n {\n dx,\n dy\n } = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getDistances)(initialPosition, particle.position),\n dxFixed = Math.abs(dx),\n dyFixed = Math.abs(dy),\n {\n maxDistance\n } = particle.retina,\n hDistance = maxDistance.horizontal,\n vDistance = maxDistance.vertical;\n if (!hDistance && !vDistance) {\n return;\n }\n const hasHDistance = (hDistance && dxFixed >= hDistance) ?? false,\n hasVDistance = (vDistance && dyFixed >= vDistance) ?? false;\n if ((hasHDistance || hasVDistance) && !particle.misplaced) {\n particle.misplaced = !!hDistance && dxFixed > hDistance || !!vDistance && dyFixed > vDistance;\n if (hDistance) {\n particle.velocity.x = particle.velocity.y * half - particle.velocity.x;\n }\n if (vDistance) {\n particle.velocity.y = particle.velocity.x * half - particle.velocity.y;\n }\n } else if ((!hDistance || dxFixed < hDistance) && (!vDistance || dyFixed < vDistance) && particle.misplaced) {\n particle.misplaced = false;\n } else if (particle.misplaced) {\n const pos = particle.position,\n vel = particle.velocity;\n if (hDistance && (pos.x < initialPosition.x && vel.x < minVelocity || pos.x > initialPosition.x && vel.x > minVelocity)) {\n vel.x *= -(0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRandom)();\n }\n if (vDistance && (pos.y < initialPosition.y && vel.y < minVelocity || pos.y > initialPosition.y && vel.y > minVelocity)) {\n vel.y *= -(0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRandom)();\n }\n }\n}\nasync function move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta) {\n await applyPath(particle, delta);\n const gravityOptions = particle.gravity,\n gravityFactor = gravityOptions?.enable && gravityOptions.inverse ? -identity : identity;\n if (moveDrift && moveSpeed) {\n particle.velocity.x += moveDrift * delta.factor / (moveSpeedFactor * moveSpeed);\n }\n if (gravityOptions?.enable && moveSpeed) {\n particle.velocity.y += gravityFactor * (gravityOptions.acceleration * delta.factor) / (moveSpeedFactor * moveSpeed);\n }\n const decay = particle.moveDecay;\n particle.velocity.multTo(decay);\n const velocity = particle.velocity.mult(moveSpeed);\n if (gravityOptions?.enable && maxSpeed > minVelocity && (!gravityOptions.inverse && velocity.y >= minVelocity && velocity.y >= maxSpeed || gravityOptions.inverse && velocity.y <= minVelocity && velocity.y <= -maxSpeed)) {\n velocity.y = gravityFactor * maxSpeed;\n if (moveSpeed) {\n particle.velocity.y = velocity.y / moveSpeed;\n }\n }\n const zIndexOptions = particle.options.zIndex,\n zVelocityFactor = (identity - particle.zIndexFactor) ** zIndexOptions.velocityRate;\n velocity.multTo(zVelocityFactor);\n const {\n position\n } = particle;\n position.addTo(velocity);\n if (moveOptions.vibrate) {\n position.x += Math.sin(position.x * Math.cos(position.y));\n position.y += Math.cos(position.y * Math.sin(position.x));\n }\n}\nfunction spin(particle, moveSpeed) {\n const container = particle.container;\n if (!particle.spin) {\n return;\n }\n const updateFunc = {\n x: particle.spin.direction === \"clockwise\" ? Math.cos : Math.sin,\n y: particle.spin.direction === \"clockwise\" ? Math.sin : Math.cos\n };\n particle.position.x = particle.spin.center.x + particle.spin.radius * updateFunc.x(particle.spin.angle);\n particle.position.y = particle.spin.center.y + particle.spin.radius * updateFunc.y(particle.spin.angle);\n particle.spin.radius += particle.spin.acceleration;\n const maxCanvasSize = Math.max(container.canvas.size.width, container.canvas.size.height),\n halfMaxSize = maxCanvasSize * half;\n if (particle.spin.radius > halfMaxSize) {\n particle.spin.radius = halfMaxSize;\n particle.spin.acceleration *= -identity;\n } else if (particle.spin.radius < minSpinRadius) {\n particle.spin.radius = minSpinRadius;\n particle.spin.acceleration *= -identity;\n }\n particle.spin.angle += moveSpeed * spinFactor * (identity - particle.spin.radius / maxCanvasSize);\n}\nasync function applyPath(particle, delta) {\n const particlesOptions = particle.options,\n pathOptions = particlesOptions.move.path,\n pathEnabled = pathOptions.enable;\n if (!pathEnabled) {\n return;\n }\n if (particle.lastPathTime <= particle.pathDelay) {\n particle.lastPathTime += delta.value;\n return;\n }\n const path = await particle.pathGenerator?.generate(particle, delta);\n if (path) {\n particle.velocity.addTo(path);\n }\n if (pathOptions.clamp) {\n particle.velocity.x = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.clamp)(particle.velocity.x, -identity, identity);\n particle.velocity.y = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.clamp)(particle.velocity.y, -identity, identity);\n }\n particle.lastPathTime -= particle.pathDelay;\n}\nfunction getProximitySpeedFactor(particle) {\n return particle.slow.inRange ? particle.slow.factor : identity;\n}\nfunction initSpin(particle) {\n const container = particle.container,\n options = particle.options,\n spinOptions = options.move.spin;\n if (!spinOptions.enable) {\n return;\n }\n const spinPos = spinOptions.position ?? {\n x: 50,\n y: 50\n },\n spinFactor = 0.01,\n spinCenter = {\n x: spinPos.x * spinFactor * container.canvas.size.width,\n y: spinPos.y * spinFactor * container.canvas.size.height\n },\n pos = particle.getPosition(),\n distance = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getDistance)(pos, spinCenter),\n spinAcceleration = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(spinOptions.acceleration);\n particle.retina.spinAcceleration = spinAcceleration * container.retina.pixelRatio;\n const minVelocity = 0;\n particle.spin = {\n center: spinCenter,\n direction: particle.velocity.x >= minVelocity ? \"clockwise\" : \"counter-clockwise\",\n angle: particle.velocity.angle,\n radius: distance,\n acceleration: particle.retina.spinAcceleration\n };\n}\n\n//# sourceURL=webpack://@tsparticles/move-base/./dist/browser/Utils.js?");
|
|
27
|
+
|
|
28
|
+
/***/ })
|
|
29
|
+
|
|
30
|
+
}]);
|
package/esm/BaseMover.js
CHANGED
|
@@ -1,41 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { applyDistance, getProximitySpeedFactor, move, spin } from "./Utils.js";
|
|
1
|
+
import { getRangeMax, getRangeValue } from "@tsparticles/engine";
|
|
3
2
|
const diffFactor = 2, defaultSizeFactor = 1, defaultDeltaFactor = 1;
|
|
4
3
|
export class BaseMover {
|
|
5
|
-
|
|
6
|
-
this._initSpin = (particle) => {
|
|
7
|
-
const container = particle.container, options = particle.options, spinOptions = options.move.spin;
|
|
8
|
-
if (!spinOptions.enable) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
const spinPos = spinOptions.position ?? { x: 50, y: 50 }, spinFactor = 0.01, spinCenter = {
|
|
12
|
-
x: spinPos.x * spinFactor * container.canvas.size.width,
|
|
13
|
-
y: spinPos.y * spinFactor * container.canvas.size.height,
|
|
14
|
-
}, pos = particle.getPosition(), distance = getDistance(pos, spinCenter), spinAcceleration = getRangeValue(spinOptions.acceleration);
|
|
15
|
-
particle.retina.spinAcceleration = spinAcceleration * container.retina.pixelRatio;
|
|
16
|
-
const minVelocity = 0;
|
|
17
|
-
particle.spin = {
|
|
18
|
-
center: spinCenter,
|
|
19
|
-
direction: particle.velocity.x >= minVelocity ? "clockwise" : "counter-clockwise",
|
|
20
|
-
angle: particle.velocity.angle,
|
|
21
|
-
radius: distance,
|
|
22
|
-
acceleration: particle.retina.spinAcceleration,
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
init(particle) {
|
|
4
|
+
async init(particle) {
|
|
27
5
|
const options = particle.options, gravityOptions = options.move.gravity;
|
|
28
6
|
particle.gravity = {
|
|
29
7
|
enable: gravityOptions.enable,
|
|
30
8
|
acceleration: getRangeValue(gravityOptions.acceleration),
|
|
31
9
|
inverse: gravityOptions.inverse,
|
|
32
10
|
};
|
|
33
|
-
|
|
11
|
+
const { initSpin } = await import("./Utils.js");
|
|
12
|
+
initSpin(particle);
|
|
13
|
+
await Promise.resolve();
|
|
34
14
|
}
|
|
35
15
|
isEnabled(particle) {
|
|
36
16
|
return !particle.destroyed && particle.options.move.enable;
|
|
37
17
|
}
|
|
38
|
-
move(particle, delta) {
|
|
18
|
+
async move(particle, delta) {
|
|
39
19
|
const particleOptions = particle.options, moveOptions = particleOptions.move;
|
|
40
20
|
if (!moveOptions.enable) {
|
|
41
21
|
return;
|
|
@@ -43,13 +23,16 @@ export class BaseMover {
|
|
|
43
23
|
const container = particle.container, pxRatio = container.retina.pixelRatio;
|
|
44
24
|
particle.retina.moveSpeed ??= getRangeValue(moveOptions.speed) * pxRatio;
|
|
45
25
|
particle.retina.moveDrift ??= getRangeValue(particle.options.move.drift) * pxRatio;
|
|
46
|
-
const slowFactor = getProximitySpeedFactor(particle), baseSpeed = particle.retina.moveSpeed * container.retina.reduceFactor, moveDrift = particle.retina.moveDrift, maxSize = getRangeMax(particleOptions.size.value) * pxRatio, sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : defaultSizeFactor, deltaFactor = delta.factor || defaultDeltaFactor, moveSpeed = (baseSpeed * sizeFactor * slowFactor * deltaFactor) / diffFactor, maxSpeed = particle.retina.maxSpeed ?? container.retina.maxSpeed;
|
|
26
|
+
const { getProximitySpeedFactor } = await import("./Utils.js"), slowFactor = getProximitySpeedFactor(particle), baseSpeed = particle.retina.moveSpeed * container.retina.reduceFactor, moveDrift = particle.retina.moveDrift, maxSize = getRangeMax(particleOptions.size.value) * pxRatio, sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : defaultSizeFactor, deltaFactor = delta.factor || defaultDeltaFactor, moveSpeed = (baseSpeed * sizeFactor * slowFactor * deltaFactor) / diffFactor, maxSpeed = particle.retina.maxSpeed ?? container.retina.maxSpeed;
|
|
47
27
|
if (moveOptions.spin.enable) {
|
|
28
|
+
const { spin } = await import("./Utils.js");
|
|
48
29
|
spin(particle, moveSpeed);
|
|
49
30
|
}
|
|
50
31
|
else {
|
|
51
|
-
move
|
|
32
|
+
const { move } = await import("./Utils.js");
|
|
33
|
+
await move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta);
|
|
52
34
|
}
|
|
35
|
+
const { applyDistance } = await import("./Utils.js");
|
|
53
36
|
applyDistance(particle);
|
|
54
37
|
}
|
|
55
38
|
}
|
package/esm/Utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { clamp, getDistances, getRandom, } from "@tsparticles/engine";
|
|
1
|
+
import { clamp, getDistance, getDistances, getRandom, getRangeValue, } from "@tsparticles/engine";
|
|
2
2
|
const half = 0.5, minVelocity = 0, identity = 1, moveSpeedFactor = 60, minSpinRadius = 0, spinFactor = 0.01;
|
|
3
3
|
export function applyDistance(particle) {
|
|
4
4
|
const initialPosition = particle.initialPosition, { dx, dy } = getDistances(initialPosition, particle.position), dxFixed = Math.abs(dx), dyFixed = Math.abs(dy), { maxDistance } = particle.retina, hDistance = maxDistance.horizontal, vDistance = maxDistance.vertical;
|
|
@@ -30,8 +30,8 @@ export function applyDistance(particle) {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
export function move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta) {
|
|
34
|
-
applyPath(particle, delta);
|
|
33
|
+
export async function move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta) {
|
|
34
|
+
await applyPath(particle, delta);
|
|
35
35
|
const gravityOptions = particle.gravity, gravityFactor = gravityOptions?.enable && gravityOptions.inverse ? -identity : identity;
|
|
36
36
|
if (moveDrift && moveSpeed) {
|
|
37
37
|
particle.velocity.x += (moveDrift * delta.factor) / (moveSpeedFactor * moveSpeed);
|
|
@@ -84,7 +84,7 @@ export function spin(particle, moveSpeed) {
|
|
|
84
84
|
}
|
|
85
85
|
particle.spin.angle += moveSpeed * spinFactor * (identity - particle.spin.radius / maxCanvasSize);
|
|
86
86
|
}
|
|
87
|
-
export function applyPath(particle, delta) {
|
|
87
|
+
export async function applyPath(particle, delta) {
|
|
88
88
|
const particlesOptions = particle.options, pathOptions = particlesOptions.move.path, pathEnabled = pathOptions.enable;
|
|
89
89
|
if (!pathEnabled) {
|
|
90
90
|
return;
|
|
@@ -93,7 +93,7 @@ export function applyPath(particle, delta) {
|
|
|
93
93
|
particle.lastPathTime += delta.value;
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
|
-
const path = particle.pathGenerator?.generate(particle, delta);
|
|
96
|
+
const path = await particle.pathGenerator?.generate(particle, delta);
|
|
97
97
|
if (path) {
|
|
98
98
|
particle.velocity.addTo(path);
|
|
99
99
|
}
|
|
@@ -106,3 +106,22 @@ export function applyPath(particle, delta) {
|
|
|
106
106
|
export function getProximitySpeedFactor(particle) {
|
|
107
107
|
return particle.slow.inRange ? particle.slow.factor : identity;
|
|
108
108
|
}
|
|
109
|
+
export function initSpin(particle) {
|
|
110
|
+
const container = particle.container, options = particle.options, spinOptions = options.move.spin;
|
|
111
|
+
if (!spinOptions.enable) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const spinPos = spinOptions.position ?? { x: 50, y: 50 }, spinFactor = 0.01, spinCenter = {
|
|
115
|
+
x: spinPos.x * spinFactor * container.canvas.size.width,
|
|
116
|
+
y: spinPos.y * spinFactor * container.canvas.size.height,
|
|
117
|
+
}, pos = particle.getPosition(), distance = getDistance(pos, spinCenter), spinAcceleration = getRangeValue(spinOptions.acceleration);
|
|
118
|
+
particle.retina.spinAcceleration = spinAcceleration * container.retina.pixelRatio;
|
|
119
|
+
const minVelocity = 0;
|
|
120
|
+
particle.spin = {
|
|
121
|
+
center: spinCenter,
|
|
122
|
+
direction: particle.velocity.x >= minVelocity ? "clockwise" : "counter-clockwise",
|
|
123
|
+
angle: particle.velocity.angle,
|
|
124
|
+
radius: distance,
|
|
125
|
+
acceleration: particle.retina.spinAcceleration,
|
|
126
|
+
};
|
|
127
|
+
}
|
package/esm/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { BaseMover } from "./BaseMover.js";
|
|
2
1
|
export async function loadBaseMover(engine, refresh = true) {
|
|
3
|
-
await engine.addMover("base", () =>
|
|
2
|
+
await engine.addMover("base", async () => {
|
|
3
|
+
const { BaseMover } = await import("./BaseMover.js");
|
|
4
|
+
return new BaseMover();
|
|
5
|
+
}, refresh);
|
|
4
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsparticles/move-base",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "tsParticles Base movement",
|
|
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.
|
|
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/move-base [
|
|
6
|
+
<title>@tsparticles/move-base [31 Jan 2024 at 02:05]</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 = [
|
|
35
|
-
window.entrypoints = ["tsparticles.move.base
|
|
34
|
+
window.chartData = [];
|
|
35
|
+
window.entrypoints = ["tsparticles.move.base.min"];
|
|
36
36
|
window.defaultSizes = "parsed";
|
|
37
37
|
</script>
|
|
38
38
|
</body>
|