custom-pixi-particles 4.9.1 → 4.11.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.
@@ -202,6 +202,10 @@ export default class Particle {
202
202
  direction: number;
203
203
  noiseOffset: Point;
204
204
  timeline: any[];
205
+ initialDirectionCos: number;
206
+ initialDirectionSin: number;
207
+ velocityScale: number;
208
+ rotationAcceleration: number;
205
209
  /**
206
210
  * Constructs a particle object
207
211
  */
@@ -88,6 +88,10 @@ class Particle {
88
88
  this.direction = 1;
89
89
  this.noiseOffset = new Point();
90
90
  this.timeline = [];
91
+ this.initialDirectionCos = 0;
92
+ this.initialDirectionSin = 0;
93
+ this.velocityScale = 1;
94
+ this.rotationAcceleration = 0;
91
95
  this.reset();
92
96
  }
93
97
  /**
@@ -157,6 +161,10 @@ class Particle {
157
161
  this.xTarget = 0;
158
162
  this.yTarget = 0;
159
163
  this.noiseOffset = new Point();
164
+ this.initialDirectionCos = 0;
165
+ this.initialDirectionSin = 0;
166
+ this.velocityScale = 1;
167
+ this.rotationAcceleration = 0;
160
168
  }
161
169
  /**
162
170
  * Checks if the particle is almost dead
@@ -1 +1 @@
1
- {"version":3,"file":"Particle.js","sourceRoot":"","sources":["../../src/lib/Particle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Particle.js","sourceRoot":"","sources":["../../src/lib/Particle.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,5 @@
1
1
  import Behaviour from './Behaviour';
2
2
  import Particle from '../Particle';
3
- /**
4
- * AngularVelocityBehaviour is a subclass of Behaviour and defines the angular velocity of a particle.
5
- *
6
- * @class AngularVelocityBehaviour
7
- * @extends {Behaviour}
8
- */
9
3
  export default class AngularVelocityBehaviour extends Behaviour {
10
4
  protected priority: number;
11
5
  private enabled;
@@ -15,6 +9,11 @@ export default class AngularVelocityBehaviour extends Behaviour {
15
9
  private maxRadiusVariance;
16
10
  private minRadius;
17
11
  private minRadiusVariance;
12
+ private oscillate;
13
+ private oscillationSpeed;
14
+ private oscillationAmplitude;
15
+ private linearRadiusReduction;
16
+ private dynamicRadius;
18
17
  /**
19
18
  * Initializes particle properties of the behaviour
20
19
  *
@@ -51,6 +50,11 @@ export default class AngularVelocityBehaviour extends Behaviour {
51
50
  maxRadiusVariance: number;
52
51
  minRadius: number;
53
52
  minRadiusVariance: number;
53
+ oscillate: boolean;
54
+ oscillationSpeed: number;
55
+ oscillationAmplitude: number;
56
+ linearRadiusReduction: boolean;
57
+ dynamicRadius: boolean;
54
58
  priority: number;
55
59
  name: string;
56
60
  };
@@ -1,12 +1,6 @@
1
1
  import Behaviour from './Behaviour';
2
2
  import math from '../util/maths';
3
3
  import BehaviourNames from './BehaviourNames';
4
- /**
5
- * AngularVelocityBehaviour is a subclass of Behaviour and defines the angular velocity of a particle.
6
- *
7
- * @class AngularVelocityBehaviour
8
- * @extends {Behaviour}
9
- */
10
4
  export default class AngularVelocityBehaviour extends Behaviour {
11
5
  constructor() {
12
6
  super(...arguments);
@@ -18,6 +12,11 @@ export default class AngularVelocityBehaviour extends Behaviour {
18
12
  this.maxRadiusVariance = 0;
19
13
  this.minRadius = 0;
20
14
  this.minRadiusVariance = 0;
15
+ this.oscillate = false; // Oscillate angular velocity
16
+ this.oscillationSpeed = 1; // Speed of oscillation
17
+ this.oscillationAmplitude = 10; // Amplitude of oscillation in degrees
18
+ this.linearRadiusReduction = true; // Linear or exponential radius reduction
19
+ this.dynamicRadius = false; // Allow dynamic radius changes during lifetime
21
20
  /**
22
21
  * Initializes particle properties of the behaviour
23
22
  *
@@ -29,8 +28,10 @@ export default class AngularVelocityBehaviour extends Behaviour {
29
28
  return;
30
29
  particle.radiansPerSecond = math.degreesToRadians(this.degrees + this.varianceFrom(this.degreesVariance));
31
30
  const radiusStart = this.maxRadius + this.varianceFrom(this.maxRadiusVariance);
31
+ const radiusEnd = this.minRadius + this.varianceFrom(this.minRadiusVariance);
32
32
  particle.radiusStart = radiusStart;
33
- particle.radiusEnd = this.minRadius + this.varianceFrom(this.minRadiusVariance);
33
+ particle.radiusEnd = radiusEnd;
34
+ particle.velocityAngle = 0;
34
35
  particle.x = 0;
35
36
  particle.y = 0;
36
37
  particle.radius = radiusStart;
@@ -48,13 +49,32 @@ export default class AngularVelocityBehaviour extends Behaviour {
48
49
  return;
49
50
  if (particle.skipAngularVelocityBehaviour)
50
51
  return;
51
- const { radiusStart, radiusEnd, radiansPerSecond, lifeProgress } = particle;
52
- const velocityAngle = particle.velocityAngle + radiansPerSecond * deltaTime;
53
- const radius = radiusStart + (radiusEnd - radiusStart) * lifeProgress;
54
- const movementX = Math.cos(velocityAngle) * radius;
55
- const movementY = Math.sin(velocityAngle) * radius;
56
- particle.velocityAngle = velocityAngle;
57
- particle.radius = radius;
52
+ const { radiusStart, radiusEnd, radiansPerSecond, lifeProgress, velocityAngle } = particle;
53
+ let angleVelocity = radiansPerSecond;
54
+ // Oscillation logic
55
+ if (this.oscillate) {
56
+ const oscillationFactor = Math.sin(particle.lifeTime * this.oscillationSpeed) * this.oscillationAmplitude;
57
+ angleVelocity += math.degreesToRadians(oscillationFactor);
58
+ }
59
+ // Update angle
60
+ const newVelocityAngle = velocityAngle + angleVelocity * deltaTime;
61
+ // Radius calculation
62
+ let newRadius;
63
+ if (this.linearRadiusReduction) {
64
+ newRadius = radiusStart + (radiusEnd - radiusStart) * lifeProgress;
65
+ }
66
+ else {
67
+ // Exponential radius reduction
68
+ const progressFactor = Math.pow(lifeProgress, 2);
69
+ newRadius = radiusStart + (radiusEnd - radiusStart) * progressFactor;
70
+ }
71
+ if (this.dynamicRadius) {
72
+ newRadius += Math.sin(particle.lifeTime * 2 * Math.PI) * 5; // Example dynamic change
73
+ }
74
+ const movementX = Math.cos(newVelocityAngle) * newRadius;
75
+ const movementY = Math.sin(newVelocityAngle) * newRadius;
76
+ particle.velocityAngle = newVelocityAngle;
77
+ particle.radius = newRadius;
58
78
  particle.movement.x = movementX;
59
79
  particle.movement.y = movementY;
60
80
  particle.x = movementX;
@@ -85,6 +105,11 @@ export default class AngularVelocityBehaviour extends Behaviour {
85
105
  maxRadiusVariance: this.maxRadiusVariance,
86
106
  minRadius: this.minRadius,
87
107
  minRadiusVariance: this.minRadiusVariance,
108
+ oscillate: this.oscillate,
109
+ oscillationSpeed: this.oscillationSpeed,
110
+ oscillationAmplitude: this.oscillationAmplitude,
111
+ linearRadiusReduction: this.linearRadiusReduction,
112
+ dynamicRadius: this.dynamicRadius,
88
113
  priority: this.priority,
89
114
  name: this.getName(),
90
115
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AngularVelocityBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/AngularVelocityBehaviour.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AngularVelocityBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/AngularVelocityBehaviour.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,22 @@ export default class ColorBehaviour extends Behaviour {
9
9
  startVariance: Color;
10
10
  endVariance: Color;
11
11
  sinus: boolean;
12
+ colorStops: Color[];
13
+ usePerlin: boolean;
14
+ pulseSpeed: number;
15
+ pulseIntensity: number;
16
+ mirrorTransition: boolean;
17
+ fadeToGray: boolean;
18
+ fadeToTransparent: boolean;
19
+ flickerIntensity: number;
12
20
  init: (particle: Particle) => void;
13
21
  apply: (particle: Particle) => void;
22
+ applyColorStops: (particle: Particle, lifeProgress: number) => void;
23
+ pseudoRandomNoise(seed: number): number;
24
+ applyPerlinColor: (particle: Particle, lifeProgress: number) => void;
25
+ applyPulseEffect: (particle: Particle, lifeProgress: number) => void;
26
+ applyFadeToGray: (particle: Particle) => void;
27
+ applyFlickering: (particle: Particle) => void;
14
28
  getName(): string;
15
29
  getProps(): {
16
30
  enabled: boolean;
@@ -40,6 +54,14 @@ export default class ColorBehaviour extends Behaviour {
40
54
  _alpha: number;
41
55
  };
42
56
  sinus: boolean;
57
+ colorStops: Color[];
58
+ usePerlin: boolean;
59
+ pulseSpeed: number;
60
+ pulseIntensity: number;
61
+ mirrorTransition: boolean;
62
+ fadeToGray: boolean;
63
+ fadeToTransparent: boolean;
64
+ flickerIntensity: number;
43
65
  name: string;
44
66
  };
45
67
  }
@@ -11,6 +11,15 @@ export default class ColorBehaviour extends Behaviour {
11
11
  this.startVariance = new Color(0, 0, 0, 0);
12
12
  this.endVariance = new Color(0, 0, 0, 0);
13
13
  this.sinus = false;
14
+ // New properties
15
+ this.colorStops = []; // Multi-gradient stops
16
+ this.usePerlin = false; // Enable Perlin noise-based color changes
17
+ this.pulseSpeed = 1; // Speed of the pulse effect
18
+ this.pulseIntensity = 0.5; // Intensity of the pulse effect
19
+ this.mirrorTransition = false; // Mirror the color transition midway
20
+ this.fadeToGray = false; // Desaturate color over time
21
+ this.fadeToTransparent = false; // Fade alpha over time
22
+ this.flickerIntensity = 0.3; // Intensity of random flickering
14
23
  this.init = (particle) => {
15
24
  if (!this.enabled)
16
25
  return;
@@ -31,18 +40,107 @@ export default class ColorBehaviour extends Behaviour {
31
40
  return;
32
41
  if (particle.skipColorBehaviour)
33
42
  return;
34
- const { colorStart, lifeProgress, colorEnd } = particle;
43
+ const { lifeProgress } = particle;
44
+ // Multi-gradient color transitions
45
+ if (this.colorStops.length > 0) {
46
+ this.applyColorStops(particle, lifeProgress);
47
+ if (this.sinus) {
48
+ particle.color.alpha = Math.sin(lifeProgress * 3.1);
49
+ }
50
+ else if (this.fadeToTransparent) {
51
+ particle.color.alpha = (1 - lifeProgress) * this.start.alpha;
52
+ }
53
+ return;
54
+ }
55
+ // Perlin noise color changes
56
+ if (this.usePerlin) {
57
+ this.applyPerlinColor(particle, lifeProgress);
58
+ return;
59
+ }
60
+ // Default linear gradient behavior
61
+ const { colorStart, colorEnd } = particle;
62
+ let effectiveProgress = lifeProgress;
63
+ // Mirror transition if enabled
64
+ if (this.mirrorTransition) {
65
+ effectiveProgress = lifeProgress < 0.5 ? lifeProgress * 2 : (1 - lifeProgress) * 2;
66
+ }
35
67
  particle.color.copyFrom(colorStart);
36
- particle.color.r += (colorEnd.r - colorStart.r) * lifeProgress;
37
- particle.color.g += (colorEnd.g - colorStart.g) * lifeProgress;
38
- particle.color.b += (colorEnd.b - colorStart.b) * lifeProgress;
68
+ particle.color.r += (colorEnd.r - colorStart.r) * effectiveProgress;
69
+ particle.color.g += (colorEnd.g - colorStart.g) * effectiveProgress;
70
+ particle.color.b += (colorEnd.b - colorStart.b) * effectiveProgress;
39
71
  if (!this.sinus) {
40
- particle.color.alpha += (colorEnd.alpha - colorStart.alpha) * lifeProgress;
72
+ particle.color.alpha += (colorEnd.alpha - colorStart.alpha) * effectiveProgress;
41
73
  }
42
74
  else {
43
- particle.color.alpha = Math.sin(lifeProgress * 3.1);
75
+ if (!this.fadeToTransparent) {
76
+ particle.color.alpha = Math.sin(effectiveProgress * 3.1);
77
+ }
78
+ }
79
+ // Apply pulse effect if enabled
80
+ if (this.pulseIntensity > 0) {
81
+ this.applyPulseEffect(particle, lifeProgress);
82
+ }
83
+ // Desaturation (fade to gray)
84
+ if (this.fadeToGray) {
85
+ this.applyFadeToGray(particle);
86
+ }
87
+ // Alpha fading (fade to transparent)
88
+ if (this.fadeToTransparent && !this.sinus) {
89
+ particle.color.alpha = (1 - lifeProgress) * this.start.alpha;
44
90
  }
91
+ // Flickering effect
92
+ this.applyFlickering(particle);
45
93
  };
94
+ this.applyColorStops = (particle, lifeProgress) => {
95
+ const { colorStops } = this;
96
+ // Ensure at least two color stops exist
97
+ if (colorStops.length < 2) {
98
+ console.warn('ColorBehaviour: At least two color stops are required.');
99
+ return;
100
+ }
101
+ // Clamp segment to valid range
102
+ const segment = Math.floor(lifeProgress * (colorStops.length - 1));
103
+ const nextSegment = Math.min(segment + 1, colorStops.length - 1); // Prevent out-of-bounds access
104
+ const t = lifeProgress * (colorStops.length - 1) - segment;
105
+ const startColor = colorStops[segment];
106
+ const endColor = colorStops[nextSegment]; // Safely access the next color stop
107
+ particle.color.r = startColor.r + (endColor.r - startColor.r) * t;
108
+ particle.color.g = startColor.g + (endColor.g - startColor.g) * t;
109
+ particle.color.b = startColor.b + (endColor.b - startColor.b) * t;
110
+ particle.color.alpha = startColor.alpha + (endColor.alpha - startColor.alpha) * t;
111
+ };
112
+ this.applyPerlinColor = (particle, lifeProgress) => {
113
+ const time = lifeProgress * 10; // Scale time
114
+ particle.color.r = this.pseudoRandomNoise(time) * 255;
115
+ particle.color.g = this.pseudoRandomNoise(time + 1) * 255;
116
+ particle.color.b = this.pseudoRandomNoise(time + 2) * 255;
117
+ particle.color.alpha = this.pseudoRandomNoise(time + 3);
118
+ };
119
+ this.applyPulseEffect = (particle, lifeProgress) => {
120
+ // Compute pulse value based on life progress, speed, and intensity
121
+ const pulse = 1 + Math.sin(lifeProgress * this.pulseSpeed * Math.PI * 2) * this.pulseIntensity;
122
+ // Apply pulse effect to the color
123
+ particle.color.r = Math.max(0, Math.min(255, particle.color.r * pulse));
124
+ particle.color.g = Math.max(0, Math.min(255, particle.color.g * pulse));
125
+ particle.color.b = Math.max(0, Math.min(255, particle.color.b * pulse));
126
+ };
127
+ this.applyFadeToGray = (particle) => {
128
+ const { color } = particle;
129
+ const gray = (color.r + color.g + color.b) / 3;
130
+ particle.color.r = gray;
131
+ particle.color.g = gray;
132
+ particle.color.b = gray;
133
+ };
134
+ this.applyFlickering = (particle) => {
135
+ const flickerAmount = (Math.random() - 0.5) * this.flickerIntensity * 255;
136
+ particle.color.r = Math.max(0, Math.min(255, particle.color.r + flickerAmount));
137
+ particle.color.g = Math.max(0, Math.min(255, particle.color.g + flickerAmount));
138
+ particle.color.b = Math.max(0, Math.min(255, particle.color.b + flickerAmount));
139
+ };
140
+ }
141
+ pseudoRandomNoise(seed) {
142
+ const x = Math.sin(seed) * 10000;
143
+ return x - Math.floor(x); // Returns a value between 0 and 1
46
144
  }
47
145
  getName() {
48
146
  return BehaviourNames.COLOR_BEHAVIOUR;
@@ -76,6 +174,14 @@ export default class ColorBehaviour extends Behaviour {
76
174
  _alpha: this.endVariance.alpha,
77
175
  },
78
176
  sinus: this.sinus,
177
+ colorStops: this.colorStops,
178
+ usePerlin: this.usePerlin,
179
+ pulseSpeed: this.pulseSpeed,
180
+ pulseIntensity: this.pulseIntensity,
181
+ mirrorTransition: this.mirrorTransition,
182
+ fadeToGray: this.fadeToGray,
183
+ fadeToTransparent: this.fadeToTransparent,
184
+ flickerIntensity: this.flickerIntensity,
79
185
  name: this.getName(),
80
186
  };
81
187
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ColorBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/ColorBehaviour.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ColorBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/ColorBehaviour.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAG7C,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,SAAS;IAArD;;QACE,YAAO,GAAG,KAAK,CAAA;QACf,aAAQ,GAAG,CAAC,CAAA;QACZ,UAAK,GAAG,IAAI,KAAK,EAAE,CAAA;QACnB,QAAG,GAAG,IAAI,KAAK,EAAE,CAAA;QACjB,kBAAa,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACrC,gBAAW,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACnC,UAAK,GAAG,KAAK,CAAA;QAEb,iBAAiB;QACjB,eAAU,GAAY,EAAE,CAAA,CAAC,uBAAuB;QAChD,cAAS,GAAG,KAAK,CAAA,CAAC,0CAA0C;QAC5D,eAAU,GAAG,CAAC,CAAA,CAAC,4BAA4B;QAC3C,mBAAc,GAAG,GAAG,CAAA,CAAC,gCAAgC;QACrD,qBAAgB,GAAG,KAAK,CAAA,CAAC,qCAAqC;QAC9D,eAAU,GAAG,KAAK,CAAA,CAAC,6BAA6B;QAChD,sBAAiB,GAAG,KAAK,CAAA,CAAC,uBAAuB;QACjD,qBAAgB,GAAG,GAAG,CAAA,CAAC,iCAAiC;QAExD,SAAI,GAAG,CAAC,QAAkB,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAM;YAEzB,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACxC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;YAChE,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;YAChE,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;YAChE,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YAExE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACpC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;YAC5D,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;YAC5D,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;YAC5D,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YAEpE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAC9C,CAAC,CAAA;QAED,UAAK,GAAG,CAAC,QAAkB,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAM;YACzB,IAAI,QAAQ,CAAC,kBAAkB;gBAAE,OAAM;YAEvC,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAA;YAEjC,mCAAmC;YACnC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;gBAE5C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,CAAA;gBACrD,CAAC;qBAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAClC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAA;gBAC9D,CAAC;gBACD,OAAM;YACR,CAAC;YAED,6BAA6B;YAC7B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;gBAC7C,OAAM;YACR,CAAC;YAED,mCAAmC;YACnC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAA;YAEzC,IAAI,iBAAiB,GAAG,YAAY,CAAA;YAEpC,+BAA+B;YAC/B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,iBAAiB,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;YACpF,CAAC;YAED,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;YAEnC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAA;YACnE,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAA;YACnE,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAA;YAEnE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAA;YACjF,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC5B,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC,CAAA;gBAC1D,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;YAC/C,CAAC;YAED,8BAA8B;YAC9B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;YAChC,CAAC;YAED,qCAAqC;YACrC,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC1C,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAA;YAC9D,CAAC;YAED,oBAAoB;YACpB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAChC,CAAC,CAAA;QAED,oBAAe,GAAG,CAAC,QAAkB,EAAE,YAAoB,EAAE,EAAE;YAC7D,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;YAE3B,wCAAwC;YACxC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;gBACtE,OAAM;YACR,CAAC;YAED,+BAA+B;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;YAClE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA,CAAC,+BAA+B;YAEhG,MAAM,CAAC,GAAG,YAAY,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAA;YAE1D,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;YACtC,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA,CAAC,oCAAoC;YAE7E,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YACjE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YACjE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YACjE,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACnF,CAAC,CAAA;QAOD,qBAAgB,GAAG,CAAC,QAAkB,EAAE,YAAoB,EAAE,EAAE;YAC9D,MAAM,IAAI,GAAG,YAAY,GAAG,EAAE,CAAA,CAAC,aAAa;YAC5C,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;YACrD,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;YACzD,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;YACzD,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;QACzD,CAAC,CAAA;QAED,qBAAgB,GAAG,CAAC,QAAkB,EAAE,YAAoB,EAAE,EAAE;YAC9D,mEAAmE;YACnE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAA;YAE9F,kCAAkC;YAClC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;YACvE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;YACvE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;QACzE,CAAC,CAAA;QAED,oBAAe,GAAG,CAAC,QAAkB,EAAE,EAAE;YACvC,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAA;YAC1B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAC9C,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAA;YACvB,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAA;YACvB,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAA;QACzB,CAAC,CAAA;QAED,oBAAe,GAAG,CAAC,QAAkB,EAAE,EAAE;YACvC,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAA;YAEzE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAA;YAC/E,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAA;YAC/E,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAA;QACjF,CAAC,CAAA;IA8CH,CAAC;IAnFC,iBAAiB,CAAC,IAAY;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;QAChC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,kCAAkC;IAC7D,CAAC;IAoCD,OAAO;QACL,OAAO,cAAc,CAAC,eAAe,CAAA;IACvC,CAAC;IAED,QAAQ;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE;gBACL,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAChB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAChB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAChB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;aACzB;YACD,GAAG,EAAE;gBACH,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACd,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACd,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACd,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;aACvB;YACD,aAAa,EAAE;gBACb,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBACxB,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBACxB,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBACxB,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK;aACjC;YACD,WAAW,EAAE;gBACX,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBACtB,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBACtB,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBACtB,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;aAC/B;YACD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;SACrB,CAAA;IACH,CAAC;CACF"}
@@ -1,17 +1,16 @@
1
1
  import Behaviour from './Behaviour';
2
2
  import Particle from '../Particle';
3
- /**
4
- * The EmitDirectionBehaviour class that inherits from the Behaviour class.
5
- * This class is used to set the direction of a particle when it is emitted.
6
- * @export
7
- * @class EmitDirectionBehaviour
8
- * @extends {Behaviour}
9
- */
10
3
  export default class EmitDirectionBehaviour extends Behaviour {
11
4
  enabled: boolean;
12
5
  priority: number;
13
6
  angle: number;
14
7
  variance: number;
8
+ oscillate: boolean;
9
+ oscillationSpeed: number;
10
+ oscillationAmplitude: number;
11
+ useNoise: boolean;
12
+ noiseScale: number;
13
+ velocityScaling: boolean;
15
14
  /**
16
15
  * Initializes the particle's direction.
17
16
  * @param {Particle} particle - The particle that is being initialized.
@@ -24,7 +23,8 @@ export default class EmitDirectionBehaviour extends Behaviour {
24
23
  * @param {number} deltaTime - The amount of time since the behavior was last applied.
25
24
  * @memberof EmitDirectionBehaviour
26
25
  */
27
- apply: (particle: Particle) => void;
26
+ apply: (particle: Particle, deltaTime: number) => void;
27
+ pseudoRandomNoise(seed: number): number;
28
28
  /**
29
29
  * Gets the name of the behavior.
30
30
  * @returns {BehaviourNames.EMIT_DIRECTION}
@@ -41,6 +41,12 @@ export default class EmitDirectionBehaviour extends Behaviour {
41
41
  priority: number;
42
42
  angle: number;
43
43
  variance: number;
44
+ oscillate: boolean;
45
+ oscillationSpeed: number;
46
+ oscillationAmplitude: number;
47
+ useNoise: boolean;
48
+ noiseScale: number;
49
+ velocityScaling: boolean;
44
50
  name: string;
45
51
  };
46
52
  }
@@ -1,13 +1,6 @@
1
1
  import Behaviour from './Behaviour';
2
2
  import BehaviourNames from './BehaviourNames';
3
3
  let _tmp = 0;
4
- /**
5
- * The EmitDirectionBehaviour class that inherits from the Behaviour class.
6
- * This class is used to set the direction of a particle when it is emitted.
7
- * @export
8
- * @class EmitDirectionBehaviour
9
- * @extends {Behaviour}
10
- */
11
4
  export default class EmitDirectionBehaviour extends Behaviour {
12
5
  constructor() {
13
6
  super(...arguments);
@@ -15,6 +8,13 @@ export default class EmitDirectionBehaviour extends Behaviour {
15
8
  this.priority = 0;
16
9
  this.angle = 0;
17
10
  this.variance = 0;
11
+ // New properties
12
+ this.oscillate = false; // Enable directional oscillation
13
+ this.oscillationSpeed = 1; // Speed of oscillation
14
+ this.oscillationAmplitude = 0; // Amplitude of oscillation
15
+ this.useNoise = false; // Use Perlin noise for direction changes
16
+ this.noiseScale = 0.1; // Scale of the noise effect
17
+ this.velocityScaling = false; // Scale velocity based on life progress
18
18
  /**
19
19
  * Initializes the particle's direction.
20
20
  * @param {Particle} particle - The particle that is being initialized.
@@ -23,9 +23,12 @@ export default class EmitDirectionBehaviour extends Behaviour {
23
23
  this.init = (particle) => {
24
24
  if (!this.enabled)
25
25
  return;
26
- const directionAngle = this.angle + this.varianceFrom(this.variance);
27
- particle.directionCos = Math.cos(directionAngle);
28
- particle.directionSin = Math.sin(directionAngle);
26
+ const baseAngle = this.angle + this.varianceFrom(this.variance);
27
+ particle.initialDirectionCos = Math.cos(baseAngle);
28
+ particle.initialDirectionSin = Math.sin(baseAngle);
29
+ particle.directionCos = particle.initialDirectionCos;
30
+ particle.directionSin = particle.initialDirectionSin;
31
+ particle.velocityScale = 1;
29
32
  };
30
33
  /**
31
34
  * Applies the behavior to the particle.
@@ -33,17 +36,43 @@ export default class EmitDirectionBehaviour extends Behaviour {
33
36
  * @param {number} deltaTime - The amount of time since the behavior was last applied.
34
37
  * @memberof EmitDirectionBehaviour
35
38
  */
36
- this.apply = (particle) => {
39
+ this.apply = (particle, deltaTime) => {
37
40
  if (!this.enabled)
38
41
  return;
39
42
  if (particle.skipEmitDirectionBehaviour)
40
43
  return;
41
- const { x, y, directionSin, directionCos } = particle;
44
+ const { x, y, directionSin, directionCos, lifeProgress } = particle;
45
+ // Apply directional oscillation
46
+ if (this.oscillate) {
47
+ const oscillation = Math.sin(particle.lifeTime * this.oscillationSpeed) * this.oscillationAmplitude;
48
+ particle.directionCos = Math.cos(oscillation);
49
+ particle.directionSin = Math.sin(oscillation);
50
+ }
51
+ // Apply Perlin noise-based direction changes
52
+ if (this.useNoise) {
53
+ const noiseValue = this.pseudoRandomNoise(particle.lifeTime * this.noiseScale);
54
+ const noiseAngle = noiseValue * 2 * Math.PI; // Map noise to full circle
55
+ particle.directionCos = Math.cos(noiseAngle);
56
+ particle.directionSin = Math.sin(noiseAngle);
57
+ }
58
+ // Scale velocity based on life progress
59
+ if (this.velocityScaling) {
60
+ particle.velocityScale = lifeProgress;
61
+ }
62
+ // Apply directional movement
42
63
  _tmp = directionCos * x - directionSin * y;
43
64
  particle.y = directionSin * x + directionCos * y;
44
65
  particle.x = _tmp;
66
+ // Scale movement
67
+ particle.x *= particle.velocityScale;
68
+ particle.y *= particle.velocityScale;
45
69
  };
46
70
  }
71
+ pseudoRandomNoise(seed) {
72
+ const prime = 2654435761; // A prime constant
73
+ const x = Math.sin(seed * prime) * 10000; // Scale the randomness
74
+ return x - Math.floor(x); // Ensure result is between 0 and 1
75
+ }
47
76
  /**
48
77
  * Gets the name of the behavior.
49
78
  * @returns {BehaviourNames.EMIT_DIRECTION}
@@ -63,6 +92,12 @@ export default class EmitDirectionBehaviour extends Behaviour {
63
92
  priority: this.priority,
64
93
  angle: this.angle,
65
94
  variance: this.variance,
95
+ oscillate: this.oscillate,
96
+ oscillationSpeed: this.oscillationSpeed,
97
+ oscillationAmplitude: this.oscillationAmplitude,
98
+ useNoise: this.useNoise,
99
+ noiseScale: this.noiseScale,
100
+ velocityScaling: this.velocityScaling,
66
101
  name: this.getName(),
67
102
  };
68
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EmitDirectionBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/EmitDirectionBehaviour.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAG7C,IAAI,IAAI,GAAG,CAAC,CAAA;AAEZ;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,SAAS;IAA7D;;QACE,YAAO,GAAG,IAAI,CAAA;QACd,aAAQ,GAAG,CAAC,CAAA;QACZ,UAAK,GAAG,CAAC,CAAA;QACT,aAAQ,GAAG,CAAC,CAAA;QAEZ;;;;WAIG;QACH,SAAI,GAAG,CAAC,QAAkB,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAM;YACzB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpE,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;YAChD,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAClD,CAAC,CAAA;QAED;;;;;WAKG;QACH,UAAK,GAAG,CAAC,QAAkB,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAM;YACzB,IAAI,QAAQ,CAAC,0BAA0B;gBAAE,OAAM;YAC/C,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAA;YAErD,IAAI,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,CAAA;YAC1C,QAAQ,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,CAAA;YAChD,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAA;QACnB,CAAC,CAAA;IAyBH,CAAC;IAvBC;;;;OAIG;IACH,OAAO;QACL,OAAO,cAAc,CAAC,cAAc,CAAA;IACtC,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;SACrB,CAAA;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"EmitDirectionBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/EmitDirectionBehaviour.ts"],"names":[],"mappings":"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"}
@@ -7,29 +7,9 @@ import Particle from '../Particle';
7
7
  * @extends Behaviour
8
8
  */
9
9
  export default class LifeBehaviour extends Behaviour {
10
- /**
11
- * Whether or not this behaviour is enabled.
12
- *
13
- * @type {boolean}
14
- */
15
10
  enabled: boolean;
16
- /**
17
- * The priority of this behaviour.
18
- *
19
- * @type {number}
20
- */
21
11
  priority: number;
22
- /**
23
- * The maximum life time of the particle that this behaviour will set.
24
- *
25
- * @type {number}
26
- */
27
12
  maxLifeTime: number;
28
- /**
29
- * The variance of the particle's life time.
30
- *
31
- * @type {number}
32
- */
33
13
  timeVariance: number;
34
14
  /**
35
15
  * Sets the particle's life time and maximum life time.
@@ -8,29 +8,9 @@ import { Behaviour, BehaviourNames } from './index';
8
8
  export default class LifeBehaviour extends Behaviour {
9
9
  constructor() {
10
10
  super(...arguments);
11
- /**
12
- * Whether or not this behaviour is enabled.
13
- *
14
- * @type {boolean}
15
- */
16
11
  this.enabled = true;
17
- /**
18
- * The priority of this behaviour.
19
- *
20
- * @type {number}
21
- */
22
12
  this.priority = 10000;
23
- /**
24
- * The maximum life time of the particle that this behaviour will set.
25
- *
26
- * @type {number}
27
- */
28
13
  this.maxLifeTime = 0;
29
- /**
30
- * The variance of the particle's life time.
31
- *
32
- * @type {number}
33
- */
34
14
  this.timeVariance = 0;
35
15
  /**
36
16
  * Sets the particle's life time and maximum life time.
@@ -1 +1 @@
1
- {"version":3,"file":"LifeBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/LifeBehaviour.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAGnD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAS;IAApD;;QACE;;;;WAIG;QACH,YAAO,GAAG,IAAI,CAAA;QAEd;;;;WAIG;QACH,aAAQ,GAAG,KAAK,CAAA;QAEhB;;;;WAIG;QACH,gBAAW,GAAG,CAAC,CAAA;QAEf;;;;WAIG;QACH,iBAAY,GAAG,CAAC,CAAA;QAEhB;;;;;WAKG;QACH,SAAI,GAAG,CAAC,QAAkB,EAAE,EAAE;YAC5B,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAA;YACrB,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAA;YACzB,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAA;QAC/F,CAAC,CAAA;QAED;;;;;;WAMG;QACH,UAAK,GAAG,CAAC,QAAkB,EAAE,SAAiB,EAAE,EAAE;YAChD,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAA;YAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAA;YAE9C,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAA;YAE5B,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACpB,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAA;YAC/D,CAAC;QACH,CAAC,CAAA;IAyBH,CAAC;IAvBC;;;;OAIG;IACH,OAAO;QACL,OAAO,cAAc,CAAC,cAAc,CAAA;IACtC,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;SACrB,CAAA;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"LifeBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/LifeBehaviour.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAGnD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAS;IAApD;;QACE,YAAO,GAAG,IAAI,CAAA;QACd,aAAQ,GAAG,KAAK,CAAA;QAChB,gBAAW,GAAG,CAAC,CAAA;QACf,iBAAY,GAAG,CAAC,CAAA;QAEhB;;;;;WAKG;QACH,SAAI,GAAG,CAAC,QAAkB,EAAE,EAAE;YAC5B,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAA;YACrB,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAA;YACzB,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAA;QAC/F,CAAC,CAAA;QAED;;;;;;WAMG;QACH,UAAK,GAAG,CAAC,QAAkB,EAAE,SAAiB,EAAE,EAAE;YAChD,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAA;YAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAA;YAE9C,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAA;YAE5B,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACpB,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAA;YAC/D,CAAC;QACH,CAAC,CAAA;IAyBH,CAAC;IAvBC;;;;OAIG;IACH,OAAO;QACL,OAAO,cAAc,CAAC,cAAc,CAAA;IACtC,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;SACrB,CAAA;IACH,CAAC;CACF"}
@@ -5,22 +5,17 @@ import Particle from '../Particle';
5
5
  * @extends Behaviour
6
6
  */
7
7
  export default class RotationBehaviour extends Behaviour {
8
- /**
9
- * @type {boolean} enabled - Enable or disable the Behaviour
10
- */
11
8
  enabled: boolean;
12
- /**
13
- * @type {number} priority - The priority of the Behaviour.
14
- */
15
9
  priority: number;
16
- /**
17
- * @type {number} rotation - The amount of rotation to apply on each particle.
18
- */
19
10
  rotation: number;
20
- /**
21
- * @type {number} variance - The amount of variance to apply on the particle's rotation.
22
- */
23
11
  variance: number;
12
+ oscillate: boolean;
13
+ oscillationSpeed: number;
14
+ oscillationAmplitude: number;
15
+ useNoise: boolean;
16
+ noiseScale: number;
17
+ acceleration: number;
18
+ clockwise: boolean;
24
19
  /**
25
20
  * Initialise the Behaviour for a particle
26
21
  * @param {Particle} particle - The particle to be initialised
@@ -32,6 +27,12 @@ export default class RotationBehaviour extends Behaviour {
32
27
  * @param {number} deltaTime - The delta time of the runtime
33
28
  */
34
29
  apply: (particle: Particle, deltaTime: number) => void;
30
+ /**
31
+ * Pseudo-random noise generator for smooth transitions
32
+ * @param {number} seed - Input seed for generating noise
33
+ * @returns {number} - Noise value between 0 and 1
34
+ */
35
+ pseudoRandomNoise(seed: number): number;
35
36
  /**
36
37
  * Gets the name of the Behaviour
37
38
  * @returns {string} - The name of the Behaviour
@@ -46,6 +47,13 @@ export default class RotationBehaviour extends Behaviour {
46
47
  priority: number;
47
48
  rotation: number;
48
49
  variance: number;
50
+ oscillate: boolean;
51
+ oscillationSpeed: number;
52
+ oscillationAmplitude: number;
53
+ useNoise: boolean;
54
+ noiseScale: number;
55
+ acceleration: number;
56
+ clockwise: boolean;
49
57
  name: string;
50
58
  };
51
59
  }
@@ -6,22 +6,17 @@ import { Behaviour, BehaviourNames } from './index';
6
6
  export default class RotationBehaviour extends Behaviour {
7
7
  constructor() {
8
8
  super(...arguments);
9
- /**
10
- * @type {boolean} enabled - Enable or disable the Behaviour
11
- */
12
9
  this.enabled = false;
13
- /**
14
- * @type {number} priority - The priority of the Behaviour.
15
- */
16
10
  this.priority = 0;
17
- /**
18
- * @type {number} rotation - The amount of rotation to apply on each particle.
19
- */
20
- this.rotation = 0;
21
- /**
22
- * @type {number} variance - The amount of variance to apply on the particle's rotation.
23
- */
24
- this.variance = 0;
11
+ this.rotation = 0; // Base rotation speed
12
+ this.variance = 0; // Variance in rotation speed
13
+ this.oscillate = false; // Enable oscillation
14
+ this.oscillationSpeed = 1; // Speed of oscillation
15
+ this.oscillationAmplitude = 0; // Amplitude of oscillation
16
+ this.useNoise = false; // Use Perlin noise for rotation
17
+ this.noiseScale = 0.1; // Scale of Perlin noise
18
+ this.acceleration = 0; // Rotation acceleration (positive or negative)
19
+ this.clockwise = true; // Clockwise or counterclockwise rotation
25
20
  /**
26
21
  * Initialise the Behaviour for a particle
27
22
  * @param {Particle} particle - The particle to be initialised
@@ -29,7 +24,11 @@ export default class RotationBehaviour extends Behaviour {
29
24
  this.init = (particle) => {
30
25
  if (!this.enabled)
31
26
  return;
32
- particle.rotationDelta = this.rotation + this.varianceFrom(this.variance);
27
+ // Set base rotation delta with variance
28
+ const baseRotation = this.rotation + this.varianceFrom(this.variance);
29
+ particle.rotationDelta = this.clockwise ? baseRotation : -baseRotation;
30
+ // Initialize acceleration if enabled
31
+ particle.rotationAcceleration = this.acceleration;
33
32
  };
34
33
  /**
35
34
  * Applies the Behaviour to a particle
@@ -41,9 +40,35 @@ export default class RotationBehaviour extends Behaviour {
41
40
  return;
42
41
  if (particle.skipRotationBehaviour)
43
42
  return;
44
- particle.rotation += particle.rotationDelta * deltaTime;
43
+ let deltaRotation = particle.rotationDelta;
44
+ // Apply oscillation effect
45
+ if (this.oscillate) {
46
+ const oscillation = Math.sin(particle.lifeTime * this.oscillationSpeed) * this.oscillationAmplitude;
47
+ deltaRotation += oscillation;
48
+ }
49
+ // Apply noise-based rotation
50
+ if (this.useNoise) {
51
+ const noiseValue = this.pseudoRandomNoise(particle.lifeTime * this.noiseScale);
52
+ deltaRotation += noiseValue * 2 - 1; // Map noise from [0,1] to [-1,1]
53
+ }
54
+ // Apply rotation acceleration
55
+ if (particle.rotationAcceleration) {
56
+ particle.rotationDelta += particle.rotationAcceleration * deltaTime;
57
+ deltaRotation = particle.rotationDelta;
58
+ }
59
+ // Update particle rotation
60
+ particle.rotation += deltaRotation * deltaTime;
45
61
  };
46
62
  }
63
+ /**
64
+ * Pseudo-random noise generator for smooth transitions
65
+ * @param {number} seed - Input seed for generating noise
66
+ * @returns {number} - Noise value between 0 and 1
67
+ */
68
+ pseudoRandomNoise(seed) {
69
+ const x = Math.sin(seed * 10000) * 10000;
70
+ return x - Math.floor(x);
71
+ }
47
72
  /**
48
73
  * Gets the name of the Behaviour
49
74
  * @returns {string} - The name of the Behaviour
@@ -61,6 +86,13 @@ export default class RotationBehaviour extends Behaviour {
61
86
  priority: this.priority,
62
87
  rotation: this.rotation,
63
88
  variance: this.variance,
89
+ oscillate: this.oscillate,
90
+ oscillationSpeed: this.oscillationSpeed,
91
+ oscillationAmplitude: this.oscillationAmplitude,
92
+ useNoise: this.useNoise,
93
+ noiseScale: this.noiseScale,
94
+ acceleration: this.acceleration,
95
+ clockwise: this.clockwise,
64
96
  name: this.getName(),
65
97
  };
66
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RotationBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/RotationBehaviour.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAGnD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,SAAS;IAAxD;;QACE;;WAEG;QACH,YAAO,GAAG,KAAK,CAAA;QAEf;;WAEG;QACH,aAAQ,GAAG,CAAC,CAAA;QAEZ;;WAEG;QACH,aAAQ,GAAG,CAAC,CAAA;QAEZ;;WAEG;QACH,aAAQ,GAAG,CAAC,CAAA;QAEZ;;;WAGG;QACH,SAAI,GAAG,CAAC,QAAkB,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAM;YACzB,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3E,CAAC,CAAA;QAED;;;;WAIG;QACH,UAAK,GAAG,CAAC,QAAkB,EAAE,SAAiB,EAAE,EAAE;YAChD,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAM;YACzB,IAAI,QAAQ,CAAC,qBAAqB;gBAAE,OAAM;YAC1C,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAA;QACzD,CAAC,CAAA;IAuBH,CAAC;IArBC;;;OAGG;IACH,OAAO;QACL,OAAO,cAAc,CAAC,kBAAkB,CAAA;IAC1C,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;SACrB,CAAA;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"RotationBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/RotationBehaviour.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAGnD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,SAAS;IAAxD;;QACE,YAAO,GAAG,KAAK,CAAA;QACf,aAAQ,GAAG,CAAC,CAAA;QACZ,aAAQ,GAAG,CAAC,CAAA,CAAC,sBAAsB;QACnC,aAAQ,GAAG,CAAC,CAAA,CAAC,6BAA6B;QAC1C,cAAS,GAAG,KAAK,CAAA,CAAC,qBAAqB;QACvC,qBAAgB,GAAG,CAAC,CAAA,CAAC,uBAAuB;QAC5C,yBAAoB,GAAG,CAAC,CAAA,CAAC,2BAA2B;QACpD,aAAQ,GAAG,KAAK,CAAA,CAAC,gCAAgC;QACjD,eAAU,GAAG,GAAG,CAAA,CAAC,wBAAwB;QACzC,iBAAY,GAAG,CAAC,CAAA,CAAC,+CAA+C;QAChE,cAAS,GAAG,IAAI,CAAA,CAAC,yCAAyC;QAE1D;;;WAGG;QACH,SAAI,GAAG,CAAC,QAAkB,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAM;YAEzB,wCAAwC;YACxC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACrE,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;YAEtE,qCAAqC;YACrC,QAAQ,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAA;QACnD,CAAC,CAAA;QAED;;;;WAIG;QACH,UAAK,GAAG,CAAC,QAAkB,EAAE,SAAiB,EAAE,EAAE;YAChD,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAM;YACzB,IAAI,QAAQ,CAAC,qBAAqB;gBAAE,OAAM;YAE1C,IAAI,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAA;YAE1C,2BAA2B;YAC3B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAA;gBACnG,aAAa,IAAI,WAAW,CAAA;YAC9B,CAAC;YAED,6BAA6B;YAC7B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;gBAC9E,aAAa,IAAI,UAAU,GAAG,CAAC,GAAG,CAAC,CAAA,CAAC,iCAAiC;YACvE,CAAC;YAED,8BAA8B;YAC9B,IAAI,QAAQ,CAAC,oBAAoB,EAAE,CAAC;gBAClC,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,oBAAoB,GAAG,SAAS,CAAA;gBACnE,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAA;YACxC,CAAC;YAED,2BAA2B;YAC3B,QAAQ,CAAC,QAAQ,IAAI,aAAa,GAAG,SAAS,CAAA;QAChD,CAAC,CAAA;IAwCH,CAAC;IAtCC;;;;OAIG;IACH,iBAAiB,CAAC,IAAY;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA;QACxC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,OAAO,cAAc,CAAC,kBAAkB,CAAA;IAC1C,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;SACrB,CAAA;IACH,CAAC;CACF"}
@@ -4,18 +4,32 @@ import Particle from '../Particle';
4
4
  export default class SizeBehaviour extends Behaviour {
5
5
  enabled: boolean;
6
6
  priority: number;
7
- allowNegativeValues: boolean;
8
7
  sizeStart: Point;
9
8
  sizeEnd: Point;
10
9
  startVariance: number;
11
10
  endVariance: number;
11
+ maxSize: Point;
12
+ uniformScaling: boolean;
13
+ pulsate: boolean;
14
+ pulsationSpeed: number;
15
+ pulsationAmplitude: number;
16
+ useNoise: boolean;
17
+ noiseScale: number;
18
+ invertAtMidpoint: boolean;
19
+ sizeSteps: never[];
20
+ timeOffset: number;
21
+ xScalingFunction: string;
22
+ yScalingFunction: string;
23
+ sizeAlphaDependency: boolean;
12
24
  init: (particle: Particle) => void;
13
- apply: (particle: Particle) => void;
25
+ apply: (particle: Particle, deltaTime: number) => void;
26
+ applyMultiStepSize: (particle: Particle, lifeProgress: number) => void;
27
+ applyEasing: (progress: number, easingType: string) => number;
28
+ pseudoRandomNoise: (seed: number) => number;
14
29
  getName(): string;
15
30
  getProps(): {
16
31
  enabled: boolean;
17
32
  priority: number;
18
- allowNegativeValues: boolean;
19
33
  sizeStart: {
20
34
  x: number;
21
35
  y: number;
@@ -26,6 +40,22 @@ export default class SizeBehaviour extends Behaviour {
26
40
  };
27
41
  startVariance: number;
28
42
  endVariance: number;
43
+ maxSize: {
44
+ x: number;
45
+ y: number;
46
+ };
47
+ uniformScaling: boolean;
48
+ pulsate: boolean;
49
+ pulsationSpeed: number;
50
+ pulsationAmplitude: number;
51
+ useNoise: boolean;
52
+ noiseScale: number;
53
+ invertAtMidpoint: boolean;
54
+ sizeSteps: never[];
55
+ timeOffset: number;
56
+ xScalingFunction: string;
57
+ yScalingFunction: string;
58
+ sizeAlphaDependency: boolean;
29
59
  name: string;
30
60
  };
31
61
  }
@@ -5,26 +5,32 @@ export default class SizeBehaviour extends Behaviour {
5
5
  super(...arguments);
6
6
  this.enabled = true;
7
7
  this.priority = 0;
8
- this.allowNegativeValues = false;
9
8
  this.sizeStart = new Point(1, 1);
10
9
  this.sizeEnd = new Point(1, 1);
11
10
  this.startVariance = 0;
12
11
  this.endVariance = 0;
12
+ this.maxSize = new Point(Infinity, Infinity); // Maximum size clamp
13
+ this.uniformScaling = true; // Toggle for uniform scaling
14
+ this.pulsate = false; // Enable pulsating size effect
15
+ this.pulsationSpeed = 1; // Speed of pulsation
16
+ this.pulsationAmplitude = 0.2; // Amplitude of pulsation
17
+ this.useNoise = false; // Use noise for size modulation
18
+ this.noiseScale = 0.1; // Scale of the noise effect
19
+ this.invertAtMidpoint = false; // Invert size at midpoint
20
+ this.sizeSteps = []; // Array of size points for multi-step transitions
21
+ this.timeOffset = 0; // Delay or advance size scaling
22
+ this.xScalingFunction = 'linear'; // Easing for x-axis
23
+ this.yScalingFunction = 'linear'; // Easing for y-axis
24
+ this.sizeAlphaDependency = false; // Link size to alpha value
13
25
  this.init = (particle) => {
14
26
  if (!this.enabled)
15
27
  return;
16
28
  let variance = this.varianceFrom(this.startVariance);
17
- let sizeStartX = this.sizeStart.x + variance;
18
- let sizeStartY = this.sizeStart.y + variance;
29
+ const sizeStartX = this.sizeStart.x + variance;
30
+ const sizeStartY = this.sizeStart.y + variance;
19
31
  variance = this.varianceFrom(this.endVariance);
20
- let sizeEndX = this.sizeEnd.x + variance;
21
- let sizeEndY = this.sizeEnd.y + variance;
22
- if (!this.allowNegativeValues) {
23
- sizeStartX = Math.max(sizeStartX, 0);
24
- sizeStartY = Math.max(sizeStartY, 0);
25
- sizeEndX = Math.max(sizeEndX, 0);
26
- sizeEndY = Math.max(sizeEndY, 0);
27
- }
32
+ const sizeEndX = this.sizeEnd.x + variance;
33
+ const sizeEndY = this.sizeEnd.y + variance;
28
34
  particle.sizeDifference = {
29
35
  x: sizeEndX - sizeStartX,
30
36
  y: sizeEndY - sizeStartY,
@@ -35,22 +41,80 @@ export default class SizeBehaviour extends Behaviour {
35
41
  particle.sizeEnd.y = sizeEndY;
36
42
  particle.size.copyFrom(particle.sizeStart);
37
43
  };
38
- this.apply = (particle) => {
39
- if (!this.enabled)
44
+ this.apply = (particle, deltaTime) => {
45
+ if (!this.enabled || particle.skipSizeBehaviour)
40
46
  return;
41
- if (particle.skipSizeBehaviour)
47
+ let lifeProgress = particle.lifeProgress - this.timeOffset;
48
+ if (lifeProgress < 0)
49
+ return; // Skip if delayed
50
+ if (this.invertAtMidpoint && lifeProgress > 0.5) {
51
+ lifeProgress = 1 - lifeProgress; // Invert at midpoint
52
+ }
53
+ // Handle multi-step transitions
54
+ if (this.sizeSteps.length > 0) {
55
+ this.applyMultiStepSize(particle, lifeProgress);
42
56
  return;
43
- const { sizeStart, lifeProgress, sizeDifference, size } = particle;
44
- particle.size.copyFrom(sizeStart);
45
- let sizeX = size.x + sizeDifference.x * lifeProgress;
46
- let sizeY = size.y + sizeDifference.y * lifeProgress;
47
- if (!this.allowNegativeValues) {
48
- sizeX = Math.max(0, sizeX);
49
- sizeY = Math.max(0, sizeY);
50
57
  }
58
+ let sizeX = particle.sizeStart.x + particle.sizeDifference.x * this.applyEasing(lifeProgress, this.xScalingFunction);
59
+ let sizeY = this.uniformScaling
60
+ ? sizeX
61
+ : particle.sizeStart.y + particle.sizeDifference.y * this.applyEasing(lifeProgress, this.yScalingFunction);
62
+ // Apply pulsation effect
63
+ if (this.pulsate) {
64
+ const pulseFactor = 1 + Math.sin(particle.lifeTime * this.pulsationSpeed * Math.PI * 2) * this.pulsationAmplitude;
65
+ sizeX *= pulseFactor;
66
+ sizeY *= pulseFactor;
67
+ }
68
+ // Apply noise modulation
69
+ if (this.useNoise) {
70
+ const noiseFactor = this.pseudoRandomNoise(particle.lifeTime * this.noiseScale);
71
+ sizeX *= noiseFactor;
72
+ sizeY *= noiseFactor;
73
+ }
74
+ // Size linked to alpha
75
+ if (this.sizeAlphaDependency) {
76
+ const alphaFactor = particle.color.alpha;
77
+ sizeX *= alphaFactor;
78
+ sizeY *= alphaFactor;
79
+ }
80
+ // Clamp to maximum size
81
+ sizeX = Math.min(sizeX, this.maxSize.x);
82
+ sizeY = Math.min(sizeY, this.maxSize.y);
51
83
  particle.size.x = sizeX;
52
84
  particle.size.y = sizeY;
53
85
  };
86
+ this.applyMultiStepSize = (particle, lifeProgress) => {
87
+ const stepCount = this.sizeSteps.length - 1;
88
+ if (stepCount < 1)
89
+ return; // Skip if fewer than two steps
90
+ const currentStep = Math.floor(lifeProgress * stepCount);
91
+ const nextStep = Math.min(currentStep + 1, stepCount);
92
+ const t = (lifeProgress * stepCount) % 1;
93
+ const sizeStart = this.sizeSteps[currentStep];
94
+ const sizeEnd = this.sizeSteps[nextStep];
95
+ // @ts-ignore
96
+ particle.size.x = sizeStart.x + (sizeEnd.x - sizeStart.x) * this.applyEasing(t, this.xScalingFunction);
97
+ // @ts-ignore
98
+ particle.size.y = sizeStart.y + (sizeEnd.y - sizeStart.y) * this.applyEasing(t, this.yScalingFunction);
99
+ };
100
+ this.applyEasing = (progress, easingType) => {
101
+ switch (easingType) {
102
+ case 'easeIn':
103
+ return progress * progress;
104
+ case 'easeOut':
105
+ return 1 - Math.pow(1 - progress, 2);
106
+ case 'easeInOut':
107
+ return progress < 0.5 ? 2 * progress * progress : 1 - Math.pow(-2 * progress + 2, 2) / 2;
108
+ case 'linear':
109
+ default:
110
+ return progress;
111
+ }
112
+ };
113
+ this.pseudoRandomNoise = (seed) => {
114
+ const prime = 2654435761; // A prime constant
115
+ const x = Math.sin(seed * prime) * 10000; // Scale the randomness
116
+ return x - Math.floor(x); // Ensure result is between 0 and 1
117
+ };
54
118
  }
55
119
  getName() {
56
120
  return BehaviourNames.SIZE_BEHAVIOUR;
@@ -59,7 +123,6 @@ export default class SizeBehaviour extends Behaviour {
59
123
  return {
60
124
  enabled: this.enabled,
61
125
  priority: this.priority,
62
- allowNegativeValues: this.allowNegativeValues,
63
126
  sizeStart: {
64
127
  x: this.sizeStart.x,
65
128
  y: this.sizeStart.y,
@@ -70,6 +133,22 @@ export default class SizeBehaviour extends Behaviour {
70
133
  },
71
134
  startVariance: this.startVariance,
72
135
  endVariance: this.endVariance,
136
+ maxSize: {
137
+ x: this.maxSize.x,
138
+ y: this.maxSize.y,
139
+ },
140
+ uniformScaling: this.uniformScaling,
141
+ pulsate: this.pulsate,
142
+ pulsationSpeed: this.pulsationSpeed,
143
+ pulsationAmplitude: this.pulsationAmplitude,
144
+ useNoise: this.useNoise,
145
+ noiseScale: this.noiseScale,
146
+ invertAtMidpoint: this.invertAtMidpoint,
147
+ sizeSteps: this.sizeSteps,
148
+ timeOffset: this.timeOffset,
149
+ xScalingFunction: this.xScalingFunction,
150
+ yScalingFunction: this.yScalingFunction,
151
+ sizeAlphaDependency: this.sizeAlphaDependency,
73
152
  name: this.getName(),
74
153
  };
75
154
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SizeBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/SizeBehaviour.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SizeBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/SizeBehaviour.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,22 @@
1
1
  import { Behaviour } from './index';
2
2
  import Particle from '../Particle';
3
+ import { Color } from '../util';
3
4
  export default class SoundReactiveBehaviour extends Behaviour {
4
5
  enabled: boolean;
5
6
  priority: number;
7
+ isPlaying: boolean;
8
+ useColor: boolean;
9
+ useSize: boolean;
10
+ useVelocity: boolean;
11
+ useRotation: boolean;
12
+ useRandomColor: boolean;
13
+ beatColor: Color;
6
14
  audioContext: AudioContext | null;
7
15
  analyser: AnalyserNode | null;
8
16
  frequencyData: Uint8Array | null;
9
17
  amplitudeFactor: number;
10
18
  frequencyFactor: number;
19
+ rotationFactor: number;
11
20
  beatSensitivity: number;
12
21
  init(): void;
13
22
  apply(particle: Particle, deltaTime: number): void;
@@ -23,12 +32,24 @@ export default class SoundReactiveBehaviour extends Behaviour {
23
32
  * Detects a beat based on amplitude and sensitivity.
24
33
  */
25
34
  isBeatDetected(amplitude: number): boolean;
35
+ /**
36
+ * Generates a random RGBA color.
37
+ */
38
+ getRandomColor(): Color;
26
39
  getName(): string;
27
40
  getProps(): {
28
41
  enabled: boolean;
29
42
  priority: number;
43
+ isPlaying: boolean;
44
+ useColor: boolean;
45
+ useVelocity: boolean;
46
+ useSize: boolean;
47
+ useRotation: boolean;
48
+ useRandomColor: boolean;
49
+ beatColor: Color;
30
50
  amplitudeFactor: number;
31
51
  frequencyFactor: number;
52
+ rotationFactor: number;
32
53
  beatSensitivity: number;
33
54
  name: string;
34
55
  };
@@ -1,43 +1,65 @@
1
1
  import { Behaviour, BehaviourNames } from './index';
2
+ import { Color } from '../util';
2
3
  export default class SoundReactiveBehaviour extends Behaviour {
3
4
  constructor() {
4
5
  super(...arguments);
5
6
  this.enabled = true;
6
7
  this.priority = 0;
8
+ this.isPlaying = false;
9
+ this.useColor = true;
10
+ this.useSize = true;
11
+ this.useVelocity = true;
12
+ this.useRotation = true; // New property for rotation
13
+ this.useRandomColor = true; // New property for random colors
14
+ this.beatColor = new Color(255, 0, 0, 1); // Default beat color (red with full alpha)
7
15
  this.audioContext = null; // Audio context for analysis
8
16
  this.analyser = null; // Audio analyser node
9
17
  this.frequencyData = null; // Frequency data array
10
18
  this.amplitudeFactor = 0.1; // Scale factor for amplitude effects
11
19
  this.frequencyFactor = 1; // Scale factor for frequency effects
20
+ this.rotationFactor = 0.05; // Scale factor for rotation effects
12
21
  this.beatSensitivity = 1; // Sensitivity to detect beats
13
22
  }
14
23
  init() {
15
24
  //
16
25
  }
17
26
  apply(particle, deltaTime) {
18
- if (!this.enabled || !this.analyser || !this.frequencyData)
27
+ if (!this.enabled || !this.analyser || !this.frequencyData || !this.isPlaying)
19
28
  return;
20
29
  // Update frequency data
21
30
  this.analyser.getByteFrequencyData(this.frequencyData);
22
31
  // Compute amplitude and frequency effects
23
32
  const amplitude = this.getAmplitude();
24
33
  const dominantFrequency = this.getDominantFrequency();
25
- // Apply amplitude effect to size
26
- particle.size.x += amplitude * this.amplitudeFactor * deltaTime;
27
- particle.size.y += amplitude * this.amplitudeFactor * deltaTime;
28
- // Apply frequency effect to velocity or position
29
- particle.velocity.x += dominantFrequency * this.frequencyFactor * deltaTime;
30
- particle.velocity.y += dominantFrequency * this.frequencyFactor * deltaTime;
31
- // Add beat reaction if sensitivity is high enough
32
- if (this.isBeatDetected(amplitude)) {
33
- particle.color.r = 255; // Flash red on beat
34
- particle.color.g = 0;
35
- particle.color.b = 0;
34
+ if (this.useSize) {
35
+ // Apply amplitude effect to size
36
+ particle.size.x += amplitude * this.amplitudeFactor * deltaTime;
37
+ particle.size.y += amplitude * this.amplitudeFactor * deltaTime;
36
38
  }
37
- else {
38
- particle.color.r = Math.max(0, particle.color.r - 5); // Fade back to normal
39
- particle.color.g = Math.max(0, particle.color.g - 5);
40
- particle.color.b = Math.max(0, particle.color.b - 5);
39
+ if (this.useVelocity) {
40
+ // Apply frequency effect to velocity or position
41
+ particle.velocity.x += dominantFrequency * this.frequencyFactor * deltaTime;
42
+ particle.velocity.y += dominantFrequency * this.frequencyFactor * deltaTime;
43
+ }
44
+ if (this.useRotation) {
45
+ // Apply rotation effect based on dominant frequency
46
+ particle.rotation += dominantFrequency * this.rotationFactor * deltaTime;
47
+ }
48
+ if (this.useColor) {
49
+ // Add beat reaction with color and alpha logic
50
+ if (this.isBeatDetected(amplitude)) {
51
+ const color = this.useRandomColor ? this.getRandomColor() : this.beatColor;
52
+ particle.color.r = color.r;
53
+ particle.color.g = color.g;
54
+ particle.color.b = color.b;
55
+ particle.color.alpha = color.alpha; // Ensure alpha is applied
56
+ }
57
+ else {
58
+ particle.color.r = Math.max(0, particle.color.r - 5); // Fade back to normal
59
+ particle.color.g = Math.max(0, particle.color.g - 5);
60
+ particle.color.b = Math.max(0, particle.color.b - 5);
61
+ particle.color.alpha = Math.max(0, particle.color.alpha - 0.05); // Gradually decrease alpha
62
+ }
41
63
  }
42
64
  }
43
65
  /**
@@ -72,6 +94,17 @@ export default class SoundReactiveBehaviour extends Behaviour {
72
94
  isBeatDetected(amplitude) {
73
95
  return amplitude > this.beatSensitivity * 128; // Threshold for beat detection
74
96
  }
97
+ /**
98
+ * Generates a random RGBA color.
99
+ */
100
+ getRandomColor() {
101
+ // Generate a random color if allTheSameColor is false
102
+ const r = Math.floor(Math.random() * 256);
103
+ const g = Math.floor(Math.random() * 256);
104
+ const b = Math.floor(Math.random() * 256);
105
+ const a = 1; // Ensure alpha is explicitly set
106
+ return new Color(r, g, b, a);
107
+ }
75
108
  getName() {
76
109
  return BehaviourNames.SOUND_REACTIVE_BEHAVIOUR;
77
110
  }
@@ -79,8 +112,16 @@ export default class SoundReactiveBehaviour extends Behaviour {
79
112
  return {
80
113
  enabled: this.enabled,
81
114
  priority: this.priority,
115
+ isPlaying: this.isPlaying,
116
+ useColor: this.useColor,
117
+ useVelocity: this.useVelocity,
118
+ useSize: this.useSize,
119
+ useRotation: this.useRotation,
120
+ useRandomColor: this.useRandomColor, // Include random color toggle in props
121
+ beatColor: this.beatColor, // Include beat color with alpha in props
82
122
  amplitudeFactor: this.amplitudeFactor,
83
123
  frequencyFactor: this.frequencyFactor,
124
+ rotationFactor: this.rotationFactor,
84
125
  beatSensitivity: this.beatSensitivity,
85
126
  name: this.getName(),
86
127
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SoundReactiveBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/SoundReactiveBehaviour.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SoundReactiveBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/SoundReactiveBehaviour.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -41,5 +41,5 @@
41
41
  "lint": "tslint 'src/**/*.ts'",
42
42
  "lint:fix": "tslint --fix 'src/**/*.ts'"
43
43
  },
44
- "version": "4.9.1"
44
+ "version": "4.11.0"
45
45
  }