@codexo/exojs 0.7.12 → 0.8.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/CHANGELOG.md +737 -0
- package/dist/esm/core/Application.d.ts +3 -1
- package/dist/esm/core/Application.js +7 -6
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/Scene.d.ts +30 -0
- package/dist/esm/core/Scene.js +56 -0
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.js +2 -2
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/debug/DebugOverlay.js +2 -2
- package/dist/esm/debug/DebugOverlay.js.map +1 -1
- package/dist/esm/debug/PointerStackLayer.js +1 -1
- package/dist/esm/debug/PointerStackLayer.js.map +1 -1
- package/dist/esm/index.js +32 -10
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/ArcadeStickGamepadMapping.js +18 -19
- package/dist/esm/input/ArcadeStickGamepadMapping.js.map +1 -1
- package/dist/esm/input/Gamepad.d.ts +164 -62
- package/dist/esm/input/Gamepad.js +290 -134
- package/dist/esm/input/Gamepad.js.map +1 -1
- package/dist/esm/input/GamepadAxis.d.ts +120 -0
- package/dist/esm/input/GamepadAxis.js +106 -0
- package/dist/esm/input/GamepadAxis.js.map +1 -0
- package/dist/esm/input/GamepadButton.d.ts +110 -0
- package/dist/esm/input/GamepadButton.js +99 -0
- package/dist/esm/input/GamepadButton.js.map +1 -0
- package/dist/esm/input/GamepadDefinitions.js +4 -0
- package/dist/esm/input/GamepadDefinitions.js.map +1 -1
- package/dist/esm/input/GamepadMapping.d.ts +28 -24
- package/dist/esm/input/GamepadMapping.js +33 -16
- package/dist/esm/input/GamepadMapping.js.map +1 -1
- package/dist/esm/input/GamepadPromptLayouts.d.ts +10 -8
- package/dist/esm/input/GamepadPromptLayouts.js +21 -20
- package/dist/esm/input/GamepadPromptLayouts.js.map +1 -1
- package/dist/esm/input/GenericDualAnalogGamepadMapping.d.ts +6 -3
- package/dist/esm/input/GenericDualAnalogGamepadMapping.js +55 -46
- package/dist/esm/input/GenericDualAnalogGamepadMapping.js.map +1 -1
- package/dist/esm/input/InputBinding.d.ts +74 -0
- package/dist/esm/input/InputBinding.js +100 -0
- package/dist/esm/input/InputBinding.js.map +1 -0
- package/dist/esm/input/InputManager.d.ts +79 -33
- package/dist/esm/input/InputManager.js +229 -104
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionManager.d.ts +1 -1
- package/dist/esm/input/InteractionManager.js +13 -13
- package/dist/esm/input/InteractionManager.js.map +1 -1
- package/dist/esm/input/JoyConLeftGamepadMapping.d.ts +14 -9
- package/dist/esm/input/JoyConLeftGamepadMapping.js +39 -9
- package/dist/esm/input/JoyConLeftGamepadMapping.js.map +1 -1
- package/dist/esm/input/JoyConRightGamepadMapping.d.ts +14 -9
- package/dist/esm/input/JoyConRightGamepadMapping.js +35 -9
- package/dist/esm/input/JoyConRightGamepadMapping.js.map +1 -1
- package/dist/esm/input/Pointer.d.ts +84 -71
- package/dist/esm/input/Pointer.js +71 -71
- package/dist/esm/input/Pointer.js.map +1 -1
- package/dist/esm/input/SteamDeckGamepadMapping.d.ts +18 -0
- package/dist/esm/input/SteamDeckGamepadMapping.js +76 -0
- package/dist/esm/input/SteamDeckGamepadMapping.js.map +1 -0
- package/dist/esm/input/index.d.ts +7 -4
- package/dist/esm/input/types.d.ts +0 -76
- package/dist/esm/input/types.js +1 -80
- package/dist/esm/input/types.js.map +1 -1
- package/dist/esm/particles/ParticleSystem.d.ts +180 -83
- package/dist/esm/particles/ParticleSystem.js +446 -133
- package/dist/esm/particles/ParticleSystem.js.map +1 -1
- package/dist/esm/particles/distributions/BoxArea.d.ts +17 -0
- package/dist/esm/particles/distributions/BoxArea.js +48 -0
- package/dist/esm/particles/distributions/BoxArea.js.map +1 -0
- package/dist/esm/particles/distributions/CircleArea.d.ts +19 -0
- package/dist/esm/particles/distributions/CircleArea.js +33 -0
- package/dist/esm/particles/distributions/CircleArea.js.map +1 -0
- package/dist/esm/particles/distributions/ConeDirection.d.ts +28 -0
- package/dist/esm/particles/distributions/ConeDirection.js +44 -0
- package/dist/esm/particles/distributions/ConeDirection.js.map +1 -0
- package/dist/esm/particles/distributions/Constant.d.ts +17 -0
- package/dist/esm/particles/distributions/Constant.js +35 -0
- package/dist/esm/particles/distributions/Constant.js.map +1 -0
- package/dist/esm/particles/distributions/Curve.d.ts +30 -0
- package/dist/esm/particles/distributions/Curve.js +53 -0
- package/dist/esm/particles/distributions/Curve.js.map +1 -0
- package/dist/esm/particles/distributions/Distribution.d.ts +45 -0
- package/dist/esm/particles/distributions/Gradient.d.ts +40 -0
- package/dist/esm/particles/distributions/Gradient.js +72 -0
- package/dist/esm/particles/distributions/Gradient.js.map +1 -0
- package/dist/esm/particles/distributions/LineSegment.d.ts +15 -0
- package/dist/esm/particles/distributions/LineSegment.js +27 -0
- package/dist/esm/particles/distributions/LineSegment.js.map +1 -0
- package/dist/esm/particles/distributions/Range.d.ts +12 -0
- package/dist/esm/particles/distributions/Range.js +19 -0
- package/dist/esm/particles/distributions/Range.js.map +1 -0
- package/dist/esm/particles/distributions/VectorRange.d.ts +20 -0
- package/dist/esm/particles/distributions/VectorRange.js +31 -0
- package/dist/esm/particles/distributions/VectorRange.js.map +1 -0
- package/dist/esm/particles/distributions/index.d.ts +12 -0
- package/dist/esm/particles/gpu/ParticleGpuState.d.ts +57 -0
- package/dist/esm/particles/gpu/ParticleGpuState.js +508 -0
- package/dist/esm/particles/gpu/ParticleGpuState.js.map +1 -0
- package/dist/esm/particles/index.d.ts +2 -10
- package/dist/esm/particles/modules/AlphaFadeOverLifetime.d.ts +24 -0
- package/dist/esm/particles/modules/AlphaFadeOverLifetime.js +60 -0
- package/dist/esm/particles/modules/AlphaFadeOverLifetime.js.map +1 -0
- package/dist/esm/particles/modules/ApplyForce.d.ts +20 -0
- package/dist/esm/particles/modules/ApplyForce.js +48 -0
- package/dist/esm/particles/modules/ApplyForce.js.map +1 -0
- package/dist/esm/particles/modules/AttractToPoint.d.ts +27 -0
- package/dist/esm/particles/modules/AttractToPoint.js +73 -0
- package/dist/esm/particles/modules/AttractToPoint.js.map +1 -0
- package/dist/esm/particles/modules/BurstSpawn.d.ts +53 -0
- package/dist/esm/particles/modules/BurstSpawn.js +94 -0
- package/dist/esm/particles/modules/BurstSpawn.js.map +1 -0
- package/dist/esm/particles/modules/ColorOverLifetime.d.ts +22 -0
- package/dist/esm/particles/modules/ColorOverLifetime.js +65 -0
- package/dist/esm/particles/modules/ColorOverLifetime.js.map +1 -0
- package/dist/esm/particles/modules/ColorOverSpeed.d.ts +27 -0
- package/dist/esm/particles/modules/ColorOverSpeed.js +86 -0
- package/dist/esm/particles/modules/ColorOverSpeed.js.map +1 -0
- package/dist/esm/particles/modules/DeathModule.d.ts +24 -0
- package/dist/esm/particles/modules/DeathModule.js +25 -0
- package/dist/esm/particles/modules/DeathModule.js.map +1 -0
- package/dist/esm/particles/modules/Drag.d.ts +20 -0
- package/dist/esm/particles/modules/Drag.js +45 -0
- package/dist/esm/particles/modules/Drag.js.map +1 -0
- package/dist/esm/particles/modules/OrbitalForce.d.ts +28 -0
- package/dist/esm/particles/modules/OrbitalForce.js +65 -0
- package/dist/esm/particles/modules/OrbitalForce.js.map +1 -0
- package/dist/esm/particles/modules/RateSpawn.d.ts +41 -0
- package/dist/esm/particles/modules/RateSpawn.js +76 -0
- package/dist/esm/particles/modules/RateSpawn.js.map +1 -0
- package/dist/esm/particles/modules/RepelFromPoint.d.ts +24 -0
- package/dist/esm/particles/modules/RepelFromPoint.js +76 -0
- package/dist/esm/particles/modules/RepelFromPoint.js.map +1 -0
- package/dist/esm/particles/modules/RotateOverLifetime.d.ts +20 -0
- package/dist/esm/particles/modules/RotateOverLifetime.js +43 -0
- package/dist/esm/particles/modules/RotateOverLifetime.js.map +1 -0
- package/dist/esm/particles/modules/ScaleOverLifetime.d.ts +26 -0
- package/dist/esm/particles/modules/ScaleOverLifetime.js +59 -0
- package/dist/esm/particles/modules/ScaleOverLifetime.js.map +1 -0
- package/dist/esm/particles/modules/SpawnModule.d.ts +30 -0
- package/dist/esm/particles/modules/SpawnModule.js +31 -0
- package/dist/esm/particles/modules/SpawnModule.js.map +1 -0
- package/dist/esm/particles/modules/SpawnOnDeath.d.ts +24 -0
- package/dist/esm/particles/modules/SpawnOnDeath.js +47 -0
- package/dist/esm/particles/modules/SpawnOnDeath.js.map +1 -0
- package/dist/esm/particles/modules/Turbulence.d.ts +30 -0
- package/dist/esm/particles/modules/Turbulence.js +122 -0
- package/dist/esm/particles/modules/Turbulence.js.map +1 -0
- package/dist/esm/particles/modules/UpdateModule.d.ts +95 -0
- package/dist/esm/particles/modules/UpdateModule.js +66 -0
- package/dist/esm/particles/modules/UpdateModule.js.map +1 -0
- package/dist/esm/particles/modules/VelocityOverLifetime.d.ts +30 -0
- package/dist/esm/particles/modules/VelocityOverLifetime.js +84 -0
- package/dist/esm/particles/modules/VelocityOverLifetime.js.map +1 -0
- package/dist/esm/particles/modules/WgslContribution.d.ts +81 -0
- package/dist/esm/particles/modules/WgslContribution.js +34 -0
- package/dist/esm/particles/modules/WgslContribution.js.map +1 -0
- package/dist/esm/particles/modules/index.d.ts +22 -0
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.d.ts +9 -14
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js +90 -61
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/glsl/particle.vert.js +1 -1
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.d.ts +9 -0
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +107 -23
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.d.ts +52 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.d.ts +29 -0
- package/dist/esm/rendering/webgpu/compute/index.d.ts +3 -0
- package/dist/esm/resources/CacheFirstStrategy.d.ts +7 -4
- package/dist/esm/resources/CacheFirstStrategy.js +11 -8
- package/dist/esm/resources/CacheFirstStrategy.js.map +1 -1
- package/dist/esm/resources/CacheStrategy.d.ts +14 -6
- package/dist/esm/resources/Loader.d.ts +8 -3
- package/dist/esm/resources/Loader.js +19 -37
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/resources/NetworkOnlyStrategy.d.ts +3 -0
- package/dist/esm/resources/NetworkOnlyStrategy.js +8 -3
- package/dist/esm/resources/NetworkOnlyStrategy.js.map +1 -1
- package/dist/esm/resources/factories/ImageFactory.d.ts +2 -2
- package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
- package/dist/esm/resources/factories/TextureFactory.d.ts +2 -2
- package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
- package/dist/esm/resources/factories/VttFactory.d.ts +3 -3
- package/dist/esm/resources/factories/VttFactory.js +83 -6
- package/dist/esm/resources/factories/VttFactory.js.map +1 -1
- package/dist/exo.esm.js +4028 -1518
- package/dist/exo.esm.js.map +1 -1
- package/package.json +2 -1
- package/dist/esm/input/GamepadChannels.d.ts +0 -47
- package/dist/esm/input/GamepadChannels.js +0 -53
- package/dist/esm/input/GamepadChannels.js.map +0 -1
- package/dist/esm/input/GamepadControl.d.ts +0 -33
- package/dist/esm/input/GamepadControl.js +0 -42
- package/dist/esm/input/GamepadControl.js.map +0 -1
- package/dist/esm/input/Input.d.ts +0 -52
- package/dist/esm/input/Input.js +0 -90
- package/dist/esm/input/Input.js.map +0 -1
- package/dist/esm/particles/Particle.d.ts +0 -77
- package/dist/esm/particles/Particle.js +0 -143
- package/dist/esm/particles/Particle.js.map +0 -1
- package/dist/esm/particles/ParticleProperties.d.ts +0 -29
- package/dist/esm/particles/affectors/ColorAffector.d.ts +0 -30
- package/dist/esm/particles/affectors/ColorAffector.js +0 -55
- package/dist/esm/particles/affectors/ColorAffector.js.map +0 -1
- package/dist/esm/particles/affectors/ForceAffector.d.ts +0 -24
- package/dist/esm/particles/affectors/ForceAffector.js +0 -39
- package/dist/esm/particles/affectors/ForceAffector.js.map +0 -1
- package/dist/esm/particles/affectors/ParticleAffector.d.ts +0 -19
- package/dist/esm/particles/affectors/ScaleAffector.d.ts +0 -23
- package/dist/esm/particles/affectors/ScaleAffector.js +0 -38
- package/dist/esm/particles/affectors/ScaleAffector.js.map +0 -1
- package/dist/esm/particles/affectors/TorqueAffector.d.ts +0 -23
- package/dist/esm/particles/affectors/TorqueAffector.js +0 -37
- package/dist/esm/particles/affectors/TorqueAffector.js.map +0 -1
- package/dist/esm/particles/emitters/ParticleEmitter.d.ts +0 -19
- package/dist/esm/particles/emitters/ParticleOptions.d.ts +0 -62
- package/dist/esm/particles/emitters/ParticleOptions.js +0 -120
- package/dist/esm/particles/emitters/ParticleOptions.js.map +0 -1
- package/dist/esm/particles/emitters/UniversalEmitter.d.ts +0 -40
- package/dist/esm/particles/emitters/UniversalEmitter.js +0 -68
- package/dist/esm/particles/emitters/UniversalEmitter.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleSystem.js","sources":["../../../../src/particles/ParticleSystem.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ParticleSystem.js","sources":["../../../../src/particles/ParticleSystem.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Vector } from '@/math/Vector';
|
|
2
|
+
import type { Distribution } from './Distribution';
|
|
3
|
+
/**
|
|
4
|
+
* Random point inside an axis-aligned box. With `mode: 'edge'` the result
|
|
5
|
+
* lies on the perimeter (uniform along all four edges combined); with
|
|
6
|
+
* `mode: 'volume'` (default) it's uniformly distributed across the area.
|
|
7
|
+
*/
|
|
8
|
+
export declare class BoxArea implements Distribution<Vector> {
|
|
9
|
+
minX: number;
|
|
10
|
+
maxX: number;
|
|
11
|
+
minY: number;
|
|
12
|
+
maxY: number;
|
|
13
|
+
mode: 'volume' | 'edge';
|
|
14
|
+
private readonly _scratch;
|
|
15
|
+
constructor(minX: number, maxX: number, minY: number, maxY: number, mode?: 'volume' | 'edge');
|
|
16
|
+
sample(out?: Vector): Vector;
|
|
17
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Vector } from '../../math/Vector.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Random point inside an axis-aligned box. With `mode: 'edge'` the result
|
|
5
|
+
* lies on the perimeter (uniform along all four edges combined); with
|
|
6
|
+
* `mode: 'volume'` (default) it's uniformly distributed across the area.
|
|
7
|
+
*/
|
|
8
|
+
class BoxArea {
|
|
9
|
+
minX;
|
|
10
|
+
maxX;
|
|
11
|
+
minY;
|
|
12
|
+
maxY;
|
|
13
|
+
mode;
|
|
14
|
+
_scratch = new Vector();
|
|
15
|
+
constructor(minX, maxX, minY, maxY, mode = 'volume') {
|
|
16
|
+
this.minX = minX;
|
|
17
|
+
this.maxX = maxX;
|
|
18
|
+
this.minY = minY;
|
|
19
|
+
this.maxY = maxY;
|
|
20
|
+
this.mode = mode;
|
|
21
|
+
}
|
|
22
|
+
sample(out = this._scratch) {
|
|
23
|
+
if (this.mode === 'volume') {
|
|
24
|
+
out.set(this.minX + Math.random() * (this.maxX - this.minX), this.minY + Math.random() * (this.maxY - this.minY));
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
const w = this.maxX - this.minX;
|
|
28
|
+
const h = this.maxY - this.minY;
|
|
29
|
+
const perimeter = (w + h) * 2;
|
|
30
|
+
const t = Math.random() * perimeter;
|
|
31
|
+
if (t < w) {
|
|
32
|
+
out.set(this.minX + t, this.minY);
|
|
33
|
+
}
|
|
34
|
+
else if (t < w + h) {
|
|
35
|
+
out.set(this.maxX, this.minY + (t - w));
|
|
36
|
+
}
|
|
37
|
+
else if (t < w * 2 + h) {
|
|
38
|
+
out.set(this.maxX - (t - w - h), this.maxY);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
out.set(this.minX, this.maxY - (t - w * 2 - h));
|
|
42
|
+
}
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export { BoxArea };
|
|
48
|
+
//# sourceMappingURL=BoxArea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BoxArea.js","sources":["../../../../../src/particles/distributions/BoxArea.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;;;AAIG;MACU,OAAO,CAAA;AAIL,IAAA,IAAA;AACA,IAAA,IAAA;AACA,IAAA,IAAA;AACA,IAAA,IAAA;AACA,IAAA,IAAA;AAPM,IAAA,QAAQ,GAAG,IAAI,MAAM,EAAE;IAExC,WAAA,CACW,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAA,GAA0B,QAAQ,EAAA;QAJlC,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;IACZ;AAEI,IAAA,MAAM,CAAC,GAAA,GAAc,IAAI,CAAC,QAAQ,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACxB,YAAA,GAAG,CAAC,GAAG,CACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EACnD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CACtD;AAED,YAAA,OAAO,GAAG;QACd;QAEA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC/B,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS;AAEnC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;QACrC;AAAO,aAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAClB,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C;aAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;QAC/C;aAAO;YACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD;AAEA,QAAA,OAAO,GAAG;IACd;AACH;;;;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Vector } from '@/math/Vector';
|
|
2
|
+
import type { Distribution } from './Distribution';
|
|
3
|
+
/**
|
|
4
|
+
* Random point on or inside a circle of radius `radius`, centred at
|
|
5
|
+
* `(centerX, centerY)`. With `mode: 'edge'` the result lies exactly on the
|
|
6
|
+
* circumference; with `mode: 'volume'` (default) it lies anywhere in the
|
|
7
|
+
* disk, with uniform area density (sqrt-of-random-radius distribution).
|
|
8
|
+
*
|
|
9
|
+
* Use as a spawn-position distribution for circular emitters.
|
|
10
|
+
*/
|
|
11
|
+
export declare class CircleArea implements Distribution<Vector> {
|
|
12
|
+
centerX: number;
|
|
13
|
+
centerY: number;
|
|
14
|
+
radius: number;
|
|
15
|
+
mode: 'volume' | 'edge';
|
|
16
|
+
private readonly _scratch;
|
|
17
|
+
constructor(centerX: number, centerY: number, radius: number, mode?: 'volume' | 'edge');
|
|
18
|
+
sample(out?: Vector): Vector;
|
|
19
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Vector } from '../../math/Vector.js';
|
|
2
|
+
|
|
3
|
+
const tau = Math.PI * 2;
|
|
4
|
+
/**
|
|
5
|
+
* Random point on or inside a circle of radius `radius`, centred at
|
|
6
|
+
* `(centerX, centerY)`. With `mode: 'edge'` the result lies exactly on the
|
|
7
|
+
* circumference; with `mode: 'volume'` (default) it lies anywhere in the
|
|
8
|
+
* disk, with uniform area density (sqrt-of-random-radius distribution).
|
|
9
|
+
*
|
|
10
|
+
* Use as a spawn-position distribution for circular emitters.
|
|
11
|
+
*/
|
|
12
|
+
class CircleArea {
|
|
13
|
+
centerX;
|
|
14
|
+
centerY;
|
|
15
|
+
radius;
|
|
16
|
+
mode;
|
|
17
|
+
_scratch = new Vector();
|
|
18
|
+
constructor(centerX, centerY, radius, mode = 'volume') {
|
|
19
|
+
this.centerX = centerX;
|
|
20
|
+
this.centerY = centerY;
|
|
21
|
+
this.radius = radius;
|
|
22
|
+
this.mode = mode;
|
|
23
|
+
}
|
|
24
|
+
sample(out = this._scratch) {
|
|
25
|
+
const angle = Math.random() * tau;
|
|
26
|
+
const r = this.mode === 'edge' ? this.radius : this.radius * Math.sqrt(Math.random());
|
|
27
|
+
out.set(this.centerX + Math.cos(angle) * r, this.centerY + Math.sin(angle) * r);
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export { CircleArea };
|
|
33
|
+
//# sourceMappingURL=CircleArea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircleArea.js","sources":["../../../../../src/particles/distributions/CircleArea.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;AAEvB;;;;;;;AAOG;MACU,UAAU,CAAA;AAIR,IAAA,OAAA;AACA,IAAA,OAAA;AACA,IAAA,MAAA;AACA,IAAA,IAAA;AANM,IAAA,QAAQ,GAAG,IAAI,MAAM,EAAE;AAExC,IAAA,WAAA,CACW,OAAe,EACf,OAAe,EACf,MAAc,EACd,OAA0B,QAAQ,EAAA;QAHlC,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,IAAI,GAAJ,IAAI;IACZ;AAEI,IAAA,MAAM,CAAC,GAAA,GAAc,IAAI,CAAC,QAAQ,EAAA;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;AACjC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AAErF,QAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAE/E,QAAA,OAAO,GAAG;IACd;AACH;;;;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Vector } from '@/math/Vector';
|
|
2
|
+
import type { Distribution } from './Distribution';
|
|
3
|
+
/**
|
|
4
|
+
* Random unit vector inside a cone, scaled by a speed magnitude.
|
|
5
|
+
*
|
|
6
|
+
* The cone is centred on `directionAngle` (in radians, 0 = +X, π/2 = +Y for
|
|
7
|
+
* screen-down coordinates) and spans `±halfAngle` radians around it. Speed
|
|
8
|
+
* is sampled uniformly in `[minSpeed, maxSpeed]`.
|
|
9
|
+
*
|
|
10
|
+
* Use for emission cones, explosions, fountain spread — anywhere the
|
|
11
|
+
* direction has a preferred axis with bounded variance.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Upward fountain with ±15° spread, 200-300 px/s:
|
|
15
|
+
* const up = new ConeDirection(-Math.PI / 2, Math.PI / 12, 200, 300);
|
|
16
|
+
* up.sample(particle.velocity);
|
|
17
|
+
*/
|
|
18
|
+
export declare class ConeDirection implements Distribution<Vector> {
|
|
19
|
+
directionAngle: number;
|
|
20
|
+
halfAngle: number;
|
|
21
|
+
minSpeed: number;
|
|
22
|
+
maxSpeed: number;
|
|
23
|
+
private readonly _scratch;
|
|
24
|
+
constructor(directionAngle: number, halfAngle: number, minSpeed: number, maxSpeed: number);
|
|
25
|
+
sample(out?: Vector): Vector;
|
|
26
|
+
/** Convenience: omnidirectional emission (full circle, 0..2π). */
|
|
27
|
+
static omni(minSpeed: number, maxSpeed: number): ConeDirection;
|
|
28
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Vector } from '../../math/Vector.js';
|
|
2
|
+
|
|
3
|
+
const tau = Math.PI * 2;
|
|
4
|
+
/**
|
|
5
|
+
* Random unit vector inside a cone, scaled by a speed magnitude.
|
|
6
|
+
*
|
|
7
|
+
* The cone is centred on `directionAngle` (in radians, 0 = +X, π/2 = +Y for
|
|
8
|
+
* screen-down coordinates) and spans `±halfAngle` radians around it. Speed
|
|
9
|
+
* is sampled uniformly in `[minSpeed, maxSpeed]`.
|
|
10
|
+
*
|
|
11
|
+
* Use for emission cones, explosions, fountain spread — anywhere the
|
|
12
|
+
* direction has a preferred axis with bounded variance.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* // Upward fountain with ±15° spread, 200-300 px/s:
|
|
16
|
+
* const up = new ConeDirection(-Math.PI / 2, Math.PI / 12, 200, 300);
|
|
17
|
+
* up.sample(particle.velocity);
|
|
18
|
+
*/
|
|
19
|
+
class ConeDirection {
|
|
20
|
+
directionAngle;
|
|
21
|
+
halfAngle;
|
|
22
|
+
minSpeed;
|
|
23
|
+
maxSpeed;
|
|
24
|
+
_scratch = new Vector();
|
|
25
|
+
constructor(directionAngle, halfAngle, minSpeed, maxSpeed) {
|
|
26
|
+
this.directionAngle = directionAngle;
|
|
27
|
+
this.halfAngle = halfAngle;
|
|
28
|
+
this.minSpeed = minSpeed;
|
|
29
|
+
this.maxSpeed = maxSpeed;
|
|
30
|
+
}
|
|
31
|
+
sample(out = this._scratch) {
|
|
32
|
+
const angle = this.directionAngle + (Math.random() * 2 - 1) * this.halfAngle;
|
|
33
|
+
const speed = this.minSpeed + Math.random() * (this.maxSpeed - this.minSpeed);
|
|
34
|
+
out.set(Math.cos(angle) * speed, Math.sin(angle) * speed);
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
/** Convenience: omnidirectional emission (full circle, 0..2π). */
|
|
38
|
+
static omni(minSpeed, maxSpeed) {
|
|
39
|
+
return new ConeDirection(0, tau / 2, minSpeed, maxSpeed);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { ConeDirection };
|
|
44
|
+
//# sourceMappingURL=ConeDirection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConeDirection.js","sources":["../../../../../src/particles/distributions/ConeDirection.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;AAEvB;;;;;;;;;;;;;;AAcG;MACU,aAAa,CAAA;AAIX,IAAA,cAAA;AACA,IAAA,SAAA;AACA,IAAA,QAAA;AACA,IAAA,QAAA;AANM,IAAA,QAAQ,GAAG,IAAI,MAAM,EAAE;AAExC,IAAA,WAAA,CACW,cAAsB,EACtB,SAAiB,EACjB,QAAgB,EAChB,QAAgB,EAAA;QAHhB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AAEI,IAAA,MAAM,CAAC,GAAA,GAAc,IAAI,CAAC,QAAQ,EAAA;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE7E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAEzD,QAAA,OAAO,GAAG;IACd;;AAGO,IAAA,OAAO,IAAI,CAAC,QAAgB,EAAE,QAAgB,EAAA;AACjD,QAAA,OAAO,IAAI,aAAa,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC5D;AACH;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Distribution, LifetimeFunction } from './Distribution';
|
|
2
|
+
/**
|
|
3
|
+
* Distribution that always returns the same value. Implements both
|
|
4
|
+
* {@link Distribution} and {@link LifetimeFunction} so it can stand in
|
|
5
|
+
* wherever a randomized or time-parameterised value is expected.
|
|
6
|
+
*
|
|
7
|
+
* For mutable types (Vector, Color, ...) the constant value is copied into
|
|
8
|
+
* `out` if provided, otherwise the constructor's value is returned directly.
|
|
9
|
+
* Mutating that returned reference mutates the distribution's source.
|
|
10
|
+
*/
|
|
11
|
+
export declare class Constant<T> implements Distribution<T>, LifetimeFunction<T> {
|
|
12
|
+
value: T;
|
|
13
|
+
constructor(value: T);
|
|
14
|
+
sample(out?: T): T;
|
|
15
|
+
evaluate(_t: number, out?: T): T;
|
|
16
|
+
private _copyOrReturn;
|
|
17
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Distribution that always returns the same value. Implements both
|
|
3
|
+
* {@link Distribution} and {@link LifetimeFunction} so it can stand in
|
|
4
|
+
* wherever a randomized or time-parameterised value is expected.
|
|
5
|
+
*
|
|
6
|
+
* For mutable types (Vector, Color, ...) the constant value is copied into
|
|
7
|
+
* `out` if provided, otherwise the constructor's value is returned directly.
|
|
8
|
+
* Mutating that returned reference mutates the distribution's source.
|
|
9
|
+
*/
|
|
10
|
+
class Constant {
|
|
11
|
+
value;
|
|
12
|
+
constructor(value) {
|
|
13
|
+
this.value = value;
|
|
14
|
+
}
|
|
15
|
+
sample(out) {
|
|
16
|
+
return this._copyOrReturn(out);
|
|
17
|
+
}
|
|
18
|
+
evaluate(_t, out) {
|
|
19
|
+
return this._copyOrReturn(out);
|
|
20
|
+
}
|
|
21
|
+
_copyOrReturn(out) {
|
|
22
|
+
if (out === undefined || out === null) {
|
|
23
|
+
return this.value;
|
|
24
|
+
}
|
|
25
|
+
const target = out;
|
|
26
|
+
if (typeof target.copy === 'function') {
|
|
27
|
+
target.copy(this.value);
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
return this.value;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { Constant };
|
|
35
|
+
//# sourceMappingURL=Constant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Constant.js","sources":["../../../../../src/particles/distributions/Constant.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEA;;;;;;;;AAQG;MACU,QAAQ,CAAA;AACS,IAAA,KAAA;AAA1B,IAAA,WAAA,CAA0B,KAAQ,EAAA;QAAR,IAAA,CAAA,KAAK,GAAL,KAAK;IAAM;AAE9B,IAAA,MAAM,CAAC,GAAO,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;IAClC;IAEO,QAAQ,CAAC,EAAU,EAAE,GAAO,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;IAClC;AAEQ,IAAA,aAAa,CAAC,GAAO,EAAA;QACzB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE;YACnC,OAAO,IAAI,CAAC,KAAK;QACrB;QAEA,MAAM,MAAM,GAAG,GAAqC;AAEpD,QAAA,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AACnC,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAEvB,YAAA,OAAO,GAAG;QACd;QAEA,OAAO,IAAI,CAAC,KAAK;IACrB;AACH;;;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { LifetimeFunction } from './Distribution';
|
|
2
|
+
/** A keyframe in a {@link Curve}: value `v` at lifetime ratio `t` in `[0, 1]`. */
|
|
3
|
+
export interface CurveKey {
|
|
4
|
+
t: number;
|
|
5
|
+
v: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Piecewise-linear keyframe curve sampled by lifetime ratio `t` in `[0, 1]`.
|
|
9
|
+
*
|
|
10
|
+
* Keyframes are stored sorted by `t` and clamped at the endpoints — sampling
|
|
11
|
+
* outside the keyframe range returns the nearest endpoint value. The
|
|
12
|
+
* implementation tracks the last accessed segment so monotonically advancing
|
|
13
|
+
* `t` (the typical case for per-particle lifetime sampling) costs O(1)
|
|
14
|
+
* amortized per call instead of O(log n).
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* // Scale pulses up then down over lifetime:
|
|
18
|
+
* const sizeCurve = new Curve([
|
|
19
|
+
* { t: 0, v: 0.2 },
|
|
20
|
+
* { t: 0.4, v: 1.5 },
|
|
21
|
+
* { t: 1, v: 0.0 },
|
|
22
|
+
* ]);
|
|
23
|
+
* scale.x = scale.y = sizeCurve.evaluate(particle.elapsedRatio);
|
|
24
|
+
*/
|
|
25
|
+
export declare class Curve implements LifetimeFunction<number> {
|
|
26
|
+
private readonly _keys;
|
|
27
|
+
private _lastSegment;
|
|
28
|
+
constructor(keys: ReadonlyArray<CurveKey>);
|
|
29
|
+
evaluate(t: number): number;
|
|
30
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const compareT = (a, b) => a.t - b.t;
|
|
2
|
+
/**
|
|
3
|
+
* Piecewise-linear keyframe curve sampled by lifetime ratio `t` in `[0, 1]`.
|
|
4
|
+
*
|
|
5
|
+
* Keyframes are stored sorted by `t` and clamped at the endpoints — sampling
|
|
6
|
+
* outside the keyframe range returns the nearest endpoint value. The
|
|
7
|
+
* implementation tracks the last accessed segment so monotonically advancing
|
|
8
|
+
* `t` (the typical case for per-particle lifetime sampling) costs O(1)
|
|
9
|
+
* amortized per call instead of O(log n).
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // Scale pulses up then down over lifetime:
|
|
13
|
+
* const sizeCurve = new Curve([
|
|
14
|
+
* { t: 0, v: 0.2 },
|
|
15
|
+
* { t: 0.4, v: 1.5 },
|
|
16
|
+
* { t: 1, v: 0.0 },
|
|
17
|
+
* ]);
|
|
18
|
+
* scale.x = scale.y = sizeCurve.evaluate(particle.elapsedRatio);
|
|
19
|
+
*/
|
|
20
|
+
class Curve {
|
|
21
|
+
_keys;
|
|
22
|
+
_lastSegment = 0;
|
|
23
|
+
constructor(keys) {
|
|
24
|
+
if (keys.length === 0) {
|
|
25
|
+
throw new Error('Curve requires at least one keyframe.');
|
|
26
|
+
}
|
|
27
|
+
this._keys = [...keys].sort(compareT);
|
|
28
|
+
}
|
|
29
|
+
evaluate(t) {
|
|
30
|
+
const keys = this._keys;
|
|
31
|
+
const last = keys.length - 1;
|
|
32
|
+
if (t <= keys[0].t)
|
|
33
|
+
return keys[0].v;
|
|
34
|
+
if (t >= keys[last].t)
|
|
35
|
+
return keys[last].v;
|
|
36
|
+
// Cache-friendly forward search: most callers sweep t monotonically.
|
|
37
|
+
let segment = this._lastSegment;
|
|
38
|
+
if (t < keys[segment].t) {
|
|
39
|
+
segment = 0;
|
|
40
|
+
}
|
|
41
|
+
while (segment < last && t > keys[segment + 1].t) {
|
|
42
|
+
segment++;
|
|
43
|
+
}
|
|
44
|
+
this._lastSegment = segment;
|
|
45
|
+
const a = keys[segment];
|
|
46
|
+
const b = keys[segment + 1];
|
|
47
|
+
const ratio = (t - a.t) / (b.t - a.t);
|
|
48
|
+
return a.v + (b.v - a.v) * ratio;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export { Curve };
|
|
53
|
+
//# sourceMappingURL=Curve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Curve.js","sources":["../../../../../src/particles/distributions/Curve.ts"],"sourcesContent":[null],"names":[],"mappings":"AAQA,MAAM,QAAQ,GAAG,CAAC,CAAW,EAAE,CAAW,KAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAEhE;;;;;;;;;;;;;;;;;AAiBG;MACU,KAAK,CAAA;AACG,IAAA,KAAK;IACd,YAAY,GAAG,CAAC;AAExB,IAAA,WAAA,CAAmB,IAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;QAC5D;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzC;AAEO,IAAA,QAAQ,CAAC,CAAS,EAAA;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAE5B,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;AAG1C,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY;QAE/B,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACrB,OAAO,GAAG,CAAC;QACf;AAEA,QAAA,OAAO,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AAC9C,YAAA,OAAO,EAAE;QACb;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO;AAE3B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AAC3B,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAErC,QAAA,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK;IACpC;AACH;;;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Value distribution sampled at particle spawn time. Each `sample()` call
|
|
3
|
+
* may return a different value — used to randomize spawn properties
|
|
4
|
+
* (lifetime, position, velocity, scale, tint, ...) without per-particle
|
|
5
|
+
* subclassing.
|
|
6
|
+
*
|
|
7
|
+
* Implementations come in two flavours:
|
|
8
|
+
*
|
|
9
|
+
* - **Stateless / scalar** (e.g. {@link Constant}, {@link Range}) just
|
|
10
|
+
* return a `T` directly.
|
|
11
|
+
* - **Mutable-target** (Vector / Color distributions) accept an optional
|
|
12
|
+
* `out` parameter and write into it in place. Pass your own scratch
|
|
13
|
+
* instance to avoid per-spawn heap allocations; omit it to use the
|
|
14
|
+
* distribution's internal scratch (only valid until the next call).
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const lifetime = new Range(0.5, 1.5); // seconds, uniform
|
|
18
|
+
* const velocity = new VectorRange(-50, 50, -200, -100);
|
|
19
|
+
* const tint = new Gradient([
|
|
20
|
+
* { t: 0, color: Color.white },
|
|
21
|
+
* { t: 0.7, color: Color.yellow },
|
|
22
|
+
* { t: 1, color: Color.transparent },
|
|
23
|
+
* ]);
|
|
24
|
+
*
|
|
25
|
+
* for (let i = 0; i < count; i++) {
|
|
26
|
+
* particle.totalLifetime = lifetime.sample();
|
|
27
|
+
* velocity.sample(particle.velocity);
|
|
28
|
+
* // tint is applied per-frame by ColorOverLifetime, not at spawn.
|
|
29
|
+
* }
|
|
30
|
+
*/
|
|
31
|
+
export interface Distribution<T> {
|
|
32
|
+
sample(out?: T): T;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Lifetime-parameterised function that produces a deterministic `T` for a
|
|
36
|
+
* given lifetime ratio `t` in `[0, 1]`. Used by per-frame update modules
|
|
37
|
+
* that interpolate over particle lifetime — `ColorOverLifetime` (Gradient),
|
|
38
|
+
* `ScaleOverLifetime` (Curve), etc.
|
|
39
|
+
*
|
|
40
|
+
* Mutable-target rule: same as {@link Distribution} — pass your own scratch
|
|
41
|
+
* via `out` for hot loops, omit for one-off calls.
|
|
42
|
+
*/
|
|
43
|
+
export interface LifetimeFunction<T> {
|
|
44
|
+
evaluate(t: number, out?: T): T;
|
|
45
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Color } from '@/core/Color';
|
|
2
|
+
import type { LifetimeFunction } from './Distribution';
|
|
3
|
+
/** A keyframe in a {@link Gradient}: color at lifetime ratio `t` in `[0, 1]`. */
|
|
4
|
+
export interface GradientKey {
|
|
5
|
+
t: number;
|
|
6
|
+
color: Color;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Piecewise-linear color gradient sampled by lifetime ratio `t` in `[0, 1]`.
|
|
10
|
+
* Keyframes are stored sorted by `t`; sampling outside the range returns
|
|
11
|
+
* the nearest endpoint color. Like {@link Curve}, the last accessed segment
|
|
12
|
+
* is cached so monotonically advancing `t` is O(1) amortised.
|
|
13
|
+
*
|
|
14
|
+
* Two output paths:
|
|
15
|
+
* - {@link evaluate} — writes into a `Color` instance (own scratch by default).
|
|
16
|
+
* - {@link evaluateRgba} — returns the packed `0xAABBGGRR` u32 directly,
|
|
17
|
+
* skipping the Color object. Use this in tight per-particle inner loops
|
|
18
|
+
* that write into a `Uint32Array` instance buffer.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* const fire = new Gradient([
|
|
22
|
+
* { t: 0, color: new Color(1, 1, 1, 1) }, // white
|
|
23
|
+
* { t: 0.3, color: new Color(1, 0.7, 0.1, 1) }, // orange
|
|
24
|
+
* { t: 0.7, color: new Color(0.4, 0.1, 0, 0.6) },
|
|
25
|
+
* { t: 1, color: new Color(0, 0, 0, 0) }, // transparent black
|
|
26
|
+
* ]);
|
|
27
|
+
*/
|
|
28
|
+
export declare class Gradient implements LifetimeFunction<Color> {
|
|
29
|
+
private readonly _keys;
|
|
30
|
+
private readonly _scratch;
|
|
31
|
+
private _lastSegment;
|
|
32
|
+
constructor(keys: ReadonlyArray<GradientKey>);
|
|
33
|
+
evaluate(t: number, out?: Color): Color;
|
|
34
|
+
/**
|
|
35
|
+
* Returns the gradient sample at `t` packed into a single 32-bit RGBA
|
|
36
|
+
* integer (`0xAABBGGRR`). Avoids the {@link Color} object on the hot
|
|
37
|
+
* path; suitable for direct write into a `Uint32Array` instance buffer.
|
|
38
|
+
*/
|
|
39
|
+
evaluateRgba(t: number): number;
|
|
40
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Color } from '../../core/Color.js';
|
|
2
|
+
|
|
3
|
+
const compareT = (a, b) => a.t - b.t;
|
|
4
|
+
/**
|
|
5
|
+
* Piecewise-linear color gradient sampled by lifetime ratio `t` in `[0, 1]`.
|
|
6
|
+
* Keyframes are stored sorted by `t`; sampling outside the range returns
|
|
7
|
+
* the nearest endpoint color. Like {@link Curve}, the last accessed segment
|
|
8
|
+
* is cached so monotonically advancing `t` is O(1) amortised.
|
|
9
|
+
*
|
|
10
|
+
* Two output paths:
|
|
11
|
+
* - {@link evaluate} — writes into a `Color` instance (own scratch by default).
|
|
12
|
+
* - {@link evaluateRgba} — returns the packed `0xAABBGGRR` u32 directly,
|
|
13
|
+
* skipping the Color object. Use this in tight per-particle inner loops
|
|
14
|
+
* that write into a `Uint32Array` instance buffer.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const fire = new Gradient([
|
|
18
|
+
* { t: 0, color: new Color(1, 1, 1, 1) }, // white
|
|
19
|
+
* { t: 0.3, color: new Color(1, 0.7, 0.1, 1) }, // orange
|
|
20
|
+
* { t: 0.7, color: new Color(0.4, 0.1, 0, 0.6) },
|
|
21
|
+
* { t: 1, color: new Color(0, 0, 0, 0) }, // transparent black
|
|
22
|
+
* ]);
|
|
23
|
+
*/
|
|
24
|
+
class Gradient {
|
|
25
|
+
_keys;
|
|
26
|
+
_scratch = new Color();
|
|
27
|
+
_lastSegment = 0;
|
|
28
|
+
constructor(keys) {
|
|
29
|
+
if (keys.length === 0) {
|
|
30
|
+
throw new Error('Gradient requires at least one keyframe.');
|
|
31
|
+
}
|
|
32
|
+
this._keys = [...keys].map((k) => ({ t: k.t, color: k.color.clone() })).sort(compareT);
|
|
33
|
+
}
|
|
34
|
+
evaluate(t, out = this._scratch) {
|
|
35
|
+
const keys = this._keys;
|
|
36
|
+
const last = keys.length - 1;
|
|
37
|
+
if (t <= keys[0].t) {
|
|
38
|
+
out.copy(keys[0].color);
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
if (t >= keys[last].t) {
|
|
42
|
+
out.copy(keys[last].color);
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
let segment = this._lastSegment;
|
|
46
|
+
if (t < keys[segment].t) {
|
|
47
|
+
segment = 0;
|
|
48
|
+
}
|
|
49
|
+
while (segment < last && t > keys[segment + 1].t) {
|
|
50
|
+
segment++;
|
|
51
|
+
}
|
|
52
|
+
this._lastSegment = segment;
|
|
53
|
+
const a = keys[segment].color;
|
|
54
|
+
const b = keys[segment + 1].color;
|
|
55
|
+
const ka = keys[segment].t;
|
|
56
|
+
const kb = keys[segment + 1].t;
|
|
57
|
+
const ratio = (t - ka) / (kb - ka);
|
|
58
|
+
out.set(a.r + (b.r - a.r) * ratio, a.g + (b.g - a.g) * ratio, a.b + (b.b - a.b) * ratio, a.a + (b.a - a.a) * ratio);
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Returns the gradient sample at `t` packed into a single 32-bit RGBA
|
|
63
|
+
* integer (`0xAABBGGRR`). Avoids the {@link Color} object on the hot
|
|
64
|
+
* path; suitable for direct write into a `Uint32Array` instance buffer.
|
|
65
|
+
*/
|
|
66
|
+
evaluateRgba(t) {
|
|
67
|
+
return this.evaluate(t, this._scratch).toRgba();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export { Gradient };
|
|
72
|
+
//# sourceMappingURL=Gradient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gradient.js","sources":["../../../../../src/particles/distributions/Gradient.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Vector } from '@/math/Vector';
|
|
2
|
+
import type { Distribution } from './Distribution';
|
|
3
|
+
/**
|
|
4
|
+
* Random point on a line segment between `(x0, y0)` and `(x1, y1)`. Uniform
|
|
5
|
+
* parameter distribution: `t = Math.random()` then `lerp(start, end, t)`.
|
|
6
|
+
*/
|
|
7
|
+
export declare class LineSegment implements Distribution<Vector> {
|
|
8
|
+
x0: number;
|
|
9
|
+
y0: number;
|
|
10
|
+
x1: number;
|
|
11
|
+
y1: number;
|
|
12
|
+
private readonly _scratch;
|
|
13
|
+
constructor(x0: number, y0: number, x1: number, y1: number);
|
|
14
|
+
sample(out?: Vector): Vector;
|
|
15
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Vector } from '../../math/Vector.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Random point on a line segment between `(x0, y0)` and `(x1, y1)`. Uniform
|
|
5
|
+
* parameter distribution: `t = Math.random()` then `lerp(start, end, t)`.
|
|
6
|
+
*/
|
|
7
|
+
class LineSegment {
|
|
8
|
+
x0;
|
|
9
|
+
y0;
|
|
10
|
+
x1;
|
|
11
|
+
y1;
|
|
12
|
+
_scratch = new Vector();
|
|
13
|
+
constructor(x0, y0, x1, y1) {
|
|
14
|
+
this.x0 = x0;
|
|
15
|
+
this.y0 = y0;
|
|
16
|
+
this.x1 = x1;
|
|
17
|
+
this.y1 = y1;
|
|
18
|
+
}
|
|
19
|
+
sample(out = this._scratch) {
|
|
20
|
+
const t = Math.random();
|
|
21
|
+
out.set(this.x0 + (this.x1 - this.x0) * t, this.y0 + (this.y1 - this.y0) * t);
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { LineSegment };
|
|
27
|
+
//# sourceMappingURL=LineSegment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LineSegment.js","sources":["../../../../../src/particles/distributions/LineSegment.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;;AAGG;MACU,WAAW,CAAA;AAIT,IAAA,EAAA;AACA,IAAA,EAAA;AACA,IAAA,EAAA;AACA,IAAA,EAAA;AANM,IAAA,QAAQ,GAAG,IAAI,MAAM,EAAE;AAExC,IAAA,WAAA,CACW,EAAU,EACV,EAAU,EACV,EAAU,EACV,EAAU,EAAA;QAHV,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,EAAE,GAAF,EAAE;IACV;AAEI,IAAA,MAAM,CAAC,GAAA,GAAc,IAAI,CAAC,QAAQ,EAAA;AACrC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AAEvB,QAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAE7E,QAAA,OAAO,GAAG;IACd;AACH;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Distribution } from './Distribution';
|
|
2
|
+
/**
|
|
3
|
+
* Uniform random number in `[min, max]`. Each `sample()` returns a fresh
|
|
4
|
+
* roll; the bounds are inclusive on both ends (modulo the rounding bias
|
|
5
|
+
* inherent to `Math.random()`).
|
|
6
|
+
*/
|
|
7
|
+
export declare class Range implements Distribution<number> {
|
|
8
|
+
min: number;
|
|
9
|
+
max: number;
|
|
10
|
+
constructor(min: number, max: number);
|
|
11
|
+
sample(): number;
|
|
12
|
+
}
|