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.
- package/dist/lib/Particle.d.ts +4 -0
- package/dist/lib/Particle.js +8 -0
- package/dist/lib/Particle.js.map +1 -1
- package/dist/lib/behaviour/AngularVelocityBehaviour.d.ts +10 -6
- package/dist/lib/behaviour/AngularVelocityBehaviour.js +39 -14
- package/dist/lib/behaviour/AngularVelocityBehaviour.js.map +1 -1
- package/dist/lib/behaviour/ColorBehaviour.d.ts +22 -0
- package/dist/lib/behaviour/ColorBehaviour.js +112 -6
- package/dist/lib/behaviour/ColorBehaviour.js.map +1 -1
- package/dist/lib/behaviour/EmitDirectionBehaviour.d.ts +14 -8
- package/dist/lib/behaviour/EmitDirectionBehaviour.js +47 -12
- package/dist/lib/behaviour/EmitDirectionBehaviour.js.map +1 -1
- package/dist/lib/behaviour/LifeBehaviour.d.ts +0 -20
- package/dist/lib/behaviour/LifeBehaviour.js +0 -20
- package/dist/lib/behaviour/LifeBehaviour.js.map +1 -1
- package/dist/lib/behaviour/RotationBehaviour.d.ts +20 -12
- package/dist/lib/behaviour/RotationBehaviour.js +48 -16
- package/dist/lib/behaviour/RotationBehaviour.js.map +1 -1
- package/dist/lib/behaviour/SizeBehaviour.d.ts +33 -3
- package/dist/lib/behaviour/SizeBehaviour.js +101 -22
- package/dist/lib/behaviour/SizeBehaviour.js.map +1 -1
- package/dist/lib/behaviour/SoundReactiveBehaviour.d.ts +21 -0
- package/dist/lib/behaviour/SoundReactiveBehaviour.js +57 -16
- package/dist/lib/behaviour/SoundReactiveBehaviour.js.map +1 -1
- package/package.json +1 -1
package/dist/lib/Particle.d.ts
CHANGED
|
@@ -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
|
*/
|
package/dist/lib/Particle.js
CHANGED
|
@@ -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
|
package/dist/lib/Particle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Particle.js","sourceRoot":"","sources":["../../src/lib/Particle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,SAAS,MAAM,kBAAkB,CAAA;AAExC;;GAEG;AACH,MAAqB,QAAQ;
|
|
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 =
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,IAAI,MAAM,eAAe,CAAA;AAChC,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAG7C
|
|
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 {
|
|
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) *
|
|
37
|
-
particle.color.g += (colorEnd.g - colorStart.g) *
|
|
38
|
-
particle.color.b += (colorEnd.b - colorStart.b) *
|
|
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) *
|
|
72
|
+
particle.color.alpha += (colorEnd.alpha - colorStart.alpha) * effectiveProgress;
|
|
41
73
|
}
|
|
42
74
|
else {
|
|
43
|
-
|
|
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":"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,SAAI,GAAG,CAAC,QAAkB,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAM;
|
|
1
|
+
{"version":3,"file":"ColorBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/ColorBehaviour.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
|
27
|
-
particle.
|
|
28
|
-
particle.
|
|
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
|
|
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
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
this.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
this.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
1
|
+
{"version":3,"file":"RotationBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/RotationBehaviour.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
-
|
|
18
|
-
|
|
29
|
+
const sizeStartX = this.sizeStart.x + variance;
|
|
30
|
+
const sizeStartY = this.sizeStart.y + variance;
|
|
19
31
|
variance = this.varianceFrom(this.endVariance);
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAGnD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAS;IAApD;;QACE,YAAO,GAAG,IAAI,CAAA;QACd,aAAQ,GAAG,CAAC,CAAA;QACZ,
|
|
1
|
+
{"version":3,"file":"SizeBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/SizeBehaviour.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAGnD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAS;IAApD;;QACE,YAAO,GAAG,IAAI,CAAA;QACd,aAAQ,GAAG,CAAC,CAAA;QACZ,cAAS,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3B,YAAO,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACzB,kBAAa,GAAG,CAAC,CAAA;QACjB,gBAAW,GAAG,CAAC,CAAA;QACf,YAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA,CAAC,qBAAqB;QAC7D,mBAAc,GAAG,IAAI,CAAA,CAAC,6BAA6B;QACnD,YAAO,GAAG,KAAK,CAAA,CAAC,+BAA+B;QAC/C,mBAAc,GAAG,CAAC,CAAA,CAAC,qBAAqB;QACxC,uBAAkB,GAAG,GAAG,CAAA,CAAC,yBAAyB;QAClD,aAAQ,GAAG,KAAK,CAAA,CAAC,gCAAgC;QACjD,eAAU,GAAG,GAAG,CAAA,CAAC,4BAA4B;QAC7C,qBAAgB,GAAG,KAAK,CAAA,CAAC,0BAA0B;QACnD,cAAS,GAAG,EAAE,CAAA,CAAC,kDAAkD;QACjE,eAAU,GAAG,CAAC,CAAA,CAAC,gCAAgC;QAC/C,qBAAgB,GAAG,QAAQ,CAAA,CAAC,oBAAoB;QAChD,qBAAgB,GAAG,QAAQ,CAAA,CAAC,oBAAoB;QAChD,wBAAmB,GAAG,KAAK,CAAA,CAAC,2BAA2B;QAEvD,SAAI,GAAG,CAAC,QAAkB,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAM;YAEzB,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YACpD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAA;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAA;YAE9C,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAA;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAA;YAE1C,QAAQ,CAAC,cAAc,GAAG;gBACxB,CAAC,EAAE,QAAQ,GAAG,UAAU;gBACxB,CAAC,EAAE,QAAQ,GAAG,UAAU;aACzB,CAAA;YAED,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAA;YACjC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAA;YACjC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAA;YAC7B,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAA;YAC7B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC5C,CAAC,CAAA;QAED,UAAK,GAAG,CAAC,QAAkB,EAAE,SAAiB,EAAE,EAAE;YAChD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,iBAAiB;gBAAE,OAAM;YAEvD,IAAI,YAAY,GAAG,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAA;YAC1D,IAAI,YAAY,GAAG,CAAC;gBAAE,OAAM,CAAC,kBAAkB;YAE/C,IAAI,IAAI,CAAC,gBAAgB,IAAI,YAAY,GAAG,GAAG,EAAE,CAAC;gBAChD,YAAY,GAAG,CAAC,GAAG,YAAY,CAAA,CAAC,qBAAqB;YACvD,CAAC;YAED,gCAAgC;YAChC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;gBAC/C,OAAM;YACR,CAAC;YAED,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACpH,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc;gBAC7B,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAE5G,yBAAyB;YACzB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAA;gBACjH,KAAK,IAAI,WAAW,CAAA;gBACpB,KAAK,IAAI,WAAW,CAAA;YACtB,CAAC;YAED,yBAAyB;YACzB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;gBAC/E,KAAK,IAAI,WAAW,CAAA;gBACpB,KAAK,IAAI,WAAW,CAAA;YACtB,CAAC;YAED,uBAAuB;YACvB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAA;gBACxC,KAAK,IAAI,WAAW,CAAA;gBACpB,KAAK,IAAI,WAAW,CAAA;YACtB,CAAC;YAED,wBAAwB;YACxB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YACvC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YAEvC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAA;YACvB,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAA;QACzB,CAAC,CAAA;QAED,uBAAkB,GAAG,CAAC,QAAkB,EAAE,YAAoB,EAAE,EAAE;YAChE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAA;YAC3C,IAAI,SAAS,GAAG,CAAC;gBAAE,OAAM,CAAC,+BAA+B;YAEzD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,CAAA;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,EAAE,SAAS,CAAC,CAAA;YAErD,MAAM,CAAC,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YACxC,aAAa;YACb,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACtG,aAAa;YACb,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACxG,CAAC,CAAA;QAED,gBAAW,GAAG,CAAC,QAAgB,EAAE,UAAkB,EAAU,EAAE;YAC7D,QAAQ,UAAU,EAAE,CAAC;gBACnB,KAAK,QAAQ;oBACX,OAAO,QAAQ,GAAG,QAAQ,CAAA;gBAC5B,KAAK,SAAS;oBACZ,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAA;gBACtC,KAAK,WAAW;oBACd,OAAO,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC1F,KAAK,QAAQ,CAAC;gBACd;oBACE,OAAO,QAAQ,CAAA;YACnB,CAAC;QACH,CAAC,CAAA;QAED,sBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE;YAC3C,MAAM,KAAK,GAAG,UAAU,CAAA,CAAC,mBAAmB;YAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA,CAAC,uBAAuB;YAChE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,mCAAmC;QAC9D,CAAC,CAAA;IAuCH,CAAC;IArCC,OAAO;QACL,OAAO,cAAc,CAAC,cAAc,CAAA;IACtC,CAAC;IAED,QAAQ;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE;gBACT,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACnB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aACpB;YACD,OAAO,EAAE;gBACP,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACjB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;aAClB;YACD,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE;gBACP,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACjB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;aAClB;YACD,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;SACrB,CAAA;IACH,CAAC;CACF"}
|
|
@@ -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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
particle.
|
|
40
|
-
particle.
|
|
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":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"SoundReactiveBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/SoundReactiveBehaviour.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED