1 | import { getRangeValue } from "../../Utils";
|
2 | function updateWobble(particle, delta) {
|
3 | var _a;
|
4 | const wobble = particle.options.wobble;
|
5 | if (!wobble.enable || !particle.wobble) {
|
6 | return;
|
7 | }
|
8 | const speed = particle.wobble.speed * delta.factor;
|
9 | const distance = (((_a = particle.retina.wobbleDistance) !== null && _a !== void 0 ? _a : 0) * delta.factor) / (1000 / 60);
|
10 | const max = 2 * Math.PI;
|
11 | particle.wobble.angle += speed;
|
12 | if (particle.wobble.angle > max) {
|
13 | particle.wobble.angle -= max;
|
14 | }
|
15 | particle.position.x += distance * Math.cos(particle.wobble.angle);
|
16 | particle.position.y += distance * Math.abs(Math.sin(particle.wobble.angle));
|
17 | }
|
18 | export class WobbleUpdater {
|
19 | constructor(container) {
|
20 | this.container = container;
|
21 | }
|
22 | init(particle) {
|
23 | const wobbleOpt = particle.options.wobble;
|
24 | if (wobbleOpt.enable) {
|
25 | particle.wobble = {
|
26 | angle: Math.random() * Math.PI * 2,
|
27 | speed: getRangeValue(wobbleOpt.speed) / 360,
|
28 | };
|
29 | }
|
30 | else {
|
31 | particle.wobble = {
|
32 | angle: 0,
|
33 | speed: 0,
|
34 | };
|
35 | }
|
36 | particle.retina.wobbleDistance = getRangeValue(wobbleOpt.distance) * this.container.retina.pixelRatio;
|
37 | }
|
38 | isEnabled(particle) {
|
39 | return !particle.destroyed && !particle.spawning && particle.options.wobble.enable;
|
40 | }
|
41 | update(particle, delta) {
|
42 | if (!this.isEnabled(particle)) {
|
43 | return;
|
44 | }
|
45 | updateWobble(particle, delta);
|
46 | }
|
47 | }
|