custom-pixi-particles 8.1.1 → 8.1.2
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/index.d.ts +15 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/Model.d.ts +32 -0
- package/dist/lib/Model.js +44 -0
- package/dist/lib/Model.js.map +1 -0
- package/dist/lib/Particle.d.ts +234 -0
- package/dist/lib/Particle.js +201 -0
- package/dist/lib/Particle.js.map +1 -0
- package/dist/lib/ParticlePool.d.ts +37 -0
- package/dist/lib/ParticlePool.js +56 -0
- package/dist/lib/ParticlePool.js.map +1 -0
- package/dist/lib/behaviour/AngularVelocityBehaviour.d.ts +61 -0
- package/dist/lib/behaviour/AngularVelocityBehaviour.js +118 -0
- package/dist/lib/behaviour/AngularVelocityBehaviour.js.map +1 -0
- package/dist/lib/behaviour/AttractionRepulsionBehaviour.d.ts +42 -0
- package/dist/lib/behaviour/AttractionRepulsionBehaviour.js +78 -0
- package/dist/lib/behaviour/AttractionRepulsionBehaviour.js.map +1 -0
- package/dist/lib/behaviour/Behaviour.d.ts +33 -0
- package/dist/lib/behaviour/Behaviour.js +45 -0
- package/dist/lib/behaviour/Behaviour.js.map +1 -0
- package/dist/lib/behaviour/BehaviourNames.d.ts +22 -0
- package/dist/lib/behaviour/BehaviourNames.js +23 -0
- package/dist/lib/behaviour/BehaviourNames.js.map +1 -0
- package/dist/lib/behaviour/CollisionBehaviour.d.ts +86 -0
- package/dist/lib/behaviour/CollisionBehaviour.js +140 -0
- package/dist/lib/behaviour/CollisionBehaviour.js.map +1 -0
- package/dist/lib/behaviour/ColorBehaviour.d.ts +67 -0
- package/dist/lib/behaviour/ColorBehaviour.js +193 -0
- package/dist/lib/behaviour/ColorBehaviour.js.map +1 -0
- package/dist/lib/behaviour/EmitDirectionBehaviour.d.ts +52 -0
- package/dist/lib/behaviour/EmitDirectionBehaviour.js +105 -0
- package/dist/lib/behaviour/EmitDirectionBehaviour.js.map +1 -0
- package/dist/lib/behaviour/EmitterBehaviours.d.ts +69 -0
- package/dist/lib/behaviour/EmitterBehaviours.js +116 -0
- package/dist/lib/behaviour/EmitterBehaviours.js.map +1 -0
- package/dist/lib/behaviour/ForceFieldsBehaviour.d.ts +53 -0
- package/dist/lib/behaviour/ForceFieldsBehaviour.js +80 -0
- package/dist/lib/behaviour/ForceFieldsBehaviour.js.map +1 -0
- package/dist/lib/behaviour/GroupingBehaviour.d.ts +57 -0
- package/dist/lib/behaviour/GroupingBehaviour.js +143 -0
- package/dist/lib/behaviour/GroupingBehaviour.js.map +1 -0
- package/dist/lib/behaviour/LifeBehaviour.d.ts +47 -0
- package/dist/lib/behaviour/LifeBehaviour.js +65 -0
- package/dist/lib/behaviour/LifeBehaviour.js.map +1 -0
- package/dist/lib/behaviour/LightEffectBehaviour.d.ts +59 -0
- package/dist/lib/behaviour/LightEffectBehaviour.js +94 -0
- package/dist/lib/behaviour/LightEffectBehaviour.js.map +1 -0
- package/dist/lib/behaviour/NoiseBasedMotionBehaviour.d.ts +28 -0
- package/dist/lib/behaviour/NoiseBasedMotionBehaviour.js +50 -0
- package/dist/lib/behaviour/NoiseBasedMotionBehaviour.js.map +1 -0
- package/dist/lib/behaviour/PositionBehaviour.d.ts +164 -0
- package/dist/lib/behaviour/PositionBehaviour.js +484 -0
- package/dist/lib/behaviour/PositionBehaviour.js.map +1 -0
- package/dist/lib/behaviour/RotationBehaviour.d.ts +59 -0
- package/dist/lib/behaviour/RotationBehaviour.js +100 -0
- package/dist/lib/behaviour/RotationBehaviour.js.map +1 -0
- package/dist/lib/behaviour/SizeBehaviour.d.ts +61 -0
- package/dist/lib/behaviour/SizeBehaviour.js +156 -0
- package/dist/lib/behaviour/SizeBehaviour.js.map +1 -0
- package/dist/lib/behaviour/SoundReactiveBehaviour.d.ts +58 -0
- package/dist/lib/behaviour/SoundReactiveBehaviour.js +132 -0
- package/dist/lib/behaviour/SoundReactiveBehaviour.js.map +1 -0
- package/dist/lib/behaviour/SpawnBehaviour.d.ts +89 -0
- package/dist/lib/behaviour/SpawnBehaviour.js +705 -0
- package/dist/lib/behaviour/SpawnBehaviour.js.map +1 -0
- package/dist/lib/behaviour/StretchBehaviour.d.ts +30 -0
- package/dist/lib/behaviour/StretchBehaviour.js +59 -0
- package/dist/lib/behaviour/StretchBehaviour.js.map +1 -0
- package/dist/lib/behaviour/TemperatureBehaviour.d.ts +47 -0
- package/dist/lib/behaviour/TemperatureBehaviour.js +64 -0
- package/dist/lib/behaviour/TemperatureBehaviour.js.map +1 -0
- package/dist/lib/behaviour/TimelineBehaviour.d.ts +73 -0
- package/dist/lib/behaviour/TimelineBehaviour.js +100 -0
- package/dist/lib/behaviour/TimelineBehaviour.js.map +1 -0
- package/dist/lib/behaviour/TurbulenceBehaviour.d.ts +73 -0
- package/dist/lib/behaviour/TurbulenceBehaviour.js +133 -0
- package/dist/lib/behaviour/TurbulenceBehaviour.js.map +1 -0
- package/dist/lib/behaviour/index.d.ts +23 -0
- package/dist/lib/behaviour/index.js +24 -0
- package/dist/lib/behaviour/index.js.map +1 -0
- package/dist/lib/customPixiParticlesSettingsInterface.d.ts +19 -0
- package/dist/lib/customPixiParticlesSettingsInterface.js +2 -0
- package/dist/lib/customPixiParticlesSettingsInterface.js.map +1 -0
- package/dist/lib/emission/AbstractEmission.d.ts +30 -0
- package/dist/lib/emission/AbstractEmission.js +39 -0
- package/dist/lib/emission/AbstractEmission.js.map +1 -0
- package/dist/lib/emission/EmissionTypes.d.ts +6 -0
- package/dist/lib/emission/EmissionTypes.js +6 -0
- package/dist/lib/emission/EmissionTypes.js.map +1 -0
- package/dist/lib/emission/RandomEmission.d.ts +44 -0
- package/dist/lib/emission/RandomEmission.js +66 -0
- package/dist/lib/emission/RandomEmission.js.map +1 -0
- package/dist/lib/emission/StandardEmission.d.ts +62 -0
- package/dist/lib/emission/StandardEmission.js +87 -0
- package/dist/lib/emission/StandardEmission.js.map +1 -0
- package/dist/lib/emission/UniformEmission.d.ts +56 -0
- package/dist/lib/emission/UniformEmission.js +83 -0
- package/dist/lib/emission/UniformEmission.js.map +1 -0
- package/dist/lib/emission/index.d.ts +6 -0
- package/dist/lib/emission/index.js +7 -0
- package/dist/lib/emission/index.js.map +1 -0
- package/dist/lib/emitter/Duration.d.ts +27 -0
- package/dist/lib/emitter/Duration.js +41 -0
- package/dist/lib/emitter/Duration.js.map +1 -0
- package/dist/lib/emitter/Emitter.d.ts +116 -0
- package/dist/lib/emitter/Emitter.js +240 -0
- package/dist/lib/emitter/Emitter.js.map +1 -0
- package/dist/lib/emitter/index.d.ts +3 -0
- package/dist/lib/emitter/index.js +4 -0
- package/dist/lib/emitter/index.js.map +1 -0
- package/dist/lib/index.d.ts +20 -0
- package/dist/lib/index.js +21 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/parser/BehaviourParser.d.ts +21 -0
- package/dist/lib/parser/BehaviourParser.js +72 -0
- package/dist/lib/parser/BehaviourParser.js.map +1 -0
- package/dist/lib/parser/CompatibilityHelper.d.ts +12 -0
- package/dist/lib/parser/CompatibilityHelper.js +19 -0
- package/dist/lib/parser/CompatibilityHelper.js.map +1 -0
- package/dist/lib/parser/EmitControllerParser.d.ts +27 -0
- package/dist/lib/parser/EmitControllerParser.js +39 -0
- package/dist/lib/parser/EmitControllerParser.js.map +1 -0
- package/dist/lib/parser/EmitterParser.d.ts +67 -0
- package/dist/lib/parser/EmitterParser.js +168 -0
- package/dist/lib/parser/EmitterParser.js.map +1 -0
- package/dist/lib/parser/index.d.ts +5 -0
- package/dist/lib/parser/index.js +6 -0
- package/dist/lib/parser/index.js.map +1 -0
- package/dist/lib/pixi/Renderer.d.ts +125 -0
- package/dist/lib/pixi/Renderer.js +560 -0
- package/dist/lib/pixi/Renderer.js.map +1 -0
- package/dist/lib/pixi/TestRenderer.d.ts +125 -0
- package/dist/lib/pixi/TestRenderer.js +560 -0
- package/dist/lib/pixi/TestRenderer.js.map +1 -0
- package/dist/lib/util/Color.d.ts +133 -0
- package/dist/lib/util/Color.js +173 -0
- package/dist/lib/util/Color.js.map +1 -0
- package/dist/lib/util/List.d.ts +49 -0
- package/dist/lib/util/List.js +87 -0
- package/dist/lib/util/List.js.map +1 -0
- package/dist/lib/util/MinMax.d.ts +34 -0
- package/dist/lib/util/MinMax.js +46 -0
- package/dist/lib/util/MinMax.js.map +1 -0
- package/dist/lib/util/Point.d.ts +34 -0
- package/dist/lib/util/Point.js +46 -0
- package/dist/lib/util/Point.js.map +1 -0
- package/dist/lib/util/Random.d.ts +24 -0
- package/dist/lib/util/Random.js +30 -0
- package/dist/lib/util/Random.js.map +1 -0
- package/dist/lib/util/ThereBack.d.ts +14 -0
- package/dist/lib/util/ThereBack.js +23 -0
- package/dist/lib/util/ThereBack.js.map +1 -0
- package/dist/lib/util/index.d.ts +5 -0
- package/dist/lib/util/index.js +6 -0
- package/dist/lib/util/index.js.map +1 -0
- package/dist/lib/util/maths.d.ts +10 -0
- package/dist/lib/util/maths.js +13 -0
- package/dist/lib/util/maths.js.map +1 -0
- package/dist/lib/util/turbulencePool.d.ts +4 -0
- package/dist/lib/util/turbulencePool.js +7 -0
- package/dist/lib/util/turbulencePool.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { Behaviour, BehaviourNames } from './index';
|
|
2
|
+
/**
|
|
3
|
+
* RotationBehaviour is a Behaviour class used to control the rotation of particles.
|
|
4
|
+
* @extends Behaviour
|
|
5
|
+
*/
|
|
6
|
+
export default class RotationBehaviour extends Behaviour {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.enabled = false;
|
|
10
|
+
this.priority = 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
|
|
20
|
+
/**
|
|
21
|
+
* Initialise the Behaviour for a particle
|
|
22
|
+
* @param {Particle} particle - The particle to be initialised
|
|
23
|
+
*/
|
|
24
|
+
this.init = (particle) => {
|
|
25
|
+
if (!this.enabled)
|
|
26
|
+
return;
|
|
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;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Applies the Behaviour to a particle
|
|
35
|
+
* @param {Particle} particle - The particle to apply the Behaviour to
|
|
36
|
+
* @param {number} deltaTime - The delta time of the runtime
|
|
37
|
+
*/
|
|
38
|
+
this.apply = (particle, deltaTime) => {
|
|
39
|
+
if (!this.enabled)
|
|
40
|
+
return;
|
|
41
|
+
if (particle.skipRotationBehaviour)
|
|
42
|
+
return;
|
|
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;
|
|
61
|
+
};
|
|
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
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Gets the name of the Behaviour
|
|
74
|
+
* @returns {string} - The name of the Behaviour
|
|
75
|
+
*/
|
|
76
|
+
getName() {
|
|
77
|
+
return BehaviourNames.ROTATION_BEHAVIOUR;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Gets the properties of the Behaviour
|
|
81
|
+
* @returns {object} - The properties of the Behaviour
|
|
82
|
+
*/
|
|
83
|
+
getProps() {
|
|
84
|
+
return {
|
|
85
|
+
enabled: this.enabled,
|
|
86
|
+
priority: this.priority,
|
|
87
|
+
rotation: this.rotation,
|
|
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,
|
|
96
|
+
name: this.getName(),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=RotationBehaviour.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RotationBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/RotationBehaviour.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Point } from '../util';
|
|
2
|
+
import { Behaviour } from './index';
|
|
3
|
+
import Particle from '../Particle';
|
|
4
|
+
export default class SizeBehaviour extends Behaviour {
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
priority: number;
|
|
7
|
+
sizeStart: Point;
|
|
8
|
+
sizeEnd: Point;
|
|
9
|
+
startVariance: number;
|
|
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;
|
|
24
|
+
init: (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;
|
|
29
|
+
getName(): string;
|
|
30
|
+
getProps(): {
|
|
31
|
+
enabled: boolean;
|
|
32
|
+
priority: number;
|
|
33
|
+
sizeStart: {
|
|
34
|
+
x: number;
|
|
35
|
+
y: number;
|
|
36
|
+
};
|
|
37
|
+
sizeEnd: {
|
|
38
|
+
x: number;
|
|
39
|
+
y: number;
|
|
40
|
+
};
|
|
41
|
+
startVariance: number;
|
|
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;
|
|
59
|
+
name: string;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { Point } from '../util';
|
|
2
|
+
import { Behaviour, BehaviourNames } from './index';
|
|
3
|
+
export default class SizeBehaviour extends Behaviour {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(...arguments);
|
|
6
|
+
this.enabled = true;
|
|
7
|
+
this.priority = 0;
|
|
8
|
+
this.sizeStart = new Point(1, 1);
|
|
9
|
+
this.sizeEnd = new Point(1, 1);
|
|
10
|
+
this.startVariance = 0;
|
|
11
|
+
this.endVariance = 0;
|
|
12
|
+
this.maxSize = new Point(2, 2); // 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
|
|
25
|
+
this.init = (particle) => {
|
|
26
|
+
if (!this.enabled)
|
|
27
|
+
return;
|
|
28
|
+
let variance = this.varianceFrom(this.startVariance);
|
|
29
|
+
const sizeStartX = this.sizeStart.x + variance;
|
|
30
|
+
const sizeStartY = this.sizeStart.y + variance;
|
|
31
|
+
variance = this.varianceFrom(this.endVariance);
|
|
32
|
+
const sizeEndX = this.sizeEnd.x + variance;
|
|
33
|
+
const sizeEndY = this.sizeEnd.y + variance;
|
|
34
|
+
particle.sizeDifference = {
|
|
35
|
+
x: sizeEndX - sizeStartX,
|
|
36
|
+
y: sizeEndY - sizeStartY,
|
|
37
|
+
};
|
|
38
|
+
particle.sizeStart.x = sizeStartX;
|
|
39
|
+
particle.sizeStart.y = sizeStartY;
|
|
40
|
+
particle.sizeEnd.x = sizeEndX;
|
|
41
|
+
particle.sizeEnd.y = sizeEndY;
|
|
42
|
+
particle.size.copyFrom(particle.sizeStart);
|
|
43
|
+
};
|
|
44
|
+
this.apply = (particle, deltaTime) => {
|
|
45
|
+
if (!this.enabled || particle.skipSizeBehaviour)
|
|
46
|
+
return;
|
|
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);
|
|
56
|
+
return;
|
|
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);
|
|
83
|
+
particle.size.x = sizeX;
|
|
84
|
+
particle.size.y = sizeY;
|
|
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
|
+
};
|
|
118
|
+
}
|
|
119
|
+
getName() {
|
|
120
|
+
return BehaviourNames.SIZE_BEHAVIOUR;
|
|
121
|
+
}
|
|
122
|
+
getProps() {
|
|
123
|
+
return {
|
|
124
|
+
enabled: this.enabled,
|
|
125
|
+
priority: this.priority,
|
|
126
|
+
sizeStart: {
|
|
127
|
+
x: this.sizeStart.x,
|
|
128
|
+
y: this.sizeStart.y,
|
|
129
|
+
},
|
|
130
|
+
sizeEnd: {
|
|
131
|
+
x: this.sizeEnd.x,
|
|
132
|
+
y: this.sizeEnd.y,
|
|
133
|
+
},
|
|
134
|
+
startVariance: this.startVariance,
|
|
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,
|
|
152
|
+
name: this.getName(),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=SizeBehaviour.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SizeBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/SizeBehaviour.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Behaviour } from './index';
|
|
2
|
+
import Particle from '../Particle';
|
|
3
|
+
import { Color, Point } from '../util';
|
|
4
|
+
export default class SoundReactiveBehaviour extends Behaviour {
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
priority: number;
|
|
7
|
+
isPlaying: boolean;
|
|
8
|
+
useColor: boolean;
|
|
9
|
+
useSize: boolean;
|
|
10
|
+
useVelocity: boolean;
|
|
11
|
+
useRotation: boolean;
|
|
12
|
+
useRandomColor: boolean;
|
|
13
|
+
beatColor: Color;
|
|
14
|
+
audioContext: AudioContext | null;
|
|
15
|
+
analyser: AnalyserNode | null;
|
|
16
|
+
frequencyData: Uint8Array | null;
|
|
17
|
+
amplitudeFactor: number;
|
|
18
|
+
frequencyFactor: number;
|
|
19
|
+
rotationFactor: number;
|
|
20
|
+
beatSensitivity: number;
|
|
21
|
+
velocityFactor: Point;
|
|
22
|
+
init(): void;
|
|
23
|
+
apply(particle: Particle, deltaTime: number): void;
|
|
24
|
+
/**
|
|
25
|
+
* Computes the amplitude (average volume level) from the frequency data.
|
|
26
|
+
*/
|
|
27
|
+
getAmplitude(): number;
|
|
28
|
+
/**
|
|
29
|
+
* Finds the dominant frequency (frequency with the highest amplitude).
|
|
30
|
+
*/
|
|
31
|
+
getDominantFrequency(): number;
|
|
32
|
+
/**
|
|
33
|
+
* Detects a beat based on amplitude and sensitivity.
|
|
34
|
+
*/
|
|
35
|
+
isBeatDetected(amplitude: number): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Generates a random RGBA color.
|
|
38
|
+
*/
|
|
39
|
+
getRandomColor(): Color;
|
|
40
|
+
getName(): string;
|
|
41
|
+
getProps(): {
|
|
42
|
+
enabled: boolean;
|
|
43
|
+
priority: number;
|
|
44
|
+
isPlaying: boolean;
|
|
45
|
+
useColor: boolean;
|
|
46
|
+
useVelocity: boolean;
|
|
47
|
+
useSize: boolean;
|
|
48
|
+
useRotation: boolean;
|
|
49
|
+
useRandomColor: boolean;
|
|
50
|
+
beatColor: Color;
|
|
51
|
+
amplitudeFactor: number;
|
|
52
|
+
frequencyFactor: number;
|
|
53
|
+
rotationFactor: number;
|
|
54
|
+
beatSensitivity: number;
|
|
55
|
+
velocityFactor: Point;
|
|
56
|
+
name: string;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { Behaviour, BehaviourNames } from './index';
|
|
2
|
+
import { Color, Point } from '../util';
|
|
3
|
+
export default class SoundReactiveBehaviour extends Behaviour {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(...arguments);
|
|
6
|
+
this.enabled = true;
|
|
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)
|
|
15
|
+
this.audioContext = null; // Audio context for analysis
|
|
16
|
+
this.analyser = null; // Audio analyser node
|
|
17
|
+
this.frequencyData = null; // Frequency data array
|
|
18
|
+
this.amplitudeFactor = 0.1; // Scale factor for amplitude effects
|
|
19
|
+
this.frequencyFactor = 1; // Scale factor for frequency effects
|
|
20
|
+
this.rotationFactor = 0.05; // Scale factor for rotation effects
|
|
21
|
+
this.beatSensitivity = 1; // Sensitivity to detect beats
|
|
22
|
+
this.velocityFactor = new Point(1, 1); // Sensitivity to detect beats
|
|
23
|
+
}
|
|
24
|
+
init() {
|
|
25
|
+
//
|
|
26
|
+
}
|
|
27
|
+
apply(particle, deltaTime) {
|
|
28
|
+
if (!this.enabled || !this.analyser || !this.frequencyData || !this.isPlaying)
|
|
29
|
+
return;
|
|
30
|
+
// Update frequency data
|
|
31
|
+
this.analyser.getByteFrequencyData(this.frequencyData);
|
|
32
|
+
// Compute amplitude and frequency effects
|
|
33
|
+
const amplitude = this.getAmplitude();
|
|
34
|
+
const dominantFrequency = this.getDominantFrequency();
|
|
35
|
+
if (this.useSize) {
|
|
36
|
+
// Apply amplitude effect to size
|
|
37
|
+
particle.size.x += amplitude * this.amplitudeFactor * deltaTime;
|
|
38
|
+
particle.size.y += amplitude * this.amplitudeFactor * deltaTime;
|
|
39
|
+
}
|
|
40
|
+
if (this.useVelocity) {
|
|
41
|
+
// Apply frequency effect to velocity or position
|
|
42
|
+
particle.velocity.x += dominantFrequency * this.frequencyFactor * deltaTime * this.velocityFactor.x;
|
|
43
|
+
particle.velocity.y += dominantFrequency * this.frequencyFactor * deltaTime * this.velocityFactor.y;
|
|
44
|
+
}
|
|
45
|
+
if (this.useRotation) {
|
|
46
|
+
// Apply rotation effect based on dominant frequency
|
|
47
|
+
particle.rotation += dominantFrequency * this.rotationFactor * deltaTime;
|
|
48
|
+
}
|
|
49
|
+
if (this.useColor) {
|
|
50
|
+
// Add beat reaction with color and alpha logic
|
|
51
|
+
if (this.isBeatDetected(amplitude)) {
|
|
52
|
+
const color = this.useRandomColor ? this.getRandomColor() : this.beatColor;
|
|
53
|
+
particle.color.r = color.r;
|
|
54
|
+
particle.color.g = color.g;
|
|
55
|
+
particle.color.b = color.b;
|
|
56
|
+
particle.color.alpha = color.alpha; // Ensure alpha is applied
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
particle.color.r = Math.max(0, particle.color.r - 5); // Fade back to normal
|
|
60
|
+
particle.color.g = Math.max(0, particle.color.g - 5);
|
|
61
|
+
particle.color.b = Math.max(0, particle.color.b - 5);
|
|
62
|
+
particle.color.alpha = Math.max(0, particle.color.alpha - 0.05); // Gradually decrease alpha
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Computes the amplitude (average volume level) from the frequency data.
|
|
68
|
+
*/
|
|
69
|
+
getAmplitude() {
|
|
70
|
+
if (!this.frequencyData)
|
|
71
|
+
return 0;
|
|
72
|
+
const sum = this.frequencyData.reduce((a, b) => a + b, 0);
|
|
73
|
+
return sum / this.frequencyData.length;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Finds the dominant frequency (frequency with the highest amplitude).
|
|
77
|
+
*/
|
|
78
|
+
getDominantFrequency() {
|
|
79
|
+
var _a, _b, _c, _d;
|
|
80
|
+
if (!this.frequencyData)
|
|
81
|
+
return 0;
|
|
82
|
+
let maxAmplitude = 0;
|
|
83
|
+
let dominantIndex = 0;
|
|
84
|
+
for (let i = 0; i < this.frequencyData.length; i++) {
|
|
85
|
+
if (this.frequencyData[i] > maxAmplitude) {
|
|
86
|
+
maxAmplitude = this.frequencyData[i];
|
|
87
|
+
dominantIndex = i;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return (dominantIndex * ((_b = (_a = this.analyser) === null || _a === void 0 ? void 0 : _a.context.sampleRate) !== null && _b !== void 0 ? _b : 0)) / ((_d = (_c = this.analyser) === null || _c === void 0 ? void 0 : _c.fftSize) !== null && _d !== void 0 ? _d : 1);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Detects a beat based on amplitude and sensitivity.
|
|
94
|
+
*/
|
|
95
|
+
isBeatDetected(amplitude) {
|
|
96
|
+
return amplitude > this.beatSensitivity * 128; // Threshold for beat detection
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Generates a random RGBA color.
|
|
100
|
+
*/
|
|
101
|
+
getRandomColor() {
|
|
102
|
+
// Generate a random color if allTheSameColor is false
|
|
103
|
+
const r = Math.floor(Math.random() * 256);
|
|
104
|
+
const g = Math.floor(Math.random() * 256);
|
|
105
|
+
const b = Math.floor(Math.random() * 256);
|
|
106
|
+
const a = 1; // Ensure alpha is explicitly set
|
|
107
|
+
return new Color(r, g, b, a);
|
|
108
|
+
}
|
|
109
|
+
getName() {
|
|
110
|
+
return BehaviourNames.SOUND_REACTIVE_BEHAVIOUR;
|
|
111
|
+
}
|
|
112
|
+
getProps() {
|
|
113
|
+
return {
|
|
114
|
+
enabled: this.enabled,
|
|
115
|
+
priority: this.priority,
|
|
116
|
+
isPlaying: this.isPlaying,
|
|
117
|
+
useColor: this.useColor,
|
|
118
|
+
useVelocity: this.useVelocity,
|
|
119
|
+
useSize: this.useSize,
|
|
120
|
+
useRotation: this.useRotation,
|
|
121
|
+
useRandomColor: this.useRandomColor, // Include random color toggle in props
|
|
122
|
+
beatColor: this.beatColor, // Include beat color with alpha in props
|
|
123
|
+
amplitudeFactor: this.amplitudeFactor,
|
|
124
|
+
frequencyFactor: this.frequencyFactor,
|
|
125
|
+
rotationFactor: this.rotationFactor,
|
|
126
|
+
beatSensitivity: this.beatSensitivity,
|
|
127
|
+
velocityFactor: this.velocityFactor,
|
|
128
|
+
name: this.getName(),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=SoundReactiveBehaviour.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SoundReactiveBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/SoundReactiveBehaviour.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Behaviour } from './index';
|
|
2
|
+
import Particle from '../Particle';
|
|
3
|
+
export default class SpawnBehaviour extends Behaviour {
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
priority: number;
|
|
6
|
+
overOne: boolean;
|
|
7
|
+
trailProgress: number;
|
|
8
|
+
trailingEnabled: boolean;
|
|
9
|
+
spawnAlongTrail: boolean;
|
|
10
|
+
trailSpeed: number;
|
|
11
|
+
trailRepeat: boolean;
|
|
12
|
+
trailStart: number;
|
|
13
|
+
currentProgress: number;
|
|
14
|
+
customPoints: any[];
|
|
15
|
+
lastWordSettings: any;
|
|
16
|
+
/**
|
|
17
|
+
* Initialize particles for each custom point.
|
|
18
|
+
* @param {Particle} particle - The particle to initialize.
|
|
19
|
+
*/
|
|
20
|
+
init: (particle: Particle) => void;
|
|
21
|
+
apply: () => void;
|
|
22
|
+
/**
|
|
23
|
+
* Calculate trail positions along the range from trailStart to currentProgress.
|
|
24
|
+
* @param {Object} point - The custom point configuration.
|
|
25
|
+
* @returns {Point[]} List of positions along the trail.
|
|
26
|
+
*/
|
|
27
|
+
calculateTrailRangePositions: (point: any) => {
|
|
28
|
+
positions: {
|
|
29
|
+
x: any;
|
|
30
|
+
y: any;
|
|
31
|
+
z: any;
|
|
32
|
+
}[];
|
|
33
|
+
probabilities: number[];
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Spawn particle at the specified point configuration.
|
|
37
|
+
* @param {Particle} particle - The particle to be initialized.
|
|
38
|
+
* @param {Object} point - The custom point configuration.
|
|
39
|
+
*/
|
|
40
|
+
spawnParticleAtPoint: (particle: Particle, point: any) => void;
|
|
41
|
+
/**
|
|
42
|
+
* Calculate canvas context for rendering text-based particles.
|
|
43
|
+
* @param {Object} point - The custom point configuration.
|
|
44
|
+
*/
|
|
45
|
+
calculateCtx: (point: any) => void;
|
|
46
|
+
calculateTrailPosition: (point: any, overrideProgress?: number) => {
|
|
47
|
+
x: any;
|
|
48
|
+
y: any;
|
|
49
|
+
z: any;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Update trail progress once per frame.
|
|
53
|
+
* @param {number} deltaTime - Time since the last update
|
|
54
|
+
*/
|
|
55
|
+
updateTrailProgress: (deltaTime: number) => void;
|
|
56
|
+
weightedRandomIndex: (probabilities: any) => any;
|
|
57
|
+
/**
|
|
58
|
+
* Update method to be called once per frame.
|
|
59
|
+
* @param {number} deltaTime - Time since the last frame
|
|
60
|
+
*/
|
|
61
|
+
update: (deltaTime: number) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Adds a random variance to the given value
|
|
64
|
+
* @param {number} value - The value to calculate
|
|
65
|
+
* @param {number} variance - The random variance to add
|
|
66
|
+
* @returns {number} The calculated value
|
|
67
|
+
*/
|
|
68
|
+
calculate: (value: number, variance: number) => number;
|
|
69
|
+
/**
|
|
70
|
+
* Gets the name of the behaviour
|
|
71
|
+
* @return {string} The name of the behaviour
|
|
72
|
+
*/
|
|
73
|
+
getName(): string;
|
|
74
|
+
/**
|
|
75
|
+
* Retrieves the properties of the custom points.
|
|
76
|
+
* @returns {Object[]} The array of custom points and their properties.
|
|
77
|
+
*/
|
|
78
|
+
getProps(): {
|
|
79
|
+
enabled: boolean;
|
|
80
|
+
priority: number;
|
|
81
|
+
trailingEnabled: boolean;
|
|
82
|
+
spawnAlongTrail: boolean;
|
|
83
|
+
trailSpeed: number;
|
|
84
|
+
trailRepeat: boolean;
|
|
85
|
+
trailStart: number;
|
|
86
|
+
customPoints: any[];
|
|
87
|
+
name: string;
|
|
88
|
+
};
|
|
89
|
+
}
|