babylon.quarks 0.17.4 → 0.17.6
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 +92 -0
- package/LICENSE +21 -21
- package/README.md +165 -33
- package/dist/babylon.quarks.cjs +1 -1
- package/dist/babylon.quarks.cjs.map +1 -1
- package/dist/babylon.quarks.esm.js +1 -1
- package/dist/babylon.quarks.esm.js.map +1 -1
- package/dist/babylon.quarks.umd.min.js +2 -0
- package/dist/babylon.quarks.umd.min.js.map +1 -0
- package/dist/types/index.d.ts +2829 -19
- package/package.json +62 -60
- package/src/BatchedParticleRenderer.ts +3 -3
- package/src/BatchedRenderer.ts +228 -227
- package/src/MeshSurfaceEmitter.ts +137 -137
- package/src/ParticleEmitter.ts +86 -86
- package/src/ParticleSystem.ts +1322 -1285
- package/src/QuarksLoader.ts +529 -510
- package/src/QuarksPrefab.ts +307 -307
- package/src/QuarksUtil.ts +66 -66
- package/src/SpriteBatch.ts +403 -404
- package/src/TrailBatch.ts +420 -419
- package/src/VFXBatch.ts +108 -108
- package/src/geometryUtil.ts +15 -15
- package/src/index.ts +59 -52
- package/src/materials/ParticleMaterials.ts +23 -23
- package/src/materials/index.ts +1 -1
- package/src/shaders/chunks/index.ts +1 -1
- package/src/shaders/chunks/register-shader-chunks.ts +32 -32
- package/src/shaders/chunks/soft_fragment.glsl.ts +13 -13
- package/src/shaders/chunks/soft_pars_fragment.glsl.ts +20 -20
- package/src/shaders/chunks/soft_pars_vertex.glsl.ts +6 -6
- package/src/shaders/chunks/soft_vertex.glsl.ts +6 -6
- package/src/shaders/chunks/tile_fragment.glsl.ts +9 -9
- package/src/shaders/chunks/tile_pars_fragment.glsl.ts +9 -9
- package/src/shaders/chunks/tile_pars_vertex.glsl.ts +28 -28
- package/src/shaders/chunks/tile_vertex.glsl.ts +18 -18
- package/src/shaders/index.ts +9 -9
- package/src/shaders/local_particle_physics_vert.glsl.ts +79 -79
- package/src/shaders/local_particle_vert.glsl.ts +50 -50
- package/src/shaders/particle_frag.glsl.ts +61 -61
- package/src/shaders/particle_physics_frag.glsl.ts +67 -67
- package/src/shaders/particle_vert.glsl.ts +85 -85
- package/src/shaders/stretched_bb_particle_vert.glsl.ts +74 -74
- package/src/shaders/trail_frag.glsl.ts +21 -21
- package/src/shaders/trail_vert.glsl.ts +58 -58
- package/dist/types/BatchedParticleRenderer.d.ts +0 -2
- package/dist/types/BatchedRenderer.d.ts +0 -59
- package/dist/types/MeshSurfaceEmitter.d.ts +0 -19
- package/dist/types/ParticleEmitter.d.ts +0 -16
- package/dist/types/ParticleSystem.d.ts +0 -234
- package/dist/types/QuarksLoader.d.ts +0 -28
- package/dist/types/QuarksPrefab.d.ts +0 -48
- package/dist/types/QuarksUtil.d.ts +0 -14
- package/dist/types/SpriteBatch.d.ts +0 -33
- package/dist/types/TrailBatch.d.ts +0 -28
- package/dist/types/VFXBatch.d.ts +0 -51
- package/dist/types/geometryUtil.d.ts +0 -2
- package/dist/types/materials/ParticleMaterials.d.ts +0 -12
- package/dist/types/materials/index.d.ts +0 -1
- package/dist/types/shaders/chunks/index.d.ts +0 -1
- package/dist/types/shaders/chunks/register-shader-chunks.d.ts +0 -3
- package/dist/types/shaders/chunks/soft_fragment.glsl.d.ts +0 -2
- package/dist/types/shaders/chunks/soft_pars_fragment.glsl.d.ts +0 -2
- package/dist/types/shaders/chunks/soft_pars_vertex.glsl.d.ts +0 -2
- package/dist/types/shaders/chunks/soft_vertex.glsl.d.ts +0 -2
- package/dist/types/shaders/chunks/tile_fragment.glsl.d.ts +0 -2
- package/dist/types/shaders/chunks/tile_pars_fragment.glsl.d.ts +0 -2
- package/dist/types/shaders/chunks/tile_pars_vertex.glsl.d.ts +0 -2
- package/dist/types/shaders/chunks/tile_vertex.glsl.d.ts +0 -2
- package/dist/types/shaders/index.d.ts +0 -9
- package/dist/types/shaders/local_particle_physics_vert.glsl.d.ts +0 -2
- package/dist/types/shaders/local_particle_vert.glsl.d.ts +0 -2
- package/dist/types/shaders/particle_frag.glsl.d.ts +0 -2
- package/dist/types/shaders/particle_physics_frag.glsl.d.ts +0 -2
- package/dist/types/shaders/particle_vert.glsl.d.ts +0 -2
- package/dist/types/shaders/stretched_bb_particle_vert.glsl.d.ts +0 -2
- package/dist/types/shaders/trail_frag.glsl.d.ts +0 -2
- package/dist/types/shaders/trail_vert.glsl.d.ts +0 -2
package/dist/types/index.d.ts
CHANGED
|
@@ -1,19 +1,2829 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
import { TransformNode } from '@babylonjs/core/Meshes/transformNode';
|
|
2
|
+
import { Scene } from '@babylonjs/core/scene';
|
|
3
|
+
import { Texture } from '@babylonjs/core/Materials/Textures/texture';
|
|
4
|
+
import { BaseTexture } from '@babylonjs/core/Materials/Textures/baseTexture';
|
|
5
|
+
import { Mesh } from '@babylonjs/core/Meshes/mesh';
|
|
6
|
+
import { Node } from '@babylonjs/core/node';
|
|
7
|
+
import { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial';
|
|
8
|
+
import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';
|
|
9
|
+
|
|
10
|
+
declare const WebGLCoordinateSystem = 2000;
|
|
11
|
+
declare const WebGPUCoordinateSystem = 2001;
|
|
12
|
+
declare class Matrix4 {
|
|
13
|
+
elements: number[];
|
|
14
|
+
readonly isMatrix4 = true;
|
|
15
|
+
constructor(n11?: number, n12?: number, n13?: number, n14?: number, n21?: number, n22?: number, n23?: number, n24?: number, n31?: number, n32?: number, n33?: number, n34?: number, n41?: number, n42?: number, n43?: number, n44?: number);
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated Use {@link Matrix4#copyPosition .copyPosition()} instead.
|
|
18
|
+
*/
|
|
19
|
+
extractPosition(m: Matrix4): Matrix4;
|
|
20
|
+
/**
|
|
21
|
+
* Sets this matrix to a x b and stores the result into the flat array r.
|
|
22
|
+
* r can be either a regular Array or a TypedArray.
|
|
23
|
+
*
|
|
24
|
+
* @deprecated This method has been removed completely.
|
|
25
|
+
*/
|
|
26
|
+
multiplyToArray(a: Matrix4, b: Matrix4, r: number[]): Matrix4;
|
|
27
|
+
/**
|
|
28
|
+
* @deprecated Use {@link Matrix4#makeRotationFromQuaternion .makeRotationFromQuaternion()} instead.
|
|
29
|
+
*/
|
|
30
|
+
setRotationFromQuaternion(q: Quaternion): Matrix4;
|
|
31
|
+
set(n11: number, n12: number, n13: number, n14: number, n21: number, n22: number, n23: number, n24: number, n31: number, n32: number, n33: number, n34: number, n41: number, n42: number, n43: number, n44: number): this;
|
|
32
|
+
identity(): this;
|
|
33
|
+
clone(): Matrix4;
|
|
34
|
+
copy(m: Matrix4): this;
|
|
35
|
+
copyPosition(m: Matrix4): this;
|
|
36
|
+
setFromMatrix3(m: Matrix3): this;
|
|
37
|
+
extractBasis(xAxis: Vector3, yAxis: Vector3, zAxis: Vector3): this;
|
|
38
|
+
makeBasis(xAxis: Vector3, yAxis: Vector3, zAxis: Vector3): this;
|
|
39
|
+
extractRotation(m: Matrix4): this;
|
|
40
|
+
makeRotationFromEuler(euler: Euler): this;
|
|
41
|
+
makeRotationFromQuaternion(q: Quaternion): this;
|
|
42
|
+
lookAt(eye: Vector3, target: Vector3, up: Vector3): this;
|
|
43
|
+
multiply(m: Matrix4): this;
|
|
44
|
+
premultiply(m: Matrix4): this;
|
|
45
|
+
multiplyMatrices(a: Matrix4, b: Matrix4): this;
|
|
46
|
+
multiplyScalar(s: number): this;
|
|
47
|
+
determinant(): number;
|
|
48
|
+
transpose(): this;
|
|
49
|
+
setPosition(x: number | Vector3, y?: number, z?: number): this;
|
|
50
|
+
invert(): this;
|
|
51
|
+
scale(v: Vector3): this;
|
|
52
|
+
getMaxScaleOnAxis(): number;
|
|
53
|
+
makeTranslation(x: number | Vector3, y?: number, z?: number): this;
|
|
54
|
+
makeRotationX(theta: number): this;
|
|
55
|
+
makeRotationY(theta: number): this;
|
|
56
|
+
makeRotationZ(theta: number): this;
|
|
57
|
+
makeRotationAxis(axis: Vector3, angle: number): this;
|
|
58
|
+
makeScale(x: number, y: number, z: number): this;
|
|
59
|
+
makeShear(xy: number, xz: number, yx: number, yz: number, zx: number, zy: number): this;
|
|
60
|
+
compose(position: Vector3, quaternion: Quaternion, scale: Vector3): this;
|
|
61
|
+
decompose(position: Vector3, quaternion: Quaternion, scale: Vector3): this;
|
|
62
|
+
makePerspective(left: number, right: number, top: number, bottom: number, near: number, far: number, coordinateSystem?: number): this;
|
|
63
|
+
makeOrthographic(left: number, right: number, top: number, bottom: number, near: number, far: number, coordinateSystem?: number): this;
|
|
64
|
+
equals(matrix: Matrix4): boolean;
|
|
65
|
+
fromArray(array: number[], offset?: number): this;
|
|
66
|
+
toArray(array?: number[], offset?: number): number[];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
declare class Vector2 {
|
|
70
|
+
x: number;
|
|
71
|
+
y: number;
|
|
72
|
+
static isVector2: boolean;
|
|
73
|
+
constructor(x?: number, y?: number);
|
|
74
|
+
get width(): number;
|
|
75
|
+
set width(value: number);
|
|
76
|
+
get height(): number;
|
|
77
|
+
set height(value: number);
|
|
78
|
+
set(x: number, y: number): this;
|
|
79
|
+
setScalar(scalar: number): this;
|
|
80
|
+
setX(x: number): this;
|
|
81
|
+
setY(y: number): this;
|
|
82
|
+
setComponent(index: number, value: number): this;
|
|
83
|
+
getComponent(index: number): number;
|
|
84
|
+
clone(): Vector2;
|
|
85
|
+
copy(v: Vector2): this;
|
|
86
|
+
add(v: Vector2): this;
|
|
87
|
+
addScalar(s: number): this;
|
|
88
|
+
addVectors(a: Vector2, b: Vector2): this;
|
|
89
|
+
addScaledVector(v: Vector2, s: number): this;
|
|
90
|
+
sub(v: Vector2): this;
|
|
91
|
+
subScalar(s: number): this;
|
|
92
|
+
subVectors(a: Vector2, b: Vector2): this;
|
|
93
|
+
multiply(v: Vector2): this;
|
|
94
|
+
multiplyScalar(scalar: number): this;
|
|
95
|
+
divide(v: Vector2): this;
|
|
96
|
+
divideScalar(scalar: number): this;
|
|
97
|
+
applyMatrix3(m: Matrix3): this;
|
|
98
|
+
min(v: Vector2): this;
|
|
99
|
+
max(v: Vector2): this;
|
|
100
|
+
clamp(min: Vector2, max: Vector2): this;
|
|
101
|
+
clampScalar(minVal: number, maxVal: number): this;
|
|
102
|
+
clampLength(min: number, max: number): this;
|
|
103
|
+
floor(): this;
|
|
104
|
+
ceil(): this;
|
|
105
|
+
round(): this;
|
|
106
|
+
roundToZero(): this;
|
|
107
|
+
negate(): this;
|
|
108
|
+
dot(v: Vector2): number;
|
|
109
|
+
cross(v: Vector2): number;
|
|
110
|
+
lengthSq(): number;
|
|
111
|
+
length(): number;
|
|
112
|
+
manhattanLength(): number;
|
|
113
|
+
normalize(): this;
|
|
114
|
+
angle(): number;
|
|
115
|
+
angleTo(v: Vector2): number;
|
|
116
|
+
distanceTo(v: Vector2): number;
|
|
117
|
+
distanceToSquared(v: Vector2): number;
|
|
118
|
+
manhattanDistanceTo(v: Vector2): number;
|
|
119
|
+
setLength(length: number): this;
|
|
120
|
+
lerp(v: Vector2, alpha: number): this;
|
|
121
|
+
lerpVectors(v1: Vector2, v2: Vector2, alpha: number): this;
|
|
122
|
+
equals(v: Vector2): boolean;
|
|
123
|
+
fromArray(array: number[], offset?: number): this;
|
|
124
|
+
toArray(array?: number[], offset?: number): number[];
|
|
125
|
+
rotateAround(center: Vector2, angle: number): this;
|
|
126
|
+
random(): this;
|
|
127
|
+
[Symbol.iterator](): Generator<number, void, unknown>;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
declare class Matrix3 {
|
|
131
|
+
elements: number[];
|
|
132
|
+
constructor(n11?: number, n12?: number, n13?: number, n21?: number, n22?: number, n23?: number, n31?: number, n32?: number, n33?: number);
|
|
133
|
+
set(n11: number, n12: number, n13: number, n21: number, n22: number, n23: number, n31: number, n32: number, n33: number): this;
|
|
134
|
+
identity(): this;
|
|
135
|
+
copy(m: Matrix3): this;
|
|
136
|
+
extractBasis(xAxis: Vector3, yAxis: Vector3, zAxis: Vector3): this;
|
|
137
|
+
setFromMatrix4(m: Matrix4): this;
|
|
138
|
+
multiply(m: Matrix3): this;
|
|
139
|
+
premultiply(m: Matrix3): this;
|
|
140
|
+
multiplyMatrices(a: Matrix3, b: Matrix3): this;
|
|
141
|
+
multiplyScalar(s: number): this;
|
|
142
|
+
determinant(): number;
|
|
143
|
+
invert(): this;
|
|
144
|
+
transpose(): this;
|
|
145
|
+
getNormalMatrix(matrix4: Matrix4): this;
|
|
146
|
+
transposeIntoArray(r: number[]): this;
|
|
147
|
+
setUvTransform(tx: number, ty: number, sx: number, sy: number, rotation: number, cx: number, cy: number): this;
|
|
148
|
+
scale(sx: number, sy: number): this;
|
|
149
|
+
rotate(theta: number): this;
|
|
150
|
+
translate(tx: number, ty: number): this;
|
|
151
|
+
makeTranslation(x: number | Vector2, y: number): this;
|
|
152
|
+
makeRotation(theta: number): this;
|
|
153
|
+
makeScale(x: number, y: number): this;
|
|
154
|
+
equals(matrix: Matrix3): boolean;
|
|
155
|
+
fromArray(array: number[], offset?: number): this;
|
|
156
|
+
toArray(array?: number[], offset?: number): number[];
|
|
157
|
+
clone(): Matrix3;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
declare class Vector3 {
|
|
161
|
+
x: number;
|
|
162
|
+
y: number;
|
|
163
|
+
z: number;
|
|
164
|
+
readonly isVector3 = true;
|
|
165
|
+
constructor(x?: number, y?: number, z?: number);
|
|
166
|
+
set(x: number, y: number, z: number): this;
|
|
167
|
+
setScalar(scalar: number): this;
|
|
168
|
+
setX(x: number): this;
|
|
169
|
+
setY(y: number): this;
|
|
170
|
+
setZ(z: number): this;
|
|
171
|
+
setComponent(index: number, value: number): this;
|
|
172
|
+
getComponent(index: number): number;
|
|
173
|
+
clone(): Vector3;
|
|
174
|
+
copy(v: Vector3): this;
|
|
175
|
+
add(v: Vector3): this;
|
|
176
|
+
addScalar(s: number): this;
|
|
177
|
+
addVectors(a: Vector3, b: Vector3): this;
|
|
178
|
+
addScaledVector(v: Vector3, s: number): this;
|
|
179
|
+
sub(v: Vector3): this;
|
|
180
|
+
subScalar(s: number): this;
|
|
181
|
+
subVectors(a: Vector3, b: Vector3): this;
|
|
182
|
+
multiply(v: Vector3): this;
|
|
183
|
+
multiplyScalar(scalar: number): this;
|
|
184
|
+
multiplyVectors(a: Vector3, b: Vector3): this;
|
|
185
|
+
applyEuler(euler: Euler): this;
|
|
186
|
+
applyAxisAngle(axis: Vector3, angle: number): this;
|
|
187
|
+
applyMatrix3(m: Matrix3): this;
|
|
188
|
+
applyNormalMatrix(m: Matrix3): this;
|
|
189
|
+
applyMatrix4(m: Matrix4): this;
|
|
190
|
+
applyQuaternion(q: Quaternion): this;
|
|
191
|
+
transformDirection(m: Matrix4): this;
|
|
192
|
+
divide(v: Vector3): this;
|
|
193
|
+
divideScalar(scalar: number): this;
|
|
194
|
+
min(v: Vector3): this;
|
|
195
|
+
max(v: Vector3): this;
|
|
196
|
+
clamp(min: Vector3, max: Vector3): this;
|
|
197
|
+
clampScalar(minVal: number, maxVal: number): this;
|
|
198
|
+
clampLength(min: number, max: number): this;
|
|
199
|
+
floor(): this;
|
|
200
|
+
ceil(): this;
|
|
201
|
+
round(): this;
|
|
202
|
+
roundToZero(): this;
|
|
203
|
+
negate(): this;
|
|
204
|
+
dot(v: Vector3): number;
|
|
205
|
+
lengthSq(): number;
|
|
206
|
+
length(): number;
|
|
207
|
+
manhattanLength(): number;
|
|
208
|
+
normalize(): this;
|
|
209
|
+
setLength(length: number): this;
|
|
210
|
+
lerp(v: Vector3, alpha: number): this;
|
|
211
|
+
lerpVectors(v1: Vector3, v2: Vector3, alpha: number): this;
|
|
212
|
+
cross(v: Vector3): this;
|
|
213
|
+
crossVectors(a: Vector3, b: Vector3): this;
|
|
214
|
+
projectOnVector(v: Vector3): this;
|
|
215
|
+
projectOnPlane(planeNormal: Vector3): this;
|
|
216
|
+
reflect(normal: Vector3): this;
|
|
217
|
+
angleTo(v: Vector3): number;
|
|
218
|
+
distanceTo(v: Vector3): number;
|
|
219
|
+
distanceToSquared(v: Vector3): number;
|
|
220
|
+
manhattanDistanceTo(v: Vector3): number;
|
|
221
|
+
setFromSphericalCoords(radius: number, phi: number, theta: number): this;
|
|
222
|
+
setFromCylindricalCoords(radius: number, theta: number, y: number): this;
|
|
223
|
+
setFromMatrixPosition(m: Matrix4): this;
|
|
224
|
+
setFromMatrixScale(m: Matrix4): this;
|
|
225
|
+
setFromMatrixColumn(m: Matrix4, index: number): this;
|
|
226
|
+
setFromMatrix3Column(m: Matrix3, index: number): this;
|
|
227
|
+
setFromEuler(e: Euler): this;
|
|
228
|
+
equals(v: Vector3): boolean;
|
|
229
|
+
fromArray(array: number[], offset?: number): this;
|
|
230
|
+
toArray(array?: number[], offset?: number): number[];
|
|
231
|
+
random(): this;
|
|
232
|
+
randomDirection(): this;
|
|
233
|
+
abs(): this;
|
|
234
|
+
[Symbol.iterator](): Generator<number, void, unknown>;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
declare class Quaternion {
|
|
238
|
+
_x: number;
|
|
239
|
+
_y: number;
|
|
240
|
+
_z: number;
|
|
241
|
+
_w: number;
|
|
242
|
+
isQuaternion: boolean;
|
|
243
|
+
constructor(x?: number, y?: number, z?: number, w?: number);
|
|
244
|
+
static slerpFlat(dst: number[], dstOffset: number, src0: number[], srcOffset0: number, src1: number[], srcOffset1: number, t: number): void;
|
|
245
|
+
static multiplyQuaternionsFlat(dst: number[], dstOffset: number, src0: number[], srcOffset0: number, src1: number[], srcOffset1: number): number[];
|
|
246
|
+
get x(): number;
|
|
247
|
+
set x(value: number);
|
|
248
|
+
get y(): number;
|
|
249
|
+
set y(value: number);
|
|
250
|
+
get z(): number;
|
|
251
|
+
set z(value: number);
|
|
252
|
+
get w(): number;
|
|
253
|
+
set w(value: number);
|
|
254
|
+
set(x: number, y: number, z: number, w: number): this;
|
|
255
|
+
clone(): Quaternion;
|
|
256
|
+
copy(quaternion: Quaternion): this;
|
|
257
|
+
setFromEuler(euler: Euler, update?: boolean): this;
|
|
258
|
+
setFromAxisAngle(axis: Vector3, angle: number): this;
|
|
259
|
+
setFromRotationMatrix(m: Matrix4): this;
|
|
260
|
+
setFromUnitVectors(vFrom: Vector3, vTo: Vector3): this;
|
|
261
|
+
angleTo(q: Quaternion): number;
|
|
262
|
+
rotateTowards(q: Quaternion, step: number): this;
|
|
263
|
+
identity(): this;
|
|
264
|
+
invert(): this;
|
|
265
|
+
conjugate(): this;
|
|
266
|
+
dot(v: Quaternion): number;
|
|
267
|
+
lengthSq(): number;
|
|
268
|
+
length(): number;
|
|
269
|
+
normalize(): this;
|
|
270
|
+
multiply(q: Quaternion): this;
|
|
271
|
+
premultiply(q: Quaternion): this;
|
|
272
|
+
multiplyQuaternions(a: Quaternion, b: Quaternion): this;
|
|
273
|
+
slerp(qb: Quaternion, t: number): this;
|
|
274
|
+
slerpQuaternions(qa: Quaternion, qb: Quaternion, t: number): this;
|
|
275
|
+
random(): this;
|
|
276
|
+
equals(quaternion: Quaternion): boolean;
|
|
277
|
+
fromArray(array: number[], offset?: number): this;
|
|
278
|
+
toArray(array?: number[], offset?: number): number[];
|
|
279
|
+
toJSON(): number[];
|
|
280
|
+
_onChange(callback: () => void): this;
|
|
281
|
+
_onChangeCallback(): void;
|
|
282
|
+
[Symbol.iterator](): Generator<number, void, unknown>;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
type EulerOrder = 'XYZ' | 'YXZ' | 'ZXY' | 'ZYX' | 'YZX' | 'XZY' | 'XYX' | 'YZY' | 'ZXZ' | 'XZX' | 'YXY' | 'ZYZ';
|
|
286
|
+
declare class Euler {
|
|
287
|
+
_x: number;
|
|
288
|
+
_y: number;
|
|
289
|
+
_z: number;
|
|
290
|
+
_order: EulerOrder;
|
|
291
|
+
isEuler: boolean;
|
|
292
|
+
static DEFAULT_ORDER: EulerOrder;
|
|
293
|
+
constructor(x?: number, y?: number, z?: number, order?: EulerOrder);
|
|
294
|
+
get x(): number;
|
|
295
|
+
set x(value: number);
|
|
296
|
+
get y(): number;
|
|
297
|
+
set y(value: number);
|
|
298
|
+
get z(): number;
|
|
299
|
+
set z(value: number);
|
|
300
|
+
get order(): EulerOrder;
|
|
301
|
+
set order(value: EulerOrder);
|
|
302
|
+
set(x: number, y: number, z: number, order?: EulerOrder): this;
|
|
303
|
+
clone(): Euler;
|
|
304
|
+
copy(euler: Euler): this;
|
|
305
|
+
setFromRotationMatrix(m: Matrix4, order?: EulerOrder, update?: boolean): this;
|
|
306
|
+
setFromQuaternion(q: Quaternion, order: EulerOrder, update?: boolean): this;
|
|
307
|
+
setFromVector3(v: Vector3, order?: EulerOrder): this;
|
|
308
|
+
reorder(newOrder: EulerOrder): this;
|
|
309
|
+
equals(euler: Euler): boolean;
|
|
310
|
+
fromArray(array: any[]): this;
|
|
311
|
+
toArray(array?: any[], offset?: number): any[];
|
|
312
|
+
_onChange(callback: (euler?: Euler) => void): this;
|
|
313
|
+
_onChangeCallback(euler?: Euler): void;
|
|
314
|
+
[Symbol.iterator](): Generator<number | EulerOrder, void, unknown>;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
declare class Vector4 {
|
|
318
|
+
x: number;
|
|
319
|
+
y: number;
|
|
320
|
+
z: number;
|
|
321
|
+
w: number;
|
|
322
|
+
constructor(x?: number, y?: number, z?: number, w?: number);
|
|
323
|
+
get width(): number;
|
|
324
|
+
set width(value: number);
|
|
325
|
+
get height(): number;
|
|
326
|
+
set height(value: number);
|
|
327
|
+
set(x: number, y: number, z: number, w: number): Vector4;
|
|
328
|
+
setScalar(scalar: number): Vector4;
|
|
329
|
+
setX(x: number): Vector4;
|
|
330
|
+
setY(y: number): Vector4;
|
|
331
|
+
setZ(z: number): Vector4;
|
|
332
|
+
setW(w: number): Vector4;
|
|
333
|
+
setComponent(index: number, value: number): Vector4;
|
|
334
|
+
getComponent(index: number): number;
|
|
335
|
+
clone(): Vector4;
|
|
336
|
+
copy(v: Vector4): Vector4;
|
|
337
|
+
add(v: Vector4): Vector4;
|
|
338
|
+
addScalar(scalar: number): Vector4;
|
|
339
|
+
addVectors(a: Vector4, b: Vector4): Vector4;
|
|
340
|
+
addScaledVector(v: Vector4, s: number): Vector4;
|
|
341
|
+
sub(v: Vector4): Vector4;
|
|
342
|
+
subScalar(scalar: number): Vector4;
|
|
343
|
+
subVectors(a: Vector4, b: Vector4): Vector4;
|
|
344
|
+
multiply(v: Vector4): Vector4;
|
|
345
|
+
multiplyScalar(scalar: number): Vector4;
|
|
346
|
+
applyMatrix4(m: Matrix4): this;
|
|
347
|
+
divideScalar(scalar: number): Vector4;
|
|
348
|
+
setAxisAngleFromQuaternion(q: Quaternion): this;
|
|
349
|
+
setAxisAngleFromRotationMatrix(m: Matrix3): this;
|
|
350
|
+
min(v: Vector4): this;
|
|
351
|
+
max(v: Vector4): this;
|
|
352
|
+
clamp(min: Vector4, max: Vector4): this;
|
|
353
|
+
clampScalar(minVal: number, maxVal: number): this;
|
|
354
|
+
clampLength(min: number, max: number): Vector4;
|
|
355
|
+
floor(): this;
|
|
356
|
+
ceil(): this;
|
|
357
|
+
round(): this;
|
|
358
|
+
roundToZero(): this;
|
|
359
|
+
negate(): this;
|
|
360
|
+
dot(v: Vector4): number;
|
|
361
|
+
lengthSq(): number;
|
|
362
|
+
length(): number;
|
|
363
|
+
manhattanLength(): number;
|
|
364
|
+
normalize(): Vector4;
|
|
365
|
+
setLength(length: number): Vector4;
|
|
366
|
+
lerp(v: Vector4, alpha: number): this;
|
|
367
|
+
lerpVectors(v1: Vector4, v2: Vector4, alpha: number): this;
|
|
368
|
+
equals(v: Vector4): boolean;
|
|
369
|
+
fromArray(array: number[], offset?: number): this;
|
|
370
|
+
toArray(array?: number[], offset?: number): number[];
|
|
371
|
+
random(): this;
|
|
372
|
+
[Symbol.iterator](): Generator<number, void, unknown>;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
declare const DEG2RAD: number;
|
|
376
|
+
declare const RAD2DEG: number;
|
|
377
|
+
declare function generateUUID(): string;
|
|
378
|
+
declare function clamp(value: number, min: number, max: number): number;
|
|
379
|
+
declare function euclideanModulo(n: number, m: number): number;
|
|
380
|
+
declare function mapLinear(x: number, a1: number, a2: number, b1: number, b2: number): number;
|
|
381
|
+
declare function inverseLerp(x: number, y: number, value: number): number;
|
|
382
|
+
declare function lerp(x: number, y: number, t: number): number;
|
|
383
|
+
declare function damp(x: number, y: number, lambda: number, dt: number): number;
|
|
384
|
+
declare function pingpong(x: number, length?: number): number;
|
|
385
|
+
declare function smoothstep(x: number, min: number, max: number): number;
|
|
386
|
+
declare function smootherstep(x: number, min: number, max: number): number;
|
|
387
|
+
declare function randInt(low: number, high: number): number;
|
|
388
|
+
declare function randFloat(low: number, high: number): number;
|
|
389
|
+
declare function randFloatSpread(range: number): number;
|
|
390
|
+
declare function seededRandom(s: number): number;
|
|
391
|
+
declare function degToRad(degrees: number): number;
|
|
392
|
+
declare function radToDeg(radians: number): number;
|
|
393
|
+
declare function isPowerOfTwo(value: number): boolean;
|
|
394
|
+
declare function ceilPowerOfTwo(value: number): number;
|
|
395
|
+
declare function floorPowerOfTwo(value: number): number;
|
|
396
|
+
declare function setQuaternionFromProperEuler(q: Quaternion, a: number, b: number, c: number, order: EulerOrder): void;
|
|
397
|
+
declare function denormalize(value: number, array: number[]): number;
|
|
398
|
+
declare function normalize(value: number, array: number[]): number;
|
|
399
|
+
declare const MathUtils: {
|
|
400
|
+
DEG2RAD: number;
|
|
401
|
+
RAD2DEG: number;
|
|
402
|
+
generateUUID: typeof generateUUID;
|
|
403
|
+
clamp: typeof clamp;
|
|
404
|
+
euclideanModulo: typeof euclideanModulo;
|
|
405
|
+
mapLinear: typeof mapLinear;
|
|
406
|
+
inverseLerp: typeof inverseLerp;
|
|
407
|
+
lerp: typeof lerp;
|
|
408
|
+
damp: typeof damp;
|
|
409
|
+
pingpong: typeof pingpong;
|
|
410
|
+
smoothstep: typeof smoothstep;
|
|
411
|
+
smootherstep: typeof smootherstep;
|
|
412
|
+
randInt: typeof randInt;
|
|
413
|
+
randFloat: typeof randFloat;
|
|
414
|
+
randFloatSpread: typeof randFloatSpread;
|
|
415
|
+
seededRandom: typeof seededRandom;
|
|
416
|
+
degToRad: typeof degToRad;
|
|
417
|
+
radToDeg: typeof radToDeg;
|
|
418
|
+
isPowerOfTwo: typeof isPowerOfTwo;
|
|
419
|
+
ceilPowerOfTwo: typeof ceilPowerOfTwo;
|
|
420
|
+
floorPowerOfTwo: typeof floorPowerOfTwo;
|
|
421
|
+
setQuaternionFromProperEuler: typeof setQuaternionFromProperEuler;
|
|
422
|
+
normalize: typeof normalize;
|
|
423
|
+
denormalize: typeof denormalize;
|
|
424
|
+
};
|
|
425
|
+
|
|
426
|
+
declare class Bezier {
|
|
427
|
+
p: number[];
|
|
428
|
+
constructor(p1: number, p2: number, p3: number, p4: number);
|
|
429
|
+
genValue(t: number): number;
|
|
430
|
+
derivativeCoefficients(points: number[]): number[][];
|
|
431
|
+
getSlope(t: number): number;
|
|
432
|
+
controlCurve(d0: number, d1: number): void;
|
|
433
|
+
hull(t: number): number[];
|
|
434
|
+
split(t: number): {
|
|
435
|
+
left: Bezier;
|
|
436
|
+
right: Bezier;
|
|
437
|
+
span: number[];
|
|
438
|
+
};
|
|
439
|
+
clone(): Bezier;
|
|
440
|
+
toJSON(): {
|
|
441
|
+
p0: number;
|
|
442
|
+
p1: number;
|
|
443
|
+
p2: number;
|
|
444
|
+
p3: number;
|
|
445
|
+
};
|
|
446
|
+
static fromJSON(json: {
|
|
447
|
+
p0: number;
|
|
448
|
+
p1: number;
|
|
449
|
+
p2: number;
|
|
450
|
+
p3: number;
|
|
451
|
+
}): Bezier;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
type FunctionJSON = {
|
|
455
|
+
[a: string]: any;
|
|
456
|
+
};
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Per-particle scratch storage that lets stochastic generators "remember" a
|
|
460
|
+
* random sample they rolled at spawn time, so subsequent frames produce the
|
|
461
|
+
* same value for the same particle.
|
|
462
|
+
*
|
|
463
|
+
* Each `Particle` owns one `GeneratorMemory` (see `Particle.memory`) that
|
|
464
|
+
* starts empty and is cleared on `Particle.reset()` when the particle is
|
|
465
|
+
* recycled. A particle's memory is independent from every other particle's.
|
|
466
|
+
*
|
|
467
|
+
* ## Lifecycle (per spawn)
|
|
468
|
+
*
|
|
469
|
+
* For every generator the particle system uses (startColor, startSpeed,
|
|
470
|
+
* startLife, startSize, startRotation, etc.), the spawn path calls — in a
|
|
471
|
+
* fixed, deterministic order:
|
|
472
|
+
*
|
|
473
|
+
* 1. `generator.startGen(particle.memory)` — gives the generator a chance to
|
|
474
|
+
* allocate a slot. A generator that needs a per-particle random sample
|
|
475
|
+
* captures the current length as its slot index, pushes the rolled value,
|
|
476
|
+
* and stores the index on itself (typically `this.indexCount`).
|
|
477
|
+
* 2. `generator.genValue(particle.memory, …)` — reads back `memory[indexCount]`
|
|
478
|
+
* to produce the per-frame value. Called once per frame for the particle's
|
|
479
|
+
* lifetime.
|
|
480
|
+
*
|
|
481
|
+
* Concrete patterns implemented across the codebase:
|
|
482
|
+
*
|
|
483
|
+
* - **Stateless / deterministic** (`ConstantValue`, `PiecewiseBezier`,
|
|
484
|
+
* `Gradient`, `RandomColor`) — `startGen` is a no-op; `genValue` derives
|
|
485
|
+
* output from inputs (`t`, params) alone.
|
|
486
|
+
* - **Sample-once stochastic** (`IntervalValue`, `ColorRange`,
|
|
487
|
+
* `RandomColorBetweenGradient`, `RandomQuatGenerator`) — `startGen` pushes
|
|
488
|
+
* one random sample into memory; `genValue` reads it. This is what keeps a
|
|
489
|
+
* given particle's "random" startSize/color/rotation fixed for its life.
|
|
490
|
+
* - **Composite** (`AxisAngleGenerator`, `Vector3Function`, `EulerGenerator`)
|
|
491
|
+
* — `startGen` forwards to children so each child claims its own slot.
|
|
492
|
+
*
|
|
493
|
+
* ## Invariants
|
|
494
|
+
*
|
|
495
|
+
* - Every spawn must call `startGen` for the same set of generators in the
|
|
496
|
+
* same order. The slot index a generator captures during one particle's
|
|
497
|
+
* spawn must match what it reads for *that* particle on later frames.
|
|
498
|
+
* - `indexCount` lives on the generator (shared across particles), not on
|
|
499
|
+
* memory. It is overwritten on every spawn; that is safe because each
|
|
500
|
+
* `genValue` call during a spawn happens before the next spawn's `startGen`.
|
|
501
|
+
* - The values stored in memory are not aliased — each particle's memory is
|
|
502
|
+
* its own array, so two particles can hold different samples at the same
|
|
503
|
+
* slot without interference.
|
|
504
|
+
*/
|
|
505
|
+
type GeneratorMemory = any[];
|
|
506
|
+
|
|
507
|
+
declare class RandomColor implements ColorGenerator {
|
|
508
|
+
a: Vector4;
|
|
509
|
+
b: Vector4;
|
|
510
|
+
constructor(a: Vector4, b: Vector4);
|
|
511
|
+
startGen(memory: GeneratorMemory): void;
|
|
512
|
+
genColor(memory: GeneratorMemory, color: Vector4): Vector4;
|
|
513
|
+
type: 'value';
|
|
514
|
+
toJSON(): FunctionJSON;
|
|
515
|
+
static fromJSON(json: FunctionJSON): RandomColor;
|
|
516
|
+
clone(): ColorGenerator;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
declare class ColorRange implements ColorGenerator {
|
|
520
|
+
a: Vector4;
|
|
521
|
+
b: Vector4;
|
|
522
|
+
constructor(a: Vector4, b: Vector4);
|
|
523
|
+
indexCount: number;
|
|
524
|
+
startGen(memory: GeneratorMemory): void;
|
|
525
|
+
genColor(memory: GeneratorMemory, color: Vector4): Vector4;
|
|
526
|
+
type: 'value';
|
|
527
|
+
toJSON(): FunctionJSON;
|
|
528
|
+
static fromJSON(json: FunctionJSON): ColorRange;
|
|
529
|
+
clone(): ColorGenerator;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
interface ObjectValueType<T> {
|
|
533
|
+
copy(value: T): ObjectValueType<T>;
|
|
534
|
+
lerp(value: T, pos: number): ObjectValueType<T>;
|
|
535
|
+
clone(): ObjectValueType<T>;
|
|
536
|
+
}
|
|
537
|
+
declare class ContinuousLinearFunction<T extends ObjectValueType<T> | number> {
|
|
538
|
+
keys: Array<[T, number]>;
|
|
539
|
+
type: 'function';
|
|
540
|
+
subType: 'Number' | 'Vector3' | 'Vector4' | 'Color';
|
|
541
|
+
constructor(keys: Array<[T, number]>, subType: 'Number' | 'Vector3' | 'Vector4' | 'Color');
|
|
542
|
+
findKey(t: number): number;
|
|
543
|
+
getStartX(index: number): number;
|
|
544
|
+
getEndX(index: number): number;
|
|
545
|
+
genValue(value: T, t: number): T;
|
|
546
|
+
toJSON(): FunctionJSON;
|
|
547
|
+
static fromJSON(json: FunctionJSON): ContinuousLinearFunction<any>;
|
|
548
|
+
clone(): ContinuousLinearFunction<any>;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
declare class Gradient implements FunctionColorGenerator {
|
|
552
|
+
type: 'function';
|
|
553
|
+
color: ContinuousLinearFunction<Vector3>;
|
|
554
|
+
alpha: ContinuousLinearFunction<number>;
|
|
555
|
+
constructor(color?: Array<[Vector3, number]>, alpha?: Array<[number, number]>);
|
|
556
|
+
genColor(memory: GeneratorMemory, color: Vector4, t: number): Vector4;
|
|
557
|
+
toJSON(): FunctionJSON;
|
|
558
|
+
static fromJSON(json: FunctionJSON): Gradient;
|
|
559
|
+
clone(): FunctionColorGenerator;
|
|
560
|
+
startGen(memory: GeneratorMemory): void;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
declare class RandomColorBetweenGradient implements FunctionColorGenerator {
|
|
564
|
+
gradient1: Gradient;
|
|
565
|
+
gradient2: Gradient;
|
|
566
|
+
type: 'function';
|
|
567
|
+
private indexCount;
|
|
568
|
+
constructor(gradient1: Gradient, gradient2: Gradient);
|
|
569
|
+
startGen(memory: GeneratorMemory): void;
|
|
570
|
+
genColor(memory: GeneratorMemory, color: Vector4, t: number): Vector4;
|
|
571
|
+
toJSON(): FunctionJSON;
|
|
572
|
+
static fromJSON(json: FunctionJSON): RandomColorBetweenGradient;
|
|
573
|
+
clone(): RandomColorBetweenGradient;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
interface ColorGenerator {
|
|
577
|
+
type: 'value';
|
|
578
|
+
startGen(memory: GeneratorMemory): void;
|
|
579
|
+
genColor(memory: GeneratorMemory, color: Vector4): Vector4;
|
|
580
|
+
toJSON(): FunctionJSON;
|
|
581
|
+
clone(): ColorGenerator;
|
|
582
|
+
}
|
|
583
|
+
interface FunctionColorGenerator {
|
|
584
|
+
type: 'function';
|
|
585
|
+
startGen(memory: GeneratorMemory): void;
|
|
586
|
+
genColor(memory: GeneratorMemory, color: Vector4, t: number): Vector4;
|
|
587
|
+
toJSON(): FunctionJSON;
|
|
588
|
+
clone(): FunctionColorGenerator;
|
|
589
|
+
}
|
|
590
|
+
declare class ConstantColor implements ColorGenerator {
|
|
591
|
+
color: Vector4;
|
|
592
|
+
constructor(color: Vector4);
|
|
593
|
+
startGen(memory: GeneratorMemory): void;
|
|
594
|
+
genColor(memoryGenerator: GeneratorMemory, color: Vector4): Vector4;
|
|
595
|
+
type: 'value';
|
|
596
|
+
toJSON(): FunctionJSON;
|
|
597
|
+
static fromJSON(json: FunctionJSON): ConstantColor;
|
|
598
|
+
clone(): ColorGenerator;
|
|
599
|
+
}
|
|
600
|
+
declare function ColorGeneratorFromJSON(json: FunctionJSON): RandomColor | ColorRange | Gradient | RandomColorBetweenGradient | ConstantColor;
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* `startGen`/`genValue` follow the per-particle slot pattern documented in
|
|
604
|
+
* `GeneratorMemory.ts`: spawn calls `startGen(memory)` once (claim a slot or
|
|
605
|
+
* no-op), then `genValue(memory)` per frame.
|
|
606
|
+
*/
|
|
607
|
+
interface ValueGenerator {
|
|
608
|
+
type: 'value';
|
|
609
|
+
startGen(memory: any): void;
|
|
610
|
+
genValue(memory: any): number;
|
|
611
|
+
toJSON(): FunctionJSON;
|
|
612
|
+
clone(): ValueGenerator;
|
|
613
|
+
}
|
|
614
|
+
interface FunctionValueGenerator {
|
|
615
|
+
type: 'function';
|
|
616
|
+
startGen(memory: GeneratorMemory): void;
|
|
617
|
+
genValue(memory: GeneratorMemory, t: number): number;
|
|
618
|
+
toJSON(): FunctionJSON;
|
|
619
|
+
clone(): FunctionValueGenerator;
|
|
620
|
+
}
|
|
621
|
+
declare function ValueGeneratorFromJSON(json: FunctionJSON): FunctionValueGenerator | ValueGenerator;
|
|
622
|
+
|
|
623
|
+
declare class ConstantValue implements ValueGenerator {
|
|
624
|
+
value: number;
|
|
625
|
+
type: 'value';
|
|
626
|
+
constructor(value: number);
|
|
627
|
+
startGen(memory: GeneratorMemory): void;
|
|
628
|
+
genValue(memory: GeneratorMemory): number;
|
|
629
|
+
toJSON(): FunctionJSON;
|
|
630
|
+
static fromJSON(json: FunctionJSON): ConstantValue;
|
|
631
|
+
clone(): ValueGenerator;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
declare class IntervalValue implements ValueGenerator {
|
|
635
|
+
a: number;
|
|
636
|
+
b: number;
|
|
637
|
+
constructor(a: number, b: number);
|
|
638
|
+
indexCount: number;
|
|
639
|
+
startGen(memory: GeneratorMemory): void;
|
|
640
|
+
genValue(memory: GeneratorMemory): number;
|
|
641
|
+
type: 'value';
|
|
642
|
+
toJSON(): FunctionJSON;
|
|
643
|
+
static fromJSON(json: FunctionJSON): IntervalValue;
|
|
644
|
+
clone(): ValueGenerator;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
declare abstract class PiecewiseFunction<T> {
|
|
648
|
+
functions: Array<[T, number]>;
|
|
649
|
+
protected constructor();
|
|
650
|
+
findFunction(t: number): number;
|
|
651
|
+
getStartX(index: number): number;
|
|
652
|
+
setStartX(index: number, x: number): void;
|
|
653
|
+
getEndX(index: number): number;
|
|
654
|
+
setEndX(index: number, x: number): void;
|
|
655
|
+
insertFunction(t: number, func: T): void;
|
|
656
|
+
removeFunction(index: number): T;
|
|
657
|
+
getFunction(index: number): T;
|
|
658
|
+
setFunction(index: number, func: T): void;
|
|
659
|
+
get numOfFunctions(): number;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
declare class PiecewiseBezier extends PiecewiseFunction<Bezier> implements FunctionValueGenerator {
|
|
663
|
+
constructor(curves?: Array<[Bezier, number]>);
|
|
664
|
+
genValue(memory: GeneratorMemory, t?: number): number;
|
|
665
|
+
toSVG(length: number, segments: number): string;
|
|
666
|
+
type: 'function';
|
|
667
|
+
toJSON(): FunctionJSON;
|
|
668
|
+
static fromJSON(json: FunctionJSON): PiecewiseBezier;
|
|
669
|
+
clone(): FunctionValueGenerator;
|
|
670
|
+
startGen(memory: GeneratorMemory): void;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
interface RotationGenerator {
|
|
674
|
+
type: 'rotation';
|
|
675
|
+
startGen(memory: GeneratorMemory): void;
|
|
676
|
+
genValue(memory: GeneratorMemory, q: Quaternion, delta: number, t: number): Quaternion;
|
|
677
|
+
toJSON(): FunctionJSON;
|
|
678
|
+
clone(): RotationGenerator;
|
|
679
|
+
}
|
|
680
|
+
declare function RotationGeneratorFromJSON(json: FunctionJSON): RotationGenerator;
|
|
681
|
+
|
|
682
|
+
declare class RandomQuatGenerator implements RotationGenerator {
|
|
683
|
+
type: 'rotation';
|
|
684
|
+
constructor();
|
|
685
|
+
indexCount: number;
|
|
686
|
+
startGen(memory: GeneratorMemory): void;
|
|
687
|
+
genValue(memory: GeneratorMemory, quat: Quaternion, delta: number, t: number): Quaternion;
|
|
688
|
+
toJSON(): FunctionJSON;
|
|
689
|
+
static fromJSON(json: FunctionJSON): RotationGenerator;
|
|
690
|
+
clone(): RotationGenerator;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
declare class AxisAngleGenerator implements RotationGenerator {
|
|
694
|
+
axis: Vector3;
|
|
695
|
+
angle: FunctionValueGenerator | ValueGenerator;
|
|
696
|
+
type: 'rotation';
|
|
697
|
+
constructor(axis: Vector3, angle: FunctionValueGenerator | ValueGenerator);
|
|
698
|
+
startGen(memory: GeneratorMemory): void;
|
|
699
|
+
genValue(memory: GeneratorMemory, quat: Quaternion, delta: number, t?: number): Quaternion;
|
|
700
|
+
toJSON(): FunctionJSON;
|
|
701
|
+
static fromJSON(json: FunctionJSON): AxisAngleGenerator;
|
|
702
|
+
clone(): RotationGenerator;
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
declare class EulerGenerator implements RotationGenerator {
|
|
706
|
+
angleX: FunctionValueGenerator | ValueGenerator;
|
|
707
|
+
angleY: FunctionValueGenerator | ValueGenerator;
|
|
708
|
+
angleZ: FunctionValueGenerator | ValueGenerator;
|
|
709
|
+
type: 'rotation';
|
|
710
|
+
eular: Euler;
|
|
711
|
+
constructor(angleX: FunctionValueGenerator | ValueGenerator, angleY: FunctionValueGenerator | ValueGenerator, angleZ: FunctionValueGenerator | ValueGenerator, eulerOrder?: EulerOrder);
|
|
712
|
+
startGen(memory: GeneratorMemory): void;
|
|
713
|
+
genValue(memory: GeneratorMemory, quat: Quaternion, delta: number, t?: number): Quaternion;
|
|
714
|
+
toJSON(): FunctionJSON;
|
|
715
|
+
static fromJSON(json: FunctionJSON): EulerGenerator;
|
|
716
|
+
clone(): RotationGenerator;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
interface Vector3Generator {
|
|
720
|
+
type: 'vec3function';
|
|
721
|
+
startGen(memory: GeneratorMemory): void;
|
|
722
|
+
genValue(memory: GeneratorMemory, vec: Vector3, t?: number): Vector3;
|
|
723
|
+
toJSON(): FunctionJSON;
|
|
724
|
+
clone(): Vector3Generator;
|
|
725
|
+
}
|
|
726
|
+
declare function Vector3GeneratorFromJSON(json: FunctionJSON): Vector3Generator;
|
|
727
|
+
|
|
728
|
+
declare class Vector3Function implements Vector3Generator {
|
|
729
|
+
x: FunctionValueGenerator | ValueGenerator;
|
|
730
|
+
y: FunctionValueGenerator | ValueGenerator;
|
|
731
|
+
z: FunctionValueGenerator | ValueGenerator;
|
|
732
|
+
type: 'vec3function';
|
|
733
|
+
constructor(x: FunctionValueGenerator | ValueGenerator, y: FunctionValueGenerator | ValueGenerator, z: FunctionValueGenerator | ValueGenerator);
|
|
734
|
+
startGen(memory: GeneratorMemory): void;
|
|
735
|
+
genValue(memory: GeneratorMemory, vec: Vector3, t?: number): Vector3;
|
|
736
|
+
toJSON(): FunctionJSON;
|
|
737
|
+
static fromJSON(json: FunctionJSON): Vector3Generator;
|
|
738
|
+
clone(): Vector3Generator;
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
declare function GeneratorFromJSON(json: FunctionJSON): FunctionValueGenerator | ValueGenerator | RotationGenerator | Vector3Generator;
|
|
742
|
+
|
|
743
|
+
interface EmissionState {
|
|
744
|
+
burstIndex: number;
|
|
745
|
+
burstWaveIndex: number;
|
|
746
|
+
burstParticleIndex: number;
|
|
747
|
+
burstParticleCount: number;
|
|
748
|
+
isBursting: boolean;
|
|
749
|
+
time: number;
|
|
750
|
+
waitEmiting: number;
|
|
751
|
+
travelDistance: number;
|
|
752
|
+
previousWorldPos?: Vector3;
|
|
753
|
+
}
|
|
754
|
+
interface Resource {
|
|
755
|
+
}
|
|
756
|
+
interface JsonMetaData {
|
|
757
|
+
textures: {
|
|
758
|
+
[uuid: string]: Resource;
|
|
759
|
+
};
|
|
760
|
+
geometries: {
|
|
761
|
+
[uuid: string]: Resource;
|
|
762
|
+
};
|
|
763
|
+
}
|
|
764
|
+
interface SerializationOptions {
|
|
765
|
+
/**
|
|
766
|
+
* Use URL for image.
|
|
767
|
+
* @type {boolean}
|
|
768
|
+
*/
|
|
769
|
+
useUrlForImage?: boolean;
|
|
770
|
+
}
|
|
771
|
+
type RendererEmitterSettings = TrailSettings | MeshSettings | BillBoardSettings | StretchedBillBoardSettings;
|
|
772
|
+
interface StretchedBillBoardSettings {
|
|
773
|
+
/**
|
|
774
|
+
* how stretched the particle is in the direction of the camera based on the speed of the particle.
|
|
775
|
+
* @type {number}
|
|
776
|
+
*/
|
|
777
|
+
speedFactor: number;
|
|
778
|
+
/**
|
|
779
|
+
* how stretched the particle is in the direction of the camera based on the size of the particle.
|
|
780
|
+
* @type {number}
|
|
781
|
+
*/
|
|
782
|
+
lengthFactor: number;
|
|
783
|
+
}
|
|
784
|
+
interface BillBoardSettings {
|
|
785
|
+
}
|
|
786
|
+
interface TrailSettings {
|
|
787
|
+
/**
|
|
788
|
+
* Start length of the trail.
|
|
789
|
+
* @type {ValueGenerator | FunctionValueGenerator}
|
|
790
|
+
*/
|
|
791
|
+
startLength: ValueGenerator | FunctionValueGenerator;
|
|
792
|
+
/**
|
|
793
|
+
* Whether to follow the local origin.
|
|
794
|
+
* @type {boolean}
|
|
795
|
+
*/
|
|
796
|
+
followLocalOrigin: boolean;
|
|
797
|
+
}
|
|
798
|
+
interface MeshSettings {
|
|
799
|
+
/**
|
|
800
|
+
* Rotation axis.
|
|
801
|
+
* @type {Vector3}
|
|
802
|
+
*/
|
|
803
|
+
rotationAxis?: Vector3;
|
|
804
|
+
/**
|
|
805
|
+
* Initial rotation around the X-axis.
|
|
806
|
+
* @type {ValueGenerator | FunctionValueGenerator}
|
|
807
|
+
*/
|
|
808
|
+
startRotationX: ValueGenerator | FunctionValueGenerator;
|
|
809
|
+
/**
|
|
810
|
+
* Initial rotation around the Y-axis.
|
|
811
|
+
* @type {ValueGenerator | FunctionValueGenerator}
|
|
812
|
+
*/
|
|
813
|
+
startRotationY: ValueGenerator | FunctionValueGenerator;
|
|
814
|
+
/**
|
|
815
|
+
* Initial rotation around the Z-axis.
|
|
816
|
+
* @type {ValueGenerator | FunctionValueGenerator}
|
|
817
|
+
*/
|
|
818
|
+
startRotationZ: ValueGenerator | FunctionValueGenerator;
|
|
819
|
+
}
|
|
820
|
+
interface IEmitter {
|
|
821
|
+
system: IParticleSystem;
|
|
822
|
+
uuid: string;
|
|
823
|
+
visible: boolean;
|
|
824
|
+
matrixWorld: any;
|
|
825
|
+
}
|
|
826
|
+
type ParticleSystemEventType = "emitEnd" | "destroy" | "particleDied";
|
|
827
|
+
interface ParticleSystemEvent {
|
|
828
|
+
type: ParticleSystemEventType;
|
|
829
|
+
particleSystem: IParticleSystem;
|
|
830
|
+
particle?: IParticle;
|
|
831
|
+
}
|
|
832
|
+
interface IParticleSystem {
|
|
833
|
+
/**
|
|
834
|
+
* Whether the ParticleSystem should be automatically disposed when it finishes emitting particles.
|
|
835
|
+
* @type {string}
|
|
836
|
+
*/
|
|
837
|
+
autoDestroy: boolean;
|
|
838
|
+
/**
|
|
839
|
+
* Whether the system is in world space.
|
|
840
|
+
* @type {boolean}
|
|
841
|
+
*/
|
|
842
|
+
worldSpace: boolean;
|
|
843
|
+
/**
|
|
844
|
+
* World-space velocity of the emitter, updated each frame by the runtime.
|
|
845
|
+
* @type {Vector3}
|
|
846
|
+
*/
|
|
847
|
+
emitterVelocity?: Vector3;
|
|
848
|
+
/**
|
|
849
|
+
* Number of particles.
|
|
850
|
+
* @type {number}
|
|
851
|
+
*/
|
|
852
|
+
particleNum: number;
|
|
853
|
+
/**
|
|
854
|
+
* Duration of the system.
|
|
855
|
+
* @type {number}
|
|
856
|
+
*/
|
|
857
|
+
duration: number;
|
|
858
|
+
/**
|
|
859
|
+
* Whether the system is looping.
|
|
860
|
+
* @type {boolean}
|
|
861
|
+
*/
|
|
862
|
+
looping: boolean;
|
|
863
|
+
/**
|
|
864
|
+
* Array of particles.
|
|
865
|
+
* @type {Array<IParticle>}
|
|
866
|
+
*/
|
|
867
|
+
particles: Array<IParticle>;
|
|
868
|
+
/**
|
|
869
|
+
* Emitter for the particles.
|
|
870
|
+
* @type {IEmitter}
|
|
871
|
+
*/
|
|
872
|
+
emitter: IEmitter;
|
|
873
|
+
/**
|
|
874
|
+
* Optional renderer.
|
|
875
|
+
* @type {BatchedRenderer}
|
|
876
|
+
*/
|
|
877
|
+
rendererEmitterSettings: RendererEmitterSettings;
|
|
878
|
+
emissionState: EmissionState;
|
|
879
|
+
paused: boolean;
|
|
880
|
+
pause(): void;
|
|
881
|
+
stop(): void;
|
|
882
|
+
play(): void;
|
|
883
|
+
restart(): void;
|
|
884
|
+
endEmit(): void;
|
|
885
|
+
clone(): IParticleSystem;
|
|
886
|
+
toJSON(metaData: any, options: SerializationOptions): any;
|
|
887
|
+
emit(delta: number, subEmissionState: EmissionState, matrix: Matrix4): void;
|
|
888
|
+
addEventListener(event: ParticleSystemEventType, callback: (event: ParticleSystemEvent) => void): void;
|
|
889
|
+
removeEventListener(event: ParticleSystemEventType, callback: (event: ParticleSystemEvent) => void): void;
|
|
890
|
+
removeAllEventListeners(event: ParticleSystemEventType): void;
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
declare class LinkedListNode<T> {
|
|
894
|
+
data: T;
|
|
895
|
+
next: LinkedListNode<T> | null;
|
|
896
|
+
prev: LinkedListNode<T> | null;
|
|
897
|
+
constructor(data: T);
|
|
898
|
+
hasPrev(): boolean;
|
|
899
|
+
hasNext(): boolean;
|
|
900
|
+
}
|
|
901
|
+
declare class LinkedList<T> {
|
|
902
|
+
length: number;
|
|
903
|
+
head: LinkedListNode<T> | null;
|
|
904
|
+
tail: LinkedListNode<T> | null;
|
|
905
|
+
constructor();
|
|
906
|
+
isEmpty(): boolean;
|
|
907
|
+
clear(): void;
|
|
908
|
+
front(): T | null;
|
|
909
|
+
back(): T | null;
|
|
910
|
+
/**
|
|
911
|
+
* remove at head in O(1)
|
|
912
|
+
*/
|
|
913
|
+
dequeue(): T | undefined;
|
|
914
|
+
/**
|
|
915
|
+
* remove at tail in O(1)
|
|
916
|
+
*/
|
|
917
|
+
pop(): T | undefined;
|
|
918
|
+
/**
|
|
919
|
+
* add at head in O(1)
|
|
920
|
+
*/
|
|
921
|
+
queue(data: T): void;
|
|
922
|
+
/**
|
|
923
|
+
* add at tail in O(1)
|
|
924
|
+
*/
|
|
925
|
+
push(data: T): void;
|
|
926
|
+
insertBefore(node: LinkedListNode<T>, data: T): void;
|
|
927
|
+
remove(data: T): void;
|
|
928
|
+
/**
|
|
929
|
+
* Returns an iterator over the values
|
|
930
|
+
*/
|
|
931
|
+
values(): Generator<T, void, unknown>;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
interface IParticle {
|
|
935
|
+
/**
|
|
936
|
+
* Position of the particle.
|
|
937
|
+
* @type {Vector3}
|
|
938
|
+
*/
|
|
939
|
+
position: Vector3;
|
|
940
|
+
/**
|
|
941
|
+
* Velocity of the particle.
|
|
942
|
+
* @type {Vector3}
|
|
943
|
+
*/
|
|
944
|
+
velocity: Vector3;
|
|
945
|
+
/**
|
|
946
|
+
* Age of the particle.
|
|
947
|
+
* @type {number}
|
|
948
|
+
*/
|
|
949
|
+
age: number;
|
|
950
|
+
/**
|
|
951
|
+
* Life duration of the particle.
|
|
952
|
+
* @type {number}
|
|
953
|
+
*/
|
|
954
|
+
life: number;
|
|
955
|
+
/**
|
|
956
|
+
* Size of the particle.
|
|
957
|
+
* @type {Vector3}
|
|
958
|
+
*/
|
|
959
|
+
size: Vector3;
|
|
960
|
+
/**
|
|
961
|
+
* Rotation of the particle.
|
|
962
|
+
* @type {number | Quaternion}
|
|
963
|
+
*/
|
|
964
|
+
rotation?: number | Quaternion;
|
|
965
|
+
/**
|
|
966
|
+
* UV tile index.
|
|
967
|
+
* @type {number}
|
|
968
|
+
*/
|
|
969
|
+
uvTile: number;
|
|
970
|
+
/**
|
|
971
|
+
* Color of the particle.
|
|
972
|
+
* @type {Vector4}
|
|
973
|
+
*/
|
|
974
|
+
color: Vector4;
|
|
975
|
+
/**
|
|
976
|
+
* the memory of the particle.
|
|
977
|
+
*/
|
|
978
|
+
memory: GeneratorMemory;
|
|
979
|
+
/**
|
|
980
|
+
* Indicates if the particle has died.
|
|
981
|
+
* @type {boolean}
|
|
982
|
+
*/
|
|
983
|
+
get died(): boolean;
|
|
984
|
+
}
|
|
985
|
+
interface Particle extends IParticle {
|
|
986
|
+
/**
|
|
987
|
+
* Speed modifier of the particle.
|
|
988
|
+
* @type {number}
|
|
989
|
+
*/
|
|
990
|
+
speedModifier: number;
|
|
991
|
+
/**
|
|
992
|
+
* Emission state of the particle.
|
|
993
|
+
* @type {EmissionState}
|
|
994
|
+
*/
|
|
995
|
+
emissionState?: EmissionState;
|
|
996
|
+
/**
|
|
997
|
+
* Parent matrix for transformation.
|
|
998
|
+
* @type {Matrix4}
|
|
999
|
+
*/
|
|
1000
|
+
parentMatrix?: Matrix4;
|
|
1001
|
+
/**
|
|
1002
|
+
* Initial speed of the particle.
|
|
1003
|
+
* @type {number}
|
|
1004
|
+
*/
|
|
1005
|
+
startSpeed: number;
|
|
1006
|
+
/**
|
|
1007
|
+
* Initial color of the particle.
|
|
1008
|
+
* @type {Vector4}
|
|
1009
|
+
*/
|
|
1010
|
+
startColor: Vector4;
|
|
1011
|
+
/**
|
|
1012
|
+
* Initial size of the particle.
|
|
1013
|
+
* @type {Vector3}
|
|
1014
|
+
*/
|
|
1015
|
+
startSize: Vector3;
|
|
1016
|
+
reset(): void;
|
|
1017
|
+
}
|
|
1018
|
+
/**
|
|
1019
|
+
* Particle implementation for node-based particle systems.
|
|
1020
|
+
*/
|
|
1021
|
+
declare class NodeParticle implements IParticle {
|
|
1022
|
+
/**
|
|
1023
|
+
* Position of the particle.
|
|
1024
|
+
* @type {Vector3}
|
|
1025
|
+
*/
|
|
1026
|
+
position: Vector3;
|
|
1027
|
+
/**
|
|
1028
|
+
* Velocity of the particle.
|
|
1029
|
+
* @type {Vector3}
|
|
1030
|
+
*/
|
|
1031
|
+
velocity: Vector3;
|
|
1032
|
+
/**
|
|
1033
|
+
* Age of the particle.
|
|
1034
|
+
* @type {number}
|
|
1035
|
+
*/
|
|
1036
|
+
age: number;
|
|
1037
|
+
/**
|
|
1038
|
+
* Life duration of the particle.
|
|
1039
|
+
* @type {number}
|
|
1040
|
+
*/
|
|
1041
|
+
life: number;
|
|
1042
|
+
/**
|
|
1043
|
+
* Size of the particle.
|
|
1044
|
+
* @type {Vector3}
|
|
1045
|
+
*/
|
|
1046
|
+
size: Vector3;
|
|
1047
|
+
/**
|
|
1048
|
+
* Angular velocity of the particle.
|
|
1049
|
+
* @type {number | Quaternion}
|
|
1050
|
+
*/
|
|
1051
|
+
angularVelocity?: number | Quaternion;
|
|
1052
|
+
/**
|
|
1053
|
+
* Rotation of the particle.
|
|
1054
|
+
* @type {number | Quaternion}
|
|
1055
|
+
*/
|
|
1056
|
+
rotation: number | Quaternion;
|
|
1057
|
+
/**
|
|
1058
|
+
* Color of the particle.
|
|
1059
|
+
* @type {Vector4}
|
|
1060
|
+
*/
|
|
1061
|
+
color: Vector4;
|
|
1062
|
+
/**
|
|
1063
|
+
* UV tile index.
|
|
1064
|
+
* @type {number}
|
|
1065
|
+
*/
|
|
1066
|
+
uvTile: number;
|
|
1067
|
+
/**
|
|
1068
|
+
* Indicates if the particle has died.
|
|
1069
|
+
* @type {boolean}
|
|
1070
|
+
*/
|
|
1071
|
+
get died(): boolean;
|
|
1072
|
+
/**
|
|
1073
|
+
* Resets the particle properties to initial values.
|
|
1074
|
+
*/
|
|
1075
|
+
reset(): void;
|
|
1076
|
+
memory: never[];
|
|
1077
|
+
}
|
|
1078
|
+
/**
|
|
1079
|
+
* Particle implementation for sprite-based particle.
|
|
1080
|
+
*/
|
|
1081
|
+
declare class SpriteParticle implements Particle {
|
|
1082
|
+
/**
|
|
1083
|
+
* Parent matrix for transformation.
|
|
1084
|
+
* @type {Matrix4}
|
|
1085
|
+
*/
|
|
1086
|
+
parentMatrix?: Matrix4;
|
|
1087
|
+
/**
|
|
1088
|
+
* Initial speed of the particle.
|
|
1089
|
+
* @type {number}
|
|
1090
|
+
*/
|
|
1091
|
+
startSpeed: number;
|
|
1092
|
+
/**
|
|
1093
|
+
* Initial color of the particle.
|
|
1094
|
+
* @type {Vector4}
|
|
1095
|
+
*/
|
|
1096
|
+
startColor: Vector4;
|
|
1097
|
+
/**
|
|
1098
|
+
* Initial size of the particle.
|
|
1099
|
+
* @type {Vector3}
|
|
1100
|
+
*/
|
|
1101
|
+
startSize: Vector3;
|
|
1102
|
+
/**
|
|
1103
|
+
* Position of the particle.
|
|
1104
|
+
* @type {Vector3}
|
|
1105
|
+
*/
|
|
1106
|
+
position: Vector3;
|
|
1107
|
+
/**
|
|
1108
|
+
* Velocity of the particle.
|
|
1109
|
+
* @type {Vector3}
|
|
1110
|
+
*/
|
|
1111
|
+
velocity: Vector3;
|
|
1112
|
+
/**
|
|
1113
|
+
* Age of the particle.
|
|
1114
|
+
* @type {number}
|
|
1115
|
+
*/
|
|
1116
|
+
age: number;
|
|
1117
|
+
/**
|
|
1118
|
+
* Life duration of the particle.
|
|
1119
|
+
* @type {number}
|
|
1120
|
+
*/
|
|
1121
|
+
life: number;
|
|
1122
|
+
/**
|
|
1123
|
+
* Size of the particle.
|
|
1124
|
+
* @type {Vector3}
|
|
1125
|
+
*/
|
|
1126
|
+
size: Vector3;
|
|
1127
|
+
/**
|
|
1128
|
+
* Speed modifier of the particle.
|
|
1129
|
+
* @type {number}
|
|
1130
|
+
*/
|
|
1131
|
+
speedModifier: number;
|
|
1132
|
+
/**
|
|
1133
|
+
* Angular velocity of the particle.
|
|
1134
|
+
* @type {number | Quaternion}
|
|
1135
|
+
*/
|
|
1136
|
+
angularVelocity?: number | Quaternion;
|
|
1137
|
+
/**
|
|
1138
|
+
* Rotation of the particle.
|
|
1139
|
+
* @type {number | Quaternion}
|
|
1140
|
+
*/
|
|
1141
|
+
rotation: number | Quaternion;
|
|
1142
|
+
/**
|
|
1143
|
+
* Color of the particle.
|
|
1144
|
+
* @type {Vector4}
|
|
1145
|
+
*/
|
|
1146
|
+
color: Vector4;
|
|
1147
|
+
/**
|
|
1148
|
+
* UV tile index.
|
|
1149
|
+
* @type {number}
|
|
1150
|
+
*/
|
|
1151
|
+
uvTile: number;
|
|
1152
|
+
/**
|
|
1153
|
+
* Indicates if the particle has died.
|
|
1154
|
+
* @type {boolean}
|
|
1155
|
+
*/
|
|
1156
|
+
get died(): boolean;
|
|
1157
|
+
reset(): void;
|
|
1158
|
+
memory: never[];
|
|
1159
|
+
}
|
|
1160
|
+
declare class RecordState {
|
|
1161
|
+
position: Vector3;
|
|
1162
|
+
size: number;
|
|
1163
|
+
color: Vector4;
|
|
1164
|
+
/**
|
|
1165
|
+
* Creates a new record state.
|
|
1166
|
+
* @param {Vector3} position - The position of the particle.
|
|
1167
|
+
* @param {number} size - The size of the particle.
|
|
1168
|
+
* @param {Vector4} color - The color of the particle.
|
|
1169
|
+
*/
|
|
1170
|
+
constructor(position: Vector3, size: number, color: Vector4);
|
|
1171
|
+
}
|
|
1172
|
+
/**
|
|
1173
|
+
* Particle implementation for trail-based particles.
|
|
1174
|
+
*/
|
|
1175
|
+
declare class TrailParticle implements Particle {
|
|
1176
|
+
/**
|
|
1177
|
+
* Parent matrix for transformation.
|
|
1178
|
+
* @type {Matrix4}
|
|
1179
|
+
*/
|
|
1180
|
+
parentMatrix?: Matrix4;
|
|
1181
|
+
/**
|
|
1182
|
+
* Initial speed of the particle.
|
|
1183
|
+
* @type {number}
|
|
1184
|
+
*/
|
|
1185
|
+
startSpeed: number;
|
|
1186
|
+
/**
|
|
1187
|
+
* Initial color of the particle.
|
|
1188
|
+
* @type {Vector4}
|
|
1189
|
+
*/
|
|
1190
|
+
startColor: Vector4;
|
|
1191
|
+
/**
|
|
1192
|
+
* Initial size of the particle.
|
|
1193
|
+
* @type {Vector3}
|
|
1194
|
+
*/
|
|
1195
|
+
startSize: Vector3;
|
|
1196
|
+
/**
|
|
1197
|
+
* Position of the particle.
|
|
1198
|
+
* @type {Vector3}
|
|
1199
|
+
*/
|
|
1200
|
+
position: Vector3;
|
|
1201
|
+
/**
|
|
1202
|
+
* Local position of the particle.
|
|
1203
|
+
* @type {Vector3}
|
|
1204
|
+
*/
|
|
1205
|
+
localPosition?: Vector3;
|
|
1206
|
+
/**
|
|
1207
|
+
* Velocity of the particle.
|
|
1208
|
+
* @type {Vector3}
|
|
1209
|
+
*/
|
|
1210
|
+
velocity: Vector3;
|
|
1211
|
+
/**
|
|
1212
|
+
* Age of the particle.
|
|
1213
|
+
* @type {number}
|
|
1214
|
+
*/
|
|
1215
|
+
age: number;
|
|
1216
|
+
/**
|
|
1217
|
+
* Life duration of the particle.
|
|
1218
|
+
* @type {number}
|
|
1219
|
+
*/
|
|
1220
|
+
life: number;
|
|
1221
|
+
/**
|
|
1222
|
+
* Size of the particle.
|
|
1223
|
+
* @type {Vector3}
|
|
1224
|
+
*/
|
|
1225
|
+
size: Vector3;
|
|
1226
|
+
/**
|
|
1227
|
+
* Length of the trail.
|
|
1228
|
+
* @type {number}
|
|
1229
|
+
*/
|
|
1230
|
+
length: number;
|
|
1231
|
+
/**
|
|
1232
|
+
* Speed modifier of the particle.
|
|
1233
|
+
* @type {number}
|
|
1234
|
+
*/
|
|
1235
|
+
speedModifier: number;
|
|
1236
|
+
/**
|
|
1237
|
+
* Color of the particle.
|
|
1238
|
+
* @type {Vector4}
|
|
1239
|
+
*/
|
|
1240
|
+
color: Vector4;
|
|
1241
|
+
/**
|
|
1242
|
+
* Previous states of the particle.
|
|
1243
|
+
* @type {LinkedList<RecordState>}
|
|
1244
|
+
*/
|
|
1245
|
+
previous: LinkedList<RecordState>;
|
|
1246
|
+
/**
|
|
1247
|
+
* UV tile index.
|
|
1248
|
+
* @type {number}
|
|
1249
|
+
*/
|
|
1250
|
+
uvTile: number;
|
|
1251
|
+
/**
|
|
1252
|
+
* Updates the particle state.
|
|
1253
|
+
*/
|
|
1254
|
+
update(): void;
|
|
1255
|
+
/**
|
|
1256
|
+
* Indicates if the particle has died.
|
|
1257
|
+
* @type {boolean}
|
|
1258
|
+
*/
|
|
1259
|
+
get died(): boolean;
|
|
1260
|
+
/**
|
|
1261
|
+
* Resets the particle properties and clears the previous states.
|
|
1262
|
+
*/
|
|
1263
|
+
reset(): void;
|
|
1264
|
+
memory: never[];
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
interface ShapeJSON {
|
|
1268
|
+
type: string;
|
|
1269
|
+
radius?: number;
|
|
1270
|
+
arc?: number;
|
|
1271
|
+
thickness?: number;
|
|
1272
|
+
donutRadius?: number;
|
|
1273
|
+
angle?: number;
|
|
1274
|
+
width?: number;
|
|
1275
|
+
height?: number;
|
|
1276
|
+
column?: number;
|
|
1277
|
+
row?: number;
|
|
1278
|
+
mesh?: string;
|
|
1279
|
+
mode?: number;
|
|
1280
|
+
particleSystem?: string;
|
|
1281
|
+
spread?: number;
|
|
1282
|
+
speed?: any;
|
|
1283
|
+
}
|
|
1284
|
+
/**
|
|
1285
|
+
* Enum representing the emitter modes for particles.
|
|
1286
|
+
*/
|
|
1287
|
+
declare enum EmitterMode {
|
|
1288
|
+
/**
|
|
1289
|
+
* Emit particles randomly over the specified duration.
|
|
1290
|
+
*/
|
|
1291
|
+
Random = 0,
|
|
1292
|
+
/**
|
|
1293
|
+
* Emit particles in a continuous loop.
|
|
1294
|
+
*/
|
|
1295
|
+
Loop = 1,
|
|
1296
|
+
/**
|
|
1297
|
+
* Emit particles back and forth in a ping-pong manner.
|
|
1298
|
+
*/
|
|
1299
|
+
PingPong = 2,
|
|
1300
|
+
/**
|
|
1301
|
+
* Emit particles in bursts.
|
|
1302
|
+
*/
|
|
1303
|
+
Burst = 3
|
|
1304
|
+
}
|
|
1305
|
+
declare function getValueFromEmitterMode(mode: EmitterMode, currentValue: number, spread: number, emissionState: EmissionState): number;
|
|
1306
|
+
interface EmitterShape {
|
|
1307
|
+
type: string;
|
|
1308
|
+
initialize(particle: Particle, emissionState: EmissionState): void;
|
|
1309
|
+
toJSON(): ShapeJSON;
|
|
1310
|
+
update(system: IParticleSystem, delta: number): void;
|
|
1311
|
+
clone(): EmitterShape;
|
|
1312
|
+
}
|
|
1313
|
+
|
|
1314
|
+
/**
|
|
1315
|
+
* Interface representing the parameters for a cone emitter.
|
|
1316
|
+
*/
|
|
1317
|
+
interface ConeEmitterParameters {
|
|
1318
|
+
/**
|
|
1319
|
+
* The radius of the cone base.
|
|
1320
|
+
*/
|
|
1321
|
+
radius?: number;
|
|
1322
|
+
/**
|
|
1323
|
+
* The arc of the cone.
|
|
1324
|
+
*/
|
|
1325
|
+
arc?: number;
|
|
1326
|
+
/**
|
|
1327
|
+
* The thickness of the cone. 1 is a full cone, 0 is a cone with 0 thickness.
|
|
1328
|
+
*/
|
|
1329
|
+
thickness?: number;
|
|
1330
|
+
/**
|
|
1331
|
+
* The angle of the cone, ranging from 0 to Math.PI / 2.
|
|
1332
|
+
*/
|
|
1333
|
+
angle?: number;
|
|
1334
|
+
/**
|
|
1335
|
+
* The mode of the emitter.
|
|
1336
|
+
* {@link EmitterMode}
|
|
1337
|
+
*/
|
|
1338
|
+
mode?: EmitterMode;
|
|
1339
|
+
/**
|
|
1340
|
+
* The length of the segment at which the emitter point converges at the start and end, when mode is EmitterMode.Loop or EmitterMode.PingPong.
|
|
1341
|
+
* {@link EmitterMode}
|
|
1342
|
+
*/
|
|
1343
|
+
spread?: number;
|
|
1344
|
+
/**
|
|
1345
|
+
* The speed of the emitter start point when mode is EmitterMode.Loop or EmitterMode.PingPong.
|
|
1346
|
+
* {@link EmitterMode}
|
|
1347
|
+
*/
|
|
1348
|
+
speed?: ValueGenerator | FunctionValueGenerator;
|
|
1349
|
+
}
|
|
1350
|
+
declare class ConeEmitter implements EmitterShape {
|
|
1351
|
+
type: string;
|
|
1352
|
+
radius: number;
|
|
1353
|
+
arc: number;
|
|
1354
|
+
thickness: number;
|
|
1355
|
+
angle: number;
|
|
1356
|
+
mode: EmitterMode;
|
|
1357
|
+
spread: number;
|
|
1358
|
+
speed: ValueGenerator | FunctionValueGenerator;
|
|
1359
|
+
memory: GeneratorMemory;
|
|
1360
|
+
private currentValue;
|
|
1361
|
+
constructor(parameters?: ConeEmitterParameters);
|
|
1362
|
+
update(system: IParticleSystem, delta: number): void;
|
|
1363
|
+
initialize(p: Particle, emissionState: EmissionState): void;
|
|
1364
|
+
toJSON(): ShapeJSON;
|
|
1365
|
+
static fromJSON(json: ShapeJSON): ConeEmitter;
|
|
1366
|
+
clone(): EmitterShape;
|
|
1367
|
+
}
|
|
1368
|
+
|
|
1369
|
+
/**
|
|
1370
|
+
* Interface representing the parameters for a circle emitter.
|
|
1371
|
+
*/
|
|
1372
|
+
interface CircleEmitterParameters {
|
|
1373
|
+
/**
|
|
1374
|
+
* The radius of the circle.
|
|
1375
|
+
*/
|
|
1376
|
+
radius?: number;
|
|
1377
|
+
/**
|
|
1378
|
+
* The arc of the circle.
|
|
1379
|
+
*/
|
|
1380
|
+
arc?: number;
|
|
1381
|
+
/**
|
|
1382
|
+
* The thickness of the ring.
|
|
1383
|
+
* 1 is a full circle, 0 is a ring with 0 radius.
|
|
1384
|
+
*/
|
|
1385
|
+
thickness?: number;
|
|
1386
|
+
/**
|
|
1387
|
+
* The mode of the emitter.
|
|
1388
|
+
* {@link EmitterMode}
|
|
1389
|
+
*/
|
|
1390
|
+
mode?: EmitterMode;
|
|
1391
|
+
/**
|
|
1392
|
+
* The length of segment of which emitter point converges at the start and end, when mode is EmitterMode.Loop or EmitterMode.PingPong.
|
|
1393
|
+
* {@link EmitterMode}
|
|
1394
|
+
*/
|
|
1395
|
+
spread?: number;
|
|
1396
|
+
/**
|
|
1397
|
+
* The speed of the emitter start point travels when mode is EmitterMode.Loop or EmitterMode.PingPong.
|
|
1398
|
+
* {@link EmitterMode}
|
|
1399
|
+
*/
|
|
1400
|
+
speed?: ValueGenerator | FunctionValueGenerator;
|
|
1401
|
+
}
|
|
1402
|
+
/**
|
|
1403
|
+
* a particle emitter that emits particles from a circle.
|
|
1404
|
+
*/
|
|
1405
|
+
declare class CircleEmitter implements EmitterShape {
|
|
1406
|
+
type: string;
|
|
1407
|
+
radius: number;
|
|
1408
|
+
arc: number;
|
|
1409
|
+
thickness: number;
|
|
1410
|
+
mode: EmitterMode;
|
|
1411
|
+
spread: number;
|
|
1412
|
+
speed: ValueGenerator | FunctionValueGenerator;
|
|
1413
|
+
memory: GeneratorMemory;
|
|
1414
|
+
private currentValue;
|
|
1415
|
+
constructor(parameters?: CircleEmitterParameters);
|
|
1416
|
+
update(system: IParticleSystem, delta: number): void;
|
|
1417
|
+
initialize(p: Particle, emissionState: EmissionState): void;
|
|
1418
|
+
toJSON(): ShapeJSON;
|
|
1419
|
+
static fromJSON(json: any): CircleEmitter;
|
|
1420
|
+
clone(): EmitterShape;
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
/**
|
|
1424
|
+
* Interface representing the parameters for a donut emitter.
|
|
1425
|
+
*/
|
|
1426
|
+
interface DonutEmitterParameters {
|
|
1427
|
+
/**
|
|
1428
|
+
* The radius of the donut.
|
|
1429
|
+
*/
|
|
1430
|
+
radius?: number;
|
|
1431
|
+
/**
|
|
1432
|
+
* The arc of the donut.
|
|
1433
|
+
*/
|
|
1434
|
+
arc?: number;
|
|
1435
|
+
/**
|
|
1436
|
+
* The thickness of the ring. 1 is a full donut, 0 is a ring with 0 radius.
|
|
1437
|
+
*/
|
|
1438
|
+
thickness?: number;
|
|
1439
|
+
/**
|
|
1440
|
+
* The radius of the hole in the center of the donut.
|
|
1441
|
+
*/
|
|
1442
|
+
donutRadius?: number;
|
|
1443
|
+
/**
|
|
1444
|
+
* The mode of the emitter.
|
|
1445
|
+
* {@link EmitterMode}
|
|
1446
|
+
*/
|
|
1447
|
+
mode?: EmitterMode;
|
|
1448
|
+
/**
|
|
1449
|
+
* The length of the segment at which the emitter point converges at the start and end, when mode is EmitterMode.Loop or EmitterMode.PingPong.
|
|
1450
|
+
* {@link EmitterMode}
|
|
1451
|
+
*/
|
|
1452
|
+
spread?: number;
|
|
1453
|
+
/**
|
|
1454
|
+
* The speed of the emitter start point when mode is EmitterMode.Loop or EmitterMode.PingPong.
|
|
1455
|
+
* {@link EmitterMode}
|
|
1456
|
+
*/
|
|
1457
|
+
speed?: ValueGenerator | FunctionValueGenerator;
|
|
1458
|
+
}
|
|
1459
|
+
declare class DonutEmitter implements EmitterShape {
|
|
1460
|
+
type: string;
|
|
1461
|
+
radius: number;
|
|
1462
|
+
donutRadius: number;
|
|
1463
|
+
arc: number;
|
|
1464
|
+
thickness: number;
|
|
1465
|
+
mode: EmitterMode;
|
|
1466
|
+
spread: number;
|
|
1467
|
+
speed: ValueGenerator | FunctionValueGenerator;
|
|
1468
|
+
memory: GeneratorMemory;
|
|
1469
|
+
_m1: Matrix4;
|
|
1470
|
+
constructor(parameters?: DonutEmitterParameters);
|
|
1471
|
+
private currentValue;
|
|
1472
|
+
update(system: IParticleSystem, delta: number): void;
|
|
1473
|
+
initialize(p: Particle, emissionState: EmissionState): void;
|
|
1474
|
+
toJSON(): ShapeJSON;
|
|
1475
|
+
static fromJSON(json: any): DonutEmitter;
|
|
1476
|
+
clone(): EmitterShape;
|
|
1477
|
+
}
|
|
1478
|
+
|
|
1479
|
+
/**
|
|
1480
|
+
* A point emitter emits particles from a single point.
|
|
1481
|
+
*/
|
|
1482
|
+
declare class PointEmitter implements EmitterShape {
|
|
1483
|
+
type: string;
|
|
1484
|
+
_m1: Matrix4;
|
|
1485
|
+
constructor();
|
|
1486
|
+
update(system: IParticleSystem, delta: number): void;
|
|
1487
|
+
initialize(p: Particle): void;
|
|
1488
|
+
toJSON(): ShapeJSON;
|
|
1489
|
+
static fromJSON(json: any): PointEmitter;
|
|
1490
|
+
clone(): EmitterShape;
|
|
1491
|
+
}
|
|
1492
|
+
|
|
1493
|
+
/**
|
|
1494
|
+
* Interface representing the parameters for a sphere emitter.
|
|
1495
|
+
*/
|
|
1496
|
+
interface SphereEmitterParameters {
|
|
1497
|
+
/**
|
|
1498
|
+
* The radius of the sphere.
|
|
1499
|
+
*/
|
|
1500
|
+
radius?: number;
|
|
1501
|
+
/**
|
|
1502
|
+
* The arc of the sphere.
|
|
1503
|
+
*/
|
|
1504
|
+
arc?: number;
|
|
1505
|
+
/**
|
|
1506
|
+
* The thickness of the sphere. 1 is a full sphere, 0 is a thin shell.
|
|
1507
|
+
*/
|
|
1508
|
+
thickness?: number;
|
|
1509
|
+
/**
|
|
1510
|
+
* The mode of the emitter.
|
|
1511
|
+
* {@link EmitterMode}
|
|
1512
|
+
*/
|
|
1513
|
+
mode?: EmitterMode;
|
|
1514
|
+
/**
|
|
1515
|
+
* The length of the segment at which the emitter point converges at the start and end, when mode is EmitterMode.Loop or EmitterMode.PingPong.
|
|
1516
|
+
* {@link EmitterMode}
|
|
1517
|
+
*/
|
|
1518
|
+
spread?: number;
|
|
1519
|
+
/**
|
|
1520
|
+
* The speed of the emitter start point when mode is EmitterMode.Loop or EmitterMode.PingPong.
|
|
1521
|
+
* {@link EmitterMode}
|
|
1522
|
+
*/
|
|
1523
|
+
speed?: ValueGenerator | FunctionValueGenerator;
|
|
1524
|
+
}
|
|
1525
|
+
declare class SphereEmitter implements EmitterShape {
|
|
1526
|
+
type: string;
|
|
1527
|
+
radius: number;
|
|
1528
|
+
arc: number;
|
|
1529
|
+
thickness: number;
|
|
1530
|
+
mode: EmitterMode;
|
|
1531
|
+
spread: number;
|
|
1532
|
+
speed: ValueGenerator | FunctionValueGenerator;
|
|
1533
|
+
memory: GeneratorMemory;
|
|
1534
|
+
_m1: Matrix4;
|
|
1535
|
+
constructor(parameters?: SphereEmitterParameters);
|
|
1536
|
+
private currentValue;
|
|
1537
|
+
update(system: IParticleSystem, delta: number): void;
|
|
1538
|
+
initialize(p: Particle, emissionState: EmissionState): void;
|
|
1539
|
+
toJSON(): ShapeJSON;
|
|
1540
|
+
static fromJSON(json: any): SphereEmitter;
|
|
1541
|
+
clone(): EmitterShape;
|
|
1542
|
+
}
|
|
1543
|
+
|
|
1544
|
+
/**
|
|
1545
|
+
* Interface representing the parameters for a hemisphere emitter.
|
|
1546
|
+
*/
|
|
1547
|
+
interface HemisphereEmitterParameters {
|
|
1548
|
+
/**
|
|
1549
|
+
* The radius of the hemisphere.
|
|
1550
|
+
*/
|
|
1551
|
+
radius?: number;
|
|
1552
|
+
/**
|
|
1553
|
+
* The arc of the hemisphere.
|
|
1554
|
+
*/
|
|
1555
|
+
arc?: number;
|
|
1556
|
+
/**
|
|
1557
|
+
* The thickness of the hemisphere. 1 is a full hemisphere, 0 is a thin shell.
|
|
1558
|
+
*/
|
|
1559
|
+
thickness?: number;
|
|
1560
|
+
/**
|
|
1561
|
+
* The mode of the emitter.
|
|
1562
|
+
* {@link EmitterMode}
|
|
1563
|
+
*/
|
|
1564
|
+
mode?: EmitterMode;
|
|
1565
|
+
/**
|
|
1566
|
+
* The length of the segment at which the emitter point converges at the start and end, when mode is EmitterMode.Loop or EmitterMode.PingPong.
|
|
1567
|
+
* {@link EmitterMode}
|
|
1568
|
+
*/
|
|
1569
|
+
spread?: number;
|
|
1570
|
+
/**
|
|
1571
|
+
* The speed of the emitter start point when mode is EmitterMode.Loop or EmitterMode.PingPong.
|
|
1572
|
+
* {@link EmitterMode}
|
|
1573
|
+
*/
|
|
1574
|
+
speed?: ValueGenerator | FunctionValueGenerator;
|
|
1575
|
+
}
|
|
1576
|
+
declare class HemisphereEmitter implements EmitterShape {
|
|
1577
|
+
type: string;
|
|
1578
|
+
radius: number;
|
|
1579
|
+
arc: number;
|
|
1580
|
+
thickness: number;
|
|
1581
|
+
mode: EmitterMode;
|
|
1582
|
+
spread: number;
|
|
1583
|
+
speed: ValueGenerator | FunctionValueGenerator;
|
|
1584
|
+
memory: GeneratorMemory;
|
|
1585
|
+
_m1: Matrix4;
|
|
1586
|
+
constructor(parameters?: HemisphereEmitterParameters);
|
|
1587
|
+
private currentValue;
|
|
1588
|
+
update(system: IParticleSystem, delta: number): void;
|
|
1589
|
+
initialize(p: Particle, emissionState: EmissionState): void;
|
|
1590
|
+
toJSON(): ShapeJSON;
|
|
1591
|
+
static fromJSON(json: any): HemisphereEmitter;
|
|
1592
|
+
clone(): EmitterShape;
|
|
1593
|
+
}
|
|
1594
|
+
|
|
1595
|
+
/**
|
|
1596
|
+
* Interface representing the parameters for a grid emitter.
|
|
1597
|
+
*/
|
|
1598
|
+
interface GridEmitterParameters {
|
|
1599
|
+
/**
|
|
1600
|
+
* The width of the grid.
|
|
1601
|
+
*/
|
|
1602
|
+
width?: number;
|
|
1603
|
+
/**
|
|
1604
|
+
* The height of the grid.
|
|
1605
|
+
*/
|
|
1606
|
+
height?: number;
|
|
1607
|
+
/**
|
|
1608
|
+
* The number of columns in the grid.
|
|
1609
|
+
*/
|
|
1610
|
+
column?: number;
|
|
1611
|
+
/**
|
|
1612
|
+
* The number of rows in the grid.
|
|
1613
|
+
*/
|
|
1614
|
+
row?: number;
|
|
1615
|
+
}
|
|
1616
|
+
declare class GridEmitter implements EmitterShape {
|
|
1617
|
+
type: string;
|
|
1618
|
+
width: number;
|
|
1619
|
+
height: number;
|
|
1620
|
+
column: number;
|
|
1621
|
+
row: number;
|
|
1622
|
+
constructor(parameters?: GridEmitterParameters);
|
|
1623
|
+
initialize(p: Particle): void;
|
|
1624
|
+
toJSON(): ShapeJSON;
|
|
1625
|
+
static fromJSON(json: any): GridEmitter;
|
|
1626
|
+
clone(): EmitterShape;
|
|
1627
|
+
update(system: IParticleSystem, delta: number): void;
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
/**
|
|
1631
|
+
* Interface representing the parameters for a rectangle emitter.
|
|
1632
|
+
*/
|
|
1633
|
+
interface RectangleEmitterParameters {
|
|
1634
|
+
/**
|
|
1635
|
+
* The width of the rectangle.
|
|
1636
|
+
*/
|
|
1637
|
+
width?: number;
|
|
1638
|
+
/**
|
|
1639
|
+
* The height of the rectangle.
|
|
1640
|
+
*/
|
|
1641
|
+
height?: number;
|
|
1642
|
+
/**
|
|
1643
|
+
* The thickness of the ring.
|
|
1644
|
+
* 1 is a full rectangle, 0 is a ring with 0 radius.
|
|
1645
|
+
*/
|
|
1646
|
+
thickness?: number;
|
|
1647
|
+
/**
|
|
1648
|
+
* The mode of the emitter.
|
|
1649
|
+
* {@link EmitterMode}
|
|
1650
|
+
*/
|
|
1651
|
+
mode?: EmitterMode;
|
|
1652
|
+
/**
|
|
1653
|
+
* The length of segment of which emitter point converges at the start and end, when mode is EmitterMode.Loop or EmitterMode.PingPong.
|
|
1654
|
+
* {@link EmitterMode}
|
|
1655
|
+
*/
|
|
1656
|
+
spread?: number;
|
|
1657
|
+
/**
|
|
1658
|
+
* The speed of the emitter start point travels when mode is EmitterMode.Loop or EmitterMode.PingPong.
|
|
1659
|
+
* {@link EmitterMode}
|
|
1660
|
+
*/
|
|
1661
|
+
speed?: ValueGenerator | FunctionValueGenerator;
|
|
1662
|
+
}
|
|
1663
|
+
/**
|
|
1664
|
+
* a particle emitter that emits particles from a rectangle.
|
|
1665
|
+
*/
|
|
1666
|
+
declare class RectangleEmitter implements EmitterShape {
|
|
1667
|
+
type: string;
|
|
1668
|
+
width: number;
|
|
1669
|
+
height: number;
|
|
1670
|
+
thickness: number;
|
|
1671
|
+
mode: EmitterMode;
|
|
1672
|
+
spread: number;
|
|
1673
|
+
speed: ValueGenerator | FunctionValueGenerator;
|
|
1674
|
+
memory: GeneratorMemory;
|
|
1675
|
+
private currentValue;
|
|
1676
|
+
private _m1;
|
|
1677
|
+
constructor(parameters?: RectangleEmitterParameters);
|
|
1678
|
+
update(system: IParticleSystem, delta: number): void;
|
|
1679
|
+
initialize(p: Particle, emissionState: EmissionState): void;
|
|
1680
|
+
toJSON(): ShapeJSON;
|
|
1681
|
+
static fromJSON(json: any): RectangleEmitter;
|
|
1682
|
+
clone(): EmitterShape;
|
|
1683
|
+
}
|
|
1684
|
+
|
|
1685
|
+
interface Constructable<T> {
|
|
1686
|
+
new (...args: any): T;
|
|
1687
|
+
}
|
|
1688
|
+
type FieldType = 'vec3' | 'value' | 'number' | 'range' | 'colorFunc' | 'valueFunc' | 'rotationFunc' | 'radian' | 'mesh' | 'particleSystem' | 'boolean' | 'string' | 'geometry' | 'emitterMode' | 'vec3Func';
|
|
1689
|
+
type ParameterType = FieldType | 'self';
|
|
1690
|
+
type ParameterPair = [string, Array<ParameterType>];
|
|
1691
|
+
|
|
1692
|
+
interface EmitterShapePlugin {
|
|
1693
|
+
type: string;
|
|
1694
|
+
constructor: Constructable<EmitterShape>;
|
|
1695
|
+
params: ParameterPair[];
|
|
1696
|
+
loadJSON: (json: any, meta: JsonMetaData) => EmitterShape;
|
|
1697
|
+
}
|
|
1698
|
+
declare const EmitterShapes: {
|
|
1699
|
+
[key: string]: EmitterShapePlugin;
|
|
1700
|
+
};
|
|
1701
|
+
declare function EmitterFromJSON(json: ShapeJSON, meta: JsonMetaData): EmitterShape;
|
|
1702
|
+
|
|
1703
|
+
/**
|
|
1704
|
+
* Interface for particle behaviors.
|
|
1705
|
+
* a behavior is a function that modifies a particle's properties over time.
|
|
1706
|
+
*/
|
|
1707
|
+
interface Behavior {
|
|
1708
|
+
type: string;
|
|
1709
|
+
initialize(particle: Particle, particleSystem: IParticleSystem): void;
|
|
1710
|
+
update(particle: Particle, delta: number): void;
|
|
1711
|
+
frameUpdate(delta: number): void;
|
|
1712
|
+
toJSON(): any;
|
|
1713
|
+
clone(): Behavior;
|
|
1714
|
+
reset(): void;
|
|
1715
|
+
}
|
|
1716
|
+
interface BehaviorPlugin {
|
|
1717
|
+
type: string;
|
|
1718
|
+
constructor: Constructable<Behavior>;
|
|
1719
|
+
params: ParameterPair[];
|
|
1720
|
+
loadJSON: (json: any, particleSystem: IParticleSystem) => Behavior;
|
|
1721
|
+
}
|
|
1722
|
+
declare const BehaviorTypes: {
|
|
1723
|
+
[key: string]: BehaviorPlugin;
|
|
1724
|
+
};
|
|
1725
|
+
declare function BehaviorFromJSON(json: any, particleSystem: IParticleSystem): Behavior | null;
|
|
1726
|
+
|
|
1727
|
+
/**
|
|
1728
|
+
* Color particles by their life.
|
|
1729
|
+
*/
|
|
1730
|
+
declare class ColorOverLife implements Behavior {
|
|
1731
|
+
color: FunctionColorGenerator;
|
|
1732
|
+
type: string;
|
|
1733
|
+
constructor(color: FunctionColorGenerator);
|
|
1734
|
+
initialize(particle: Particle): void;
|
|
1735
|
+
update(particle: Particle, delta: number): void;
|
|
1736
|
+
frameUpdate(delta: number): void;
|
|
1737
|
+
toJSON(): any;
|
|
1738
|
+
static fromJSON(json: any): Behavior;
|
|
1739
|
+
clone(): Behavior;
|
|
1740
|
+
reset(): void;
|
|
1741
|
+
}
|
|
1742
|
+
|
|
1743
|
+
/**
|
|
1744
|
+
* Apply rotation to particles over their life.
|
|
1745
|
+
*/
|
|
1746
|
+
declare class RotationOverLife implements Behavior {
|
|
1747
|
+
angularVelocity: ValueGenerator | FunctionValueGenerator;
|
|
1748
|
+
type: string;
|
|
1749
|
+
constructor(angularVelocity: ValueGenerator | FunctionValueGenerator);
|
|
1750
|
+
initialize(particle: Particle): void;
|
|
1751
|
+
update(particle: Particle, delta: number): void;
|
|
1752
|
+
toJSON(): any;
|
|
1753
|
+
static fromJSON(json: any): Behavior;
|
|
1754
|
+
frameUpdate(delta: number): void;
|
|
1755
|
+
clone(): Behavior;
|
|
1756
|
+
reset(): void;
|
|
1757
|
+
}
|
|
1758
|
+
|
|
1759
|
+
/**
|
|
1760
|
+
* Apply rotation to particles over their life.
|
|
1761
|
+
*/
|
|
1762
|
+
declare class Rotation3DOverLife implements Behavior {
|
|
1763
|
+
angularVelocity: RotationGenerator;
|
|
1764
|
+
type: string;
|
|
1765
|
+
private tempQuat;
|
|
1766
|
+
private tempQuat2;
|
|
1767
|
+
constructor(angularVelocity: RotationGenerator);
|
|
1768
|
+
initialize(particle: Particle): void;
|
|
1769
|
+
update(particle: Particle, delta: number): void;
|
|
1770
|
+
toJSON(): any;
|
|
1771
|
+
static fromJSON(json: any): Behavior;
|
|
1772
|
+
frameUpdate(delta: number): void;
|
|
1773
|
+
clone(): Behavior;
|
|
1774
|
+
reset(): void;
|
|
1775
|
+
}
|
|
1776
|
+
|
|
1777
|
+
/**
|
|
1778
|
+
* Apply a force to particles over their life.
|
|
1779
|
+
*/
|
|
1780
|
+
declare class ForceOverLife implements Behavior {
|
|
1781
|
+
x: FunctionValueGenerator | ValueGenerator;
|
|
1782
|
+
y: FunctionValueGenerator | ValueGenerator;
|
|
1783
|
+
z: FunctionValueGenerator | ValueGenerator;
|
|
1784
|
+
type: string;
|
|
1785
|
+
_temp: Vector3;
|
|
1786
|
+
ps: IParticleSystem;
|
|
1787
|
+
initialize(particle: Particle, particleSystem: IParticleSystem): void;
|
|
1788
|
+
constructor(x: FunctionValueGenerator | ValueGenerator, y: FunctionValueGenerator | ValueGenerator, z: FunctionValueGenerator | ValueGenerator);
|
|
1789
|
+
update(particle: Particle, delta: number): void;
|
|
1790
|
+
toJSON(): any;
|
|
1791
|
+
static fromJSON(json: any): Behavior;
|
|
1792
|
+
_tempScale: Vector3;
|
|
1793
|
+
_tempQ: Quaternion;
|
|
1794
|
+
frameUpdate(delta: number): void;
|
|
1795
|
+
clone(): Behavior;
|
|
1796
|
+
reset(): void;
|
|
1797
|
+
}
|
|
1798
|
+
|
|
1799
|
+
type VelocityOverLifeSpace = 'local' | 'world';
|
|
1800
|
+
/**
|
|
1801
|
+
* Move particles with a direct velocity over their life (Unity's "Velocity over Lifetime").
|
|
1802
|
+
* Applied as a positional displacement, so it is not affected by speed modifiers,
|
|
1803
|
+
* forces, or speed limits. Orbital speeds rotate particles around the emitter axes.
|
|
1804
|
+
*/
|
|
1805
|
+
declare class VelocityOverLife implements Behavior {
|
|
1806
|
+
linearX: FunctionValueGenerator | ValueGenerator;
|
|
1807
|
+
linearY: FunctionValueGenerator | ValueGenerator;
|
|
1808
|
+
linearZ: FunctionValueGenerator | ValueGenerator;
|
|
1809
|
+
orbitalX: FunctionValueGenerator | ValueGenerator;
|
|
1810
|
+
orbitalY: FunctionValueGenerator | ValueGenerator;
|
|
1811
|
+
orbitalZ: FunctionValueGenerator | ValueGenerator;
|
|
1812
|
+
space: VelocityOverLifeSpace;
|
|
1813
|
+
type: string;
|
|
1814
|
+
ps: IParticleSystem;
|
|
1815
|
+
constructor(linearX?: FunctionValueGenerator | ValueGenerator, linearY?: FunctionValueGenerator | ValueGenerator, linearZ?: FunctionValueGenerator | ValueGenerator, orbitalX?: FunctionValueGenerator | ValueGenerator, orbitalY?: FunctionValueGenerator | ValueGenerator, orbitalZ?: FunctionValueGenerator | ValueGenerator, space?: VelocityOverLifeSpace);
|
|
1816
|
+
_temp: Vector3;
|
|
1817
|
+
_tempEmitterPos: Vector3;
|
|
1818
|
+
_tempQ: Quaternion;
|
|
1819
|
+
_tempQInv: Quaternion;
|
|
1820
|
+
_tempScale: Vector3;
|
|
1821
|
+
_tempScaleInv: Vector3;
|
|
1822
|
+
_tempRot: Quaternion;
|
|
1823
|
+
_tempAxis: Vector3;
|
|
1824
|
+
initialize(particle: Particle, particleSystem: IParticleSystem): void;
|
|
1825
|
+
frameUpdate(delta: number): void;
|
|
1826
|
+
update(particle: Particle, delta: number): void;
|
|
1827
|
+
private orbit;
|
|
1828
|
+
toJSON(): any;
|
|
1829
|
+
static fromJSON(json: any): Behavior;
|
|
1830
|
+
clone(): Behavior;
|
|
1831
|
+
reset(): void;
|
|
1832
|
+
}
|
|
1833
|
+
|
|
1834
|
+
type InheritVelocityMode = 'initial' | 'current';
|
|
1835
|
+
/**
|
|
1836
|
+
* Make particles inherit the emitter's movement velocity (Unity's "Inherit Velocity").
|
|
1837
|
+
* 'initial' adds the emitter velocity to the particle velocity once at spawn;
|
|
1838
|
+
* 'current' displaces particles by the current emitter velocity every frame.
|
|
1839
|
+
*/
|
|
1840
|
+
declare class InheritVelocity implements Behavior {
|
|
1841
|
+
multiplier: FunctionValueGenerator | ValueGenerator;
|
|
1842
|
+
mode: InheritVelocityMode;
|
|
1843
|
+
type: string;
|
|
1844
|
+
ps: IParticleSystem;
|
|
1845
|
+
constructor(multiplier?: FunctionValueGenerator | ValueGenerator, mode?: InheritVelocityMode);
|
|
1846
|
+
_temp: Vector3;
|
|
1847
|
+
_tempPos: Vector3;
|
|
1848
|
+
_tempQInv: Quaternion;
|
|
1849
|
+
_tempScaleInv: Vector3;
|
|
1850
|
+
initialize(particle: Particle, particleSystem: IParticleSystem): void;
|
|
1851
|
+
frameUpdate(delta: number): void;
|
|
1852
|
+
update(particle: Particle, delta: number): void;
|
|
1853
|
+
private decomposeInverse;
|
|
1854
|
+
toJSON(): any;
|
|
1855
|
+
static fromJSON(json: any): Behavior;
|
|
1856
|
+
clone(): Behavior;
|
|
1857
|
+
reset(): void;
|
|
1858
|
+
}
|
|
1859
|
+
|
|
1860
|
+
/**
|
|
1861
|
+
* Apply size to particles based on their life.
|
|
1862
|
+
*/
|
|
1863
|
+
declare class SizeOverLife implements Behavior {
|
|
1864
|
+
size: FunctionValueGenerator | Vector3Generator;
|
|
1865
|
+
type: string;
|
|
1866
|
+
initialize(particle: Particle): void;
|
|
1867
|
+
constructor(size: FunctionValueGenerator | Vector3Generator);
|
|
1868
|
+
update(particle: Particle): void;
|
|
1869
|
+
toJSON(): any;
|
|
1870
|
+
static fromJSON(json: any): Behavior;
|
|
1871
|
+
frameUpdate(delta: number): void;
|
|
1872
|
+
clone(): Behavior;
|
|
1873
|
+
reset(): void;
|
|
1874
|
+
}
|
|
1875
|
+
|
|
1876
|
+
/**
|
|
1877
|
+
* Apply speed to particles based on their life.
|
|
1878
|
+
*/
|
|
1879
|
+
declare class SpeedOverLife implements Behavior {
|
|
1880
|
+
speed: FunctionValueGenerator;
|
|
1881
|
+
type: string;
|
|
1882
|
+
initialize(particle: Particle): void;
|
|
1883
|
+
constructor(speed: FunctionValueGenerator);
|
|
1884
|
+
update(particle: Particle): void;
|
|
1885
|
+
toJSON(): any;
|
|
1886
|
+
static fromJSON(json: any): Behavior;
|
|
1887
|
+
frameUpdate(delta: number): void;
|
|
1888
|
+
clone(): Behavior;
|
|
1889
|
+
reset(): void;
|
|
1890
|
+
}
|
|
1891
|
+
|
|
1892
|
+
/**
|
|
1893
|
+
* apply tile number of particle texture by particles' life.
|
|
1894
|
+
*/
|
|
1895
|
+
declare class FrameOverLife implements Behavior {
|
|
1896
|
+
frame: FunctionValueGenerator;
|
|
1897
|
+
type: string;
|
|
1898
|
+
constructor(frame: FunctionValueGenerator);
|
|
1899
|
+
initialize(particle: Particle): void;
|
|
1900
|
+
update(particle: Particle, delta: number): void;
|
|
1901
|
+
frameUpdate(delta: number): void;
|
|
1902
|
+
toJSON(): any;
|
|
1903
|
+
static fromJSON(json: any): Behavior;
|
|
1904
|
+
clone(): Behavior;
|
|
1905
|
+
reset(): void;
|
|
1906
|
+
}
|
|
1907
|
+
|
|
1908
|
+
/**
|
|
1909
|
+
* Orbit particles around an axis over their life.
|
|
1910
|
+
*/
|
|
1911
|
+
declare class OrbitOverLife implements Behavior {
|
|
1912
|
+
orbitSpeed: FunctionValueGenerator | ValueGenerator;
|
|
1913
|
+
axis: Vector3;
|
|
1914
|
+
type: string;
|
|
1915
|
+
rotation: Quaternion;
|
|
1916
|
+
temp: Vector3;
|
|
1917
|
+
constructor(orbitSpeed: FunctionValueGenerator | ValueGenerator, axis?: Vector3);
|
|
1918
|
+
initialize(particle: Particle): void;
|
|
1919
|
+
update(particle: Particle, delta: number): void;
|
|
1920
|
+
frameUpdate(delta: number): void;
|
|
1921
|
+
toJSON(): any;
|
|
1922
|
+
static fromJSON(json: any): Behavior;
|
|
1923
|
+
clone(): Behavior;
|
|
1924
|
+
reset(): void;
|
|
1925
|
+
}
|
|
1926
|
+
|
|
1927
|
+
/**
|
|
1928
|
+
* Apply width to particles based on their length.
|
|
1929
|
+
*/
|
|
1930
|
+
declare class WidthOverLength implements Behavior {
|
|
1931
|
+
width: FunctionValueGenerator;
|
|
1932
|
+
type: string;
|
|
1933
|
+
initialize(particle: Particle): void;
|
|
1934
|
+
constructor(width: FunctionValueGenerator);
|
|
1935
|
+
update(particle: Particle): void;
|
|
1936
|
+
frameUpdate(delta: number): void;
|
|
1937
|
+
toJSON(): any;
|
|
1938
|
+
static fromJSON(json: any): Behavior;
|
|
1939
|
+
clone(): Behavior;
|
|
1940
|
+
reset(): void;
|
|
1941
|
+
}
|
|
1942
|
+
|
|
1943
|
+
/**
|
|
1944
|
+
* Apply a global force to particles.
|
|
1945
|
+
*/
|
|
1946
|
+
declare class ApplyForce implements Behavior {
|
|
1947
|
+
direction: Vector3;
|
|
1948
|
+
magnitude: ValueGenerator;
|
|
1949
|
+
type: string;
|
|
1950
|
+
magnitudeValue: number;
|
|
1951
|
+
memory: {
|
|
1952
|
+
data: never[];
|
|
1953
|
+
dataCount: number;
|
|
1954
|
+
};
|
|
1955
|
+
constructor(direction: Vector3, magnitude: ValueGenerator);
|
|
1956
|
+
initialize(particle: Particle): void;
|
|
1957
|
+
update(particle: Particle, delta: number): void;
|
|
1958
|
+
frameUpdate(delta: number): void;
|
|
1959
|
+
toJSON(): any;
|
|
1960
|
+
static fromJSON(json: any): Behavior;
|
|
1961
|
+
clone(): Behavior;
|
|
1962
|
+
reset(): void;
|
|
1963
|
+
}
|
|
1964
|
+
|
|
1965
|
+
/**
|
|
1966
|
+
* Apply a gravity force to particles.
|
|
1967
|
+
* the gravity force is calculated as:
|
|
1968
|
+
* F = G * m1 * m2 / r^2
|
|
1969
|
+
*/
|
|
1970
|
+
declare class GravityForce implements Behavior {
|
|
1971
|
+
center: Vector3;
|
|
1972
|
+
magnitude: number;
|
|
1973
|
+
type: string;
|
|
1974
|
+
temp: Vector3;
|
|
1975
|
+
constructor(center: Vector3, magnitude: number);
|
|
1976
|
+
initialize(particle: Particle): void;
|
|
1977
|
+
update(particle: Particle, delta: number): void;
|
|
1978
|
+
frameUpdate(delta: number): void;
|
|
1979
|
+
toJSON(): any;
|
|
1980
|
+
static fromJSON(json: any): Behavior;
|
|
1981
|
+
clone(): Behavior;
|
|
1982
|
+
reset(): void;
|
|
1983
|
+
}
|
|
1984
|
+
|
|
1985
|
+
/**
|
|
1986
|
+
* Change the emit direction of particles.
|
|
1987
|
+
*/
|
|
1988
|
+
declare class ChangeEmitDirection implements Behavior {
|
|
1989
|
+
angle: ValueGenerator;
|
|
1990
|
+
type: string;
|
|
1991
|
+
_temp: Vector3;
|
|
1992
|
+
_q: Quaternion;
|
|
1993
|
+
memory: {
|
|
1994
|
+
data: never[];
|
|
1995
|
+
dataCount: number;
|
|
1996
|
+
};
|
|
1997
|
+
constructor(angle: ValueGenerator);
|
|
1998
|
+
initialize(particle: Particle): void;
|
|
1999
|
+
update(particle: Particle, delta: number): void;
|
|
2000
|
+
frameUpdate(delta: number): void;
|
|
2001
|
+
toJSON(): any;
|
|
2002
|
+
static fromJSON(json: any): Behavior;
|
|
2003
|
+
clone(): Behavior;
|
|
2004
|
+
reset(): void;
|
|
2005
|
+
}
|
|
2006
|
+
|
|
2007
|
+
declare enum SubParticleEmitMode {
|
|
2008
|
+
Death = 0,
|
|
2009
|
+
Birth = 1,
|
|
2010
|
+
Frame = 2
|
|
2011
|
+
}
|
|
2012
|
+
/**
|
|
2013
|
+
* Emit a sub particle system from particles.
|
|
2014
|
+
*/
|
|
2015
|
+
declare class EmitSubParticleSystem implements Behavior {
|
|
2016
|
+
private particleSystem;
|
|
2017
|
+
useVelocityAsBasis: boolean;
|
|
2018
|
+
subParticleSystem: IEmitter | undefined;
|
|
2019
|
+
mode: SubParticleEmitMode;
|
|
2020
|
+
emitProbability: number;
|
|
2021
|
+
type: string;
|
|
2022
|
+
private q_;
|
|
2023
|
+
private v_;
|
|
2024
|
+
private v2_;
|
|
2025
|
+
private subEmissions;
|
|
2026
|
+
constructor(particleSystem: IParticleSystem, useVelocityAsBasis: boolean, subParticleSystem: IEmitter | undefined, mode?: SubParticleEmitMode, emitProbability?: number);
|
|
2027
|
+
initialize(particle: Particle): void;
|
|
2028
|
+
update(particle: Particle, delta: number): void;
|
|
2029
|
+
private emit;
|
|
2030
|
+
frameUpdate(delta: number): void;
|
|
2031
|
+
toJSON(): any;
|
|
2032
|
+
static fromJSON(json: any, particleSystem: IParticleSystem): Behavior;
|
|
2033
|
+
clone(): Behavior;
|
|
2034
|
+
reset(): void;
|
|
2035
|
+
private setMatrixFromParticle;
|
|
2036
|
+
}
|
|
2037
|
+
|
|
2038
|
+
/**
|
|
2039
|
+
* A random() function, must return a numer in the interval [0,1), just like Math.random().
|
|
2040
|
+
*/
|
|
2041
|
+
type RandomFn = () => number;
|
|
2042
|
+
/** Deterministic simplex noise generator suitable for 2D, 3D and 4D spaces. */
|
|
2043
|
+
declare class SimplexNoise {
|
|
2044
|
+
private p;
|
|
2045
|
+
private perm;
|
|
2046
|
+
private permMod12;
|
|
2047
|
+
/**
|
|
2048
|
+
* Creates a new `SimplexNoise` instance.
|
|
2049
|
+
* This involves some setup. You can save a few cpu cycles by reusing the same instance.
|
|
2050
|
+
* @param randomOrSeed A random number generator or a seed (string|number).
|
|
2051
|
+
* Defaults to Math.random (random irreproducible initialization).
|
|
2052
|
+
*/
|
|
2053
|
+
constructor(randomOrSeed?: RandomFn | string | number);
|
|
2054
|
+
/**
|
|
2055
|
+
* Samples the noise field in 2 dimensions
|
|
2056
|
+
* @param x
|
|
2057
|
+
* @param y
|
|
2058
|
+
* @returns a number in the interval [-1, 1]
|
|
2059
|
+
*/
|
|
2060
|
+
noise2D(x: number, y: number): number;
|
|
2061
|
+
/**
|
|
2062
|
+
* Samples the noise field in 3 dimensions
|
|
2063
|
+
* @param x
|
|
2064
|
+
* @param y
|
|
2065
|
+
* @param z
|
|
2066
|
+
* @returns a number in the interval [-1, 1]
|
|
2067
|
+
*/
|
|
2068
|
+
noise3D(x: number, y: number, z: number): number;
|
|
2069
|
+
/**
|
|
2070
|
+
* Samples the noise field in 4 dimensions
|
|
2071
|
+
* @param x
|
|
2072
|
+
* @param y
|
|
2073
|
+
* @param z
|
|
2074
|
+
* @returns a number in the interval [-1, 1]
|
|
2075
|
+
*/
|
|
2076
|
+
noise4D(x: number, y: number, z: number, w: number): number;
|
|
2077
|
+
}
|
|
2078
|
+
|
|
2079
|
+
/**
|
|
2080
|
+
* Apply turbulence to particles.
|
|
2081
|
+
*/
|
|
2082
|
+
declare class TurbulenceField implements Behavior {
|
|
2083
|
+
scale: Vector3;
|
|
2084
|
+
octaves: number;
|
|
2085
|
+
velocityMultiplier: Vector3;
|
|
2086
|
+
timeScale: Vector3;
|
|
2087
|
+
type: string;
|
|
2088
|
+
generator: SimplexNoise;
|
|
2089
|
+
timeOffset: Vector3;
|
|
2090
|
+
temp: Vector3;
|
|
2091
|
+
temp2: Vector3;
|
|
2092
|
+
constructor(scale: Vector3, octaves: number, velocityMultiplier: Vector3, timeScale: Vector3);
|
|
2093
|
+
initialize(particle: Particle): void;
|
|
2094
|
+
update(particle: Particle, delta: number): void;
|
|
2095
|
+
toJSON(): any;
|
|
2096
|
+
frameUpdate(delta: number): void;
|
|
2097
|
+
static fromJSON(json: any): Behavior;
|
|
2098
|
+
clone(): Behavior;
|
|
2099
|
+
reset(): void;
|
|
2100
|
+
}
|
|
2101
|
+
|
|
2102
|
+
/**
|
|
2103
|
+
* Apply noise to particles.
|
|
2104
|
+
*/
|
|
2105
|
+
declare class Noise implements Behavior {
|
|
2106
|
+
frequency: FunctionValueGenerator | ValueGenerator;
|
|
2107
|
+
power: FunctionValueGenerator | ValueGenerator;
|
|
2108
|
+
positionAmount: FunctionValueGenerator | ValueGenerator;
|
|
2109
|
+
rotationAmount: FunctionValueGenerator | ValueGenerator;
|
|
2110
|
+
type: string;
|
|
2111
|
+
duration: number;
|
|
2112
|
+
constructor(frequency: FunctionValueGenerator | ValueGenerator, power: FunctionValueGenerator | ValueGenerator, positionAmount?: FunctionValueGenerator | ValueGenerator, rotationAmount?: FunctionValueGenerator | ValueGenerator);
|
|
2113
|
+
initialize(particle: Particle): void;
|
|
2114
|
+
update(particle: Particle, _: number): void;
|
|
2115
|
+
toJSON(): any;
|
|
2116
|
+
frameUpdate(delta: number): void;
|
|
2117
|
+
static fromJSON(json: any): Behavior;
|
|
2118
|
+
clone(): Behavior;
|
|
2119
|
+
reset(): void;
|
|
2120
|
+
}
|
|
2121
|
+
|
|
2122
|
+
interface Sequencer {
|
|
2123
|
+
transform(position: Vector3, index: number): void;
|
|
2124
|
+
toJSON(): any;
|
|
2125
|
+
clone(): Sequencer;
|
|
2126
|
+
}
|
|
2127
|
+
declare function SequencerFromJSON(json: any): Sequencer;
|
|
2128
|
+
|
|
2129
|
+
/**
|
|
2130
|
+
* Apply sequences to particles.
|
|
2131
|
+
* {@link Sequencer}
|
|
2132
|
+
*/
|
|
2133
|
+
declare class ApplySequences implements Behavior {
|
|
2134
|
+
static BEZIER: Bezier;
|
|
2135
|
+
type: string;
|
|
2136
|
+
sequencers: Array<[IntervalValue, Sequencer]>;
|
|
2137
|
+
time: number;
|
|
2138
|
+
index: number;
|
|
2139
|
+
pCount: number;
|
|
2140
|
+
delay: number;
|
|
2141
|
+
tempV: Vector3;
|
|
2142
|
+
constructor(delayBetweenParticles: number);
|
|
2143
|
+
initialize(particle: Particle): void;
|
|
2144
|
+
reset(): void;
|
|
2145
|
+
update(particle: Particle, delta: number): void;
|
|
2146
|
+
frameUpdate(delta: number): void;
|
|
2147
|
+
appendSequencer(range: IntervalValue, sequencer: Sequencer): void;
|
|
2148
|
+
toJSON(): any;
|
|
2149
|
+
static fromJSON(json: any): Behavior;
|
|
2150
|
+
clone(): Behavior;
|
|
2151
|
+
}
|
|
2152
|
+
|
|
2153
|
+
interface PhysicsResolver {
|
|
2154
|
+
resolve(pos: Vector3, normal: Vector3): boolean;
|
|
2155
|
+
}
|
|
2156
|
+
declare function setPhysicsResolver(resolver: PhysicsResolver): void;
|
|
2157
|
+
declare function getPhysicsResolver(): PhysicsResolver;
|
|
2158
|
+
/**
|
|
2159
|
+
* Apply collision to particles from a physics resolver.
|
|
2160
|
+
*/
|
|
2161
|
+
declare class ApplyCollision implements Behavior {
|
|
2162
|
+
resolver: PhysicsResolver;
|
|
2163
|
+
bounce: number;
|
|
2164
|
+
type: string;
|
|
2165
|
+
tempV: Vector3;
|
|
2166
|
+
constructor(resolver: PhysicsResolver, bounce: number);
|
|
2167
|
+
initialize(particle: Particle): void;
|
|
2168
|
+
update(particle: Particle, delta: number): void;
|
|
2169
|
+
frameUpdate(delta: number): void;
|
|
2170
|
+
toJSON(): any;
|
|
2171
|
+
static fromJSON(json: any): Behavior;
|
|
2172
|
+
clone(): Behavior;
|
|
2173
|
+
reset(): void;
|
|
2174
|
+
}
|
|
2175
|
+
|
|
2176
|
+
/**
|
|
2177
|
+
* Color particles by their speed.
|
|
2178
|
+
*/
|
|
2179
|
+
declare class ColorBySpeed implements Behavior {
|
|
2180
|
+
color: FunctionColorGenerator;
|
|
2181
|
+
speedRange: IntervalValue;
|
|
2182
|
+
type: string;
|
|
2183
|
+
constructor(color: FunctionColorGenerator, speedRange: IntervalValue);
|
|
2184
|
+
initialize(particle: Particle): void;
|
|
2185
|
+
update(particle: Particle, delta: number): void;
|
|
2186
|
+
frameUpdate(delta: number): void;
|
|
2187
|
+
toJSON(): any;
|
|
2188
|
+
static fromJSON(json: any): Behavior;
|
|
2189
|
+
clone(): Behavior;
|
|
2190
|
+
reset(): void;
|
|
2191
|
+
}
|
|
2192
|
+
|
|
2193
|
+
/**
|
|
2194
|
+
* Apply size to particles based on their speed.
|
|
2195
|
+
*/
|
|
2196
|
+
declare class SizeBySpeed implements Behavior {
|
|
2197
|
+
size: FunctionValueGenerator | Vector3Generator;
|
|
2198
|
+
speedRange: IntervalValue;
|
|
2199
|
+
type: string;
|
|
2200
|
+
initialize(particle: Particle): void;
|
|
2201
|
+
constructor(size: FunctionValueGenerator | Vector3Generator, speedRange: IntervalValue);
|
|
2202
|
+
update(particle: Particle): void;
|
|
2203
|
+
toJSON(): any;
|
|
2204
|
+
static fromJSON(json: any): Behavior;
|
|
2205
|
+
frameUpdate(delta: number): void;
|
|
2206
|
+
clone(): Behavior;
|
|
2207
|
+
reset(): void;
|
|
2208
|
+
}
|
|
2209
|
+
|
|
2210
|
+
/**
|
|
2211
|
+
* Apply rotation to particles based on their speed.
|
|
2212
|
+
*/
|
|
2213
|
+
declare class RotationBySpeed implements Behavior {
|
|
2214
|
+
angularVelocity: ValueGenerator | FunctionValueGenerator;
|
|
2215
|
+
speedRange: IntervalValue;
|
|
2216
|
+
type: string;
|
|
2217
|
+
private tempQuat;
|
|
2218
|
+
constructor(angularVelocity: ValueGenerator | FunctionValueGenerator, speedRange: IntervalValue);
|
|
2219
|
+
initialize(particle: Particle): void;
|
|
2220
|
+
update(particle: Particle, delta: number): void;
|
|
2221
|
+
toJSON(): any;
|
|
2222
|
+
static fromJSON(json: any): Behavior;
|
|
2223
|
+
frameUpdate(delta: number): void;
|
|
2224
|
+
clone(): Behavior;
|
|
2225
|
+
reset(): void;
|
|
2226
|
+
}
|
|
2227
|
+
|
|
2228
|
+
/**
|
|
2229
|
+
* Limit the speed of particles over their life.
|
|
2230
|
+
*/
|
|
2231
|
+
declare class LimitSpeedOverLife implements Behavior {
|
|
2232
|
+
speed: FunctionValueGenerator;
|
|
2233
|
+
dampen: number;
|
|
2234
|
+
type: string;
|
|
2235
|
+
initialize(particle: Particle): void;
|
|
2236
|
+
constructor(speed: FunctionValueGenerator, dampen: number);
|
|
2237
|
+
update(particle: Particle, delta: number): void;
|
|
2238
|
+
toJSON(): any;
|
|
2239
|
+
static fromJSON(json: any): Behavior;
|
|
2240
|
+
frameUpdate(delta: number): void;
|
|
2241
|
+
clone(): Behavior;
|
|
2242
|
+
reset(): void;
|
|
2243
|
+
}
|
|
2244
|
+
|
|
2245
|
+
declare class TextureSequencer implements Sequencer {
|
|
2246
|
+
scaleX: number;
|
|
2247
|
+
scaleY: number;
|
|
2248
|
+
position: Vector3;
|
|
2249
|
+
locations: Vector2[];
|
|
2250
|
+
constructor(scaleX?: number, scaleY?: number, position?: Vector3);
|
|
2251
|
+
transform(position: Vector3, index: number): void;
|
|
2252
|
+
static fromJSON(json: any): Sequencer;
|
|
2253
|
+
clone(): Sequencer;
|
|
2254
|
+
toJSON(): any;
|
|
2255
|
+
fromImage(img: CanvasImageSource, threshold: number): void;
|
|
2256
|
+
}
|
|
2257
|
+
|
|
2258
|
+
interface Plugin {
|
|
2259
|
+
id: string;
|
|
2260
|
+
initialize: () => void;
|
|
2261
|
+
emitterShapes: Array<EmitterShapePlugin>;
|
|
2262
|
+
behaviors: Array<BehaviorPlugin>;
|
|
2263
|
+
}
|
|
2264
|
+
declare const Plugins: Array<Plugin>;
|
|
2265
|
+
declare function loadPlugin(plugin: Plugin): void;
|
|
2266
|
+
declare function unloadPlugin(pluginId: string): void;
|
|
2267
|
+
|
|
2268
|
+
interface IAnimationData {
|
|
2269
|
+
/** Start time in seconds */
|
|
2270
|
+
startTime: number;
|
|
2271
|
+
/** Duration in seconds */
|
|
2272
|
+
duration: number;
|
|
2273
|
+
/** Target object */
|
|
2274
|
+
target: any;
|
|
2275
|
+
}
|
|
2276
|
+
interface IPrefab {
|
|
2277
|
+
/**
|
|
2278
|
+
* The name of the prefab.
|
|
2279
|
+
*/
|
|
2280
|
+
name: string;
|
|
2281
|
+
/**
|
|
2282
|
+
* The children of the prefab.
|
|
2283
|
+
*/
|
|
2284
|
+
animationData: IAnimationData[];
|
|
2285
|
+
}
|
|
2286
|
+
|
|
2287
|
+
declare enum RenderMode {
|
|
2288
|
+
BillBoard = 0,
|
|
2289
|
+
StretchedBillBoard = 1,
|
|
2290
|
+
Mesh = 2,
|
|
2291
|
+
Trail = 3,
|
|
2292
|
+
HorizontalBillBoard = 4,
|
|
2293
|
+
VerticalBillBoard = 5
|
|
2294
|
+
}
|
|
2295
|
+
interface StoredBatchSettings {
|
|
2296
|
+
instancingGeometry: Float32Array;
|
|
2297
|
+
instancingIndices: Uint32Array | Uint16Array;
|
|
2298
|
+
instancingUVs?: Float32Array;
|
|
2299
|
+
instancingNormals?: Float32Array;
|
|
2300
|
+
renderMode: RenderMode;
|
|
2301
|
+
renderOrder: number;
|
|
2302
|
+
uTileCount: number;
|
|
2303
|
+
vTileCount: number;
|
|
2304
|
+
blendTiles: boolean;
|
|
2305
|
+
softParticles: boolean;
|
|
2306
|
+
softNearFade: number;
|
|
2307
|
+
softFarFade: number;
|
|
2308
|
+
materialBlendMode: number;
|
|
2309
|
+
materialTransparent: boolean;
|
|
2310
|
+
materialDepthTest: boolean;
|
|
2311
|
+
materialDepthWrite: boolean;
|
|
2312
|
+
materialAlphaTest: number;
|
|
2313
|
+
texture: any;
|
|
2314
|
+
layerMask: number;
|
|
2315
|
+
}
|
|
2316
|
+
declare abstract class VFXBatch {
|
|
2317
|
+
mesh: Mesh;
|
|
2318
|
+
systems: Set<IParticleSystem>;
|
|
2319
|
+
settings: StoredBatchSettings;
|
|
2320
|
+
protected maxParticles: number;
|
|
2321
|
+
protected scene: Scene;
|
|
2322
|
+
protected constructor(settings: VFXBatchSettings, scene: Scene);
|
|
2323
|
+
addSystem(system: IParticleSystem): void;
|
|
2324
|
+
removeSystem(system: IParticleSystem): void;
|
|
2325
|
+
getVisibleSystems(): IParticleSystem[];
|
|
2326
|
+
applyDepthTexture(depthTexture: BaseTexture | null): void;
|
|
2327
|
+
abstract setupBuffers(): void;
|
|
2328
|
+
abstract expandBuffers(target: number): void;
|
|
2329
|
+
abstract rebuildMaterial(): void;
|
|
2330
|
+
abstract update(): void;
|
|
2331
|
+
dispose(): void;
|
|
2332
|
+
}
|
|
2333
|
+
|
|
2334
|
+
interface VFXBatchSettings {
|
|
2335
|
+
instancingGeometry: Float32Array;
|
|
2336
|
+
instancingIndices: Uint32Array | Uint16Array;
|
|
2337
|
+
instancingUVs?: Float32Array;
|
|
2338
|
+
instancingNormals?: Float32Array;
|
|
2339
|
+
renderMode: RenderMode;
|
|
2340
|
+
renderOrder: number;
|
|
2341
|
+
uTileCount: number;
|
|
2342
|
+
vTileCount: number;
|
|
2343
|
+
blendTiles: boolean;
|
|
2344
|
+
softParticles: boolean;
|
|
2345
|
+
softNearFade: number;
|
|
2346
|
+
softFarFade: number;
|
|
2347
|
+
materialBlendMode: number;
|
|
2348
|
+
materialTransparent: boolean;
|
|
2349
|
+
materialDepthTest: boolean;
|
|
2350
|
+
materialDepthWrite: boolean;
|
|
2351
|
+
materialAlphaTest: number;
|
|
2352
|
+
texture: Texture | null;
|
|
2353
|
+
layerMask: number;
|
|
2354
|
+
}
|
|
2355
|
+
interface AdaptivePerformanceOptions {
|
|
2356
|
+
targetFrameMs: number;
|
|
2357
|
+
minQuality: number;
|
|
2358
|
+
maxQuality: number;
|
|
2359
|
+
decreaseStep: number;
|
|
2360
|
+
increaseStep: number;
|
|
2361
|
+
}
|
|
2362
|
+
interface AdaptivePerformanceState extends AdaptivePerformanceOptions {
|
|
2363
|
+
enabled: boolean;
|
|
2364
|
+
currentQuality: number;
|
|
2365
|
+
lastFrameCpuMs: number;
|
|
2366
|
+
}
|
|
2367
|
+
declare class BatchedRenderer extends TransformNode {
|
|
2368
|
+
batches: Array<VFXBatch>;
|
|
2369
|
+
systemToBatchIndex: Map<IParticleSystem, number>;
|
|
2370
|
+
depthTexture: BaseTexture | null;
|
|
2371
|
+
private adaptivePerformanceState;
|
|
2372
|
+
private lastAppliedQuality;
|
|
2373
|
+
constructor(name: string, scene: Scene);
|
|
2374
|
+
private static clamp;
|
|
2375
|
+
private static equals;
|
|
2376
|
+
addSystem(system: IParticleSystem): void;
|
|
2377
|
+
deleteSystem(system: IParticleSystem): void;
|
|
2378
|
+
updateSystem(system: IParticleSystem): void;
|
|
2379
|
+
setDepthTexture(depthTexture: BaseTexture | null): void;
|
|
2380
|
+
configureAdaptivePerformance(options?: Partial<AdaptivePerformanceOptions>): void;
|
|
2381
|
+
disableAdaptivePerformance(resetQuality?: boolean): void;
|
|
2382
|
+
getAdaptivePerformanceState(): AdaptivePerformanceState;
|
|
2383
|
+
private applyAdaptiveQuality;
|
|
2384
|
+
update(delta: number): void;
|
|
2385
|
+
dispose(): void;
|
|
2386
|
+
}
|
|
2387
|
+
|
|
2388
|
+
declare const BatchedParticleRenderer: typeof BatchedRenderer;
|
|
2389
|
+
|
|
2390
|
+
declare class SpriteBatch extends VFXBatch {
|
|
2391
|
+
private offsetBuffer;
|
|
2392
|
+
private rotationBuffer;
|
|
2393
|
+
private sizeBuffer;
|
|
2394
|
+
private colorBuffer;
|
|
2395
|
+
private uvTileBuffer;
|
|
2396
|
+
private velocityBuffer?;
|
|
2397
|
+
private offsetVB;
|
|
2398
|
+
private rotationVB;
|
|
2399
|
+
private sizeVB;
|
|
2400
|
+
private colorVB;
|
|
2401
|
+
private uvTileVB;
|
|
2402
|
+
private velocityVB?;
|
|
2403
|
+
constructor(settings: VFXBatchSettings, scene: Scene);
|
|
2404
|
+
setupBuffers(): void;
|
|
2405
|
+
private buildExpandableBuffers;
|
|
2406
|
+
expandBuffers(target: number): void;
|
|
2407
|
+
rebuildMaterial(): void;
|
|
2408
|
+
private vector_;
|
|
2409
|
+
private vector2_;
|
|
2410
|
+
private vector3_;
|
|
2411
|
+
private quaternion_;
|
|
2412
|
+
private quaternion2_;
|
|
2413
|
+
private quaternion3_;
|
|
2414
|
+
private rotationMat_;
|
|
2415
|
+
private rotationMat2_;
|
|
2416
|
+
private lastStretchedSpeedFactor;
|
|
2417
|
+
update(): void;
|
|
2418
|
+
dispose(): void;
|
|
2419
|
+
}
|
|
2420
|
+
|
|
2421
|
+
declare class TrailBatch extends VFXBatch {
|
|
2422
|
+
private positionBuffer;
|
|
2423
|
+
private previousBuffer;
|
|
2424
|
+
private nextBuffer;
|
|
2425
|
+
private uvBuffer;
|
|
2426
|
+
private sideBuffer;
|
|
2427
|
+
private widthBuffer;
|
|
2428
|
+
private colorBuffer;
|
|
2429
|
+
private indexBuffer;
|
|
2430
|
+
private previousVB;
|
|
2431
|
+
private nextVB;
|
|
2432
|
+
private sideVB;
|
|
2433
|
+
private widthVB;
|
|
2434
|
+
private getTrailHistoryCount;
|
|
2435
|
+
constructor(settings: VFXBatchSettings, scene: Scene);
|
|
2436
|
+
setupBuffers(): void;
|
|
2437
|
+
private buildGeometryBuffers;
|
|
2438
|
+
expandBuffers(target: number): void;
|
|
2439
|
+
rebuildMaterial(): void;
|
|
2440
|
+
private vector_;
|
|
2441
|
+
private vector2_;
|
|
2442
|
+
private vector3_;
|
|
2443
|
+
private quaternion_;
|
|
2444
|
+
update(): void;
|
|
2445
|
+
dispose(): void;
|
|
2446
|
+
}
|
|
2447
|
+
|
|
2448
|
+
declare class ParticleEmitter extends TransformNode {
|
|
2449
|
+
system: IParticleSystem;
|
|
2450
|
+
private _matrixWorld;
|
|
2451
|
+
get matrixWorld(): Matrix4;
|
|
2452
|
+
get visible(): boolean;
|
|
2453
|
+
set visible(value: boolean);
|
|
2454
|
+
get uuid(): string;
|
|
2455
|
+
constructor(system: IParticleSystem, scene?: Scene);
|
|
2456
|
+
dispose(): void;
|
|
2457
|
+
extractFromCache(cache: any): any[];
|
|
2458
|
+
clone(name?: string): ParticleEmitter;
|
|
2459
|
+
toJSON(meta?: any, options?: SerializationOptions): any;
|
|
2460
|
+
}
|
|
2461
|
+
|
|
2462
|
+
interface BurstParameters {
|
|
2463
|
+
time: number;
|
|
2464
|
+
count: ValueGenerator | FunctionValueGenerator;
|
|
2465
|
+
cycle: number;
|
|
2466
|
+
interval: number;
|
|
2467
|
+
probability: number;
|
|
2468
|
+
}
|
|
2469
|
+
interface ParticleSystemParameters {
|
|
2470
|
+
autoDestroy?: boolean;
|
|
2471
|
+
looping?: boolean;
|
|
2472
|
+
prewarm?: boolean;
|
|
2473
|
+
duration?: number;
|
|
2474
|
+
startDelay?: ValueGenerator | FunctionValueGenerator;
|
|
2475
|
+
shape?: EmitterShape;
|
|
2476
|
+
startLife?: ValueGenerator | FunctionValueGenerator;
|
|
2477
|
+
startSpeed?: ValueGenerator | FunctionValueGenerator;
|
|
2478
|
+
startRotation?: ValueGenerator | FunctionValueGenerator | RotationGenerator;
|
|
2479
|
+
startSize?: ValueGenerator | FunctionValueGenerator | Vector3Generator;
|
|
2480
|
+
startLength?: ValueGenerator | FunctionValueGenerator;
|
|
2481
|
+
startColor?: ColorGenerator | FunctionColorGenerator;
|
|
2482
|
+
emissionOverTime?: ValueGenerator | FunctionValueGenerator;
|
|
2483
|
+
emissionOverDistance?: ValueGenerator | FunctionValueGenerator;
|
|
2484
|
+
emissionBursts?: Array<BurstParameters>;
|
|
2485
|
+
onlyUsedByOther?: boolean;
|
|
2486
|
+
behaviors?: Array<Behavior>;
|
|
2487
|
+
instancingGeometry?: Float32Array;
|
|
2488
|
+
instancingIndices?: Uint32Array | Uint16Array;
|
|
2489
|
+
instancingUVs?: Float32Array;
|
|
2490
|
+
instancingNormals?: Float32Array;
|
|
2491
|
+
renderMode?: RenderMode;
|
|
2492
|
+
rendererEmitterSettings?: RendererEmitterSettings;
|
|
2493
|
+
speedFactor?: number;
|
|
2494
|
+
material?: any;
|
|
2495
|
+
texture?: Texture | null;
|
|
2496
|
+
startTileIndex?: ValueGenerator;
|
|
2497
|
+
uTileCount?: number;
|
|
2498
|
+
vTileCount?: number;
|
|
2499
|
+
blendTiles?: boolean;
|
|
2500
|
+
softParticles?: boolean;
|
|
2501
|
+
softFarFade?: number;
|
|
2502
|
+
softNearFade?: number;
|
|
2503
|
+
renderOrder?: number;
|
|
2504
|
+
worldSpace?: boolean;
|
|
2505
|
+
blendMode?: number;
|
|
2506
|
+
transparent?: boolean;
|
|
2507
|
+
depthTest?: boolean;
|
|
2508
|
+
depthWrite?: boolean;
|
|
2509
|
+
alphaTest?: number;
|
|
2510
|
+
layerMask?: number;
|
|
2511
|
+
scene?: Scene;
|
|
2512
|
+
}
|
|
2513
|
+
interface BurstParametersJSON {
|
|
2514
|
+
time: number;
|
|
2515
|
+
count: FunctionJSON | number;
|
|
2516
|
+
cycle: number;
|
|
2517
|
+
interval: number;
|
|
2518
|
+
probability: number;
|
|
2519
|
+
}
|
|
2520
|
+
interface ParticleSystemJSONParameters {
|
|
2521
|
+
version: string;
|
|
2522
|
+
autoDestroy: boolean;
|
|
2523
|
+
looping: boolean;
|
|
2524
|
+
prewarm: boolean;
|
|
2525
|
+
duration: number;
|
|
2526
|
+
startDelay?: FunctionJSON;
|
|
2527
|
+
shape: any;
|
|
2528
|
+
startLife: FunctionJSON;
|
|
2529
|
+
startSpeed: FunctionJSON;
|
|
2530
|
+
startRotation: FunctionJSON;
|
|
2531
|
+
startSize: FunctionJSON;
|
|
2532
|
+
startColor: FunctionJSON;
|
|
2533
|
+
emissionOverTime: FunctionJSON;
|
|
2534
|
+
emissionOverDistance: FunctionJSON;
|
|
2535
|
+
emissionBursts?: Array<BurstParametersJSON>;
|
|
2536
|
+
onlyUsedByOther: boolean;
|
|
2537
|
+
rendererEmitterSettings: RendererEmitterSettings;
|
|
2538
|
+
instancingGeometry?: any;
|
|
2539
|
+
renderMode: number;
|
|
2540
|
+
renderOrder?: number;
|
|
2541
|
+
speedFactor?: number;
|
|
2542
|
+
texture?: string;
|
|
2543
|
+
material?: string;
|
|
2544
|
+
layers?: number;
|
|
2545
|
+
startTileIndex: FunctionJSON | number;
|
|
2546
|
+
uTileCount: number;
|
|
2547
|
+
vTileCount: number;
|
|
2548
|
+
blendTiles?: boolean;
|
|
2549
|
+
softParticles?: boolean;
|
|
2550
|
+
softFarFade?: number;
|
|
2551
|
+
softNearFade?: number;
|
|
2552
|
+
blending?: number;
|
|
2553
|
+
transparent?: boolean;
|
|
2554
|
+
depthTest?: boolean;
|
|
2555
|
+
depthWrite?: boolean;
|
|
2556
|
+
alphaTest?: number;
|
|
2557
|
+
behaviors: Array<any>;
|
|
2558
|
+
worldSpace: boolean;
|
|
2559
|
+
}
|
|
2560
|
+
interface BabylonMetaData {
|
|
2561
|
+
textures: {
|
|
2562
|
+
[uuid: string]: Texture | null;
|
|
2563
|
+
};
|
|
2564
|
+
materials: {
|
|
2565
|
+
[uuid: string]: any;
|
|
2566
|
+
};
|
|
2567
|
+
geometries: {
|
|
2568
|
+
[uuid: string]: any;
|
|
2569
|
+
};
|
|
2570
|
+
images?: {
|
|
2571
|
+
[uuid: string]: any;
|
|
2572
|
+
};
|
|
2573
|
+
shapes?: {
|
|
2574
|
+
[uuid: string]: any;
|
|
2575
|
+
};
|
|
2576
|
+
skeletons?: {
|
|
2577
|
+
[uuid: string]: any;
|
|
2578
|
+
};
|
|
2579
|
+
animations?: {
|
|
2580
|
+
[uuid: string]: any;
|
|
2581
|
+
};
|
|
2582
|
+
nodes?: {
|
|
2583
|
+
[uuid: string]: any;
|
|
2584
|
+
};
|
|
2585
|
+
}
|
|
2586
|
+
declare class ParticleSystem implements IParticleSystem {
|
|
2587
|
+
private static serializationCounter;
|
|
2588
|
+
autoDestroy: boolean;
|
|
2589
|
+
prewarm: boolean;
|
|
2590
|
+
looping: boolean;
|
|
2591
|
+
duration: number;
|
|
2592
|
+
startDelay: ValueGenerator | FunctionValueGenerator;
|
|
2593
|
+
startLife: ValueGenerator | FunctionValueGenerator;
|
|
2594
|
+
startSpeed: ValueGenerator | FunctionValueGenerator;
|
|
2595
|
+
startRotation: ValueGenerator | FunctionValueGenerator | RotationGenerator;
|
|
2596
|
+
startSize: ValueGenerator | FunctionValueGenerator | Vector3Generator;
|
|
2597
|
+
startColor: ColorGenerator | FunctionColorGenerator;
|
|
2598
|
+
startTileIndex: ValueGenerator;
|
|
2599
|
+
rendererEmitterSettings: RendererEmitterSettings;
|
|
2600
|
+
emissionOverTime: ValueGenerator | FunctionValueGenerator;
|
|
2601
|
+
emissionOverDistance: ValueGenerator | FunctionValueGenerator;
|
|
2602
|
+
emissionBursts: Array<BurstParameters>;
|
|
2603
|
+
onlyUsedByOther: boolean;
|
|
2604
|
+
worldSpace: boolean;
|
|
2605
|
+
particleNum: number;
|
|
2606
|
+
paused: boolean;
|
|
2607
|
+
particles: Array<Particle>;
|
|
2608
|
+
emitterShape: EmitterShape;
|
|
2609
|
+
emitter: ParticleEmitter;
|
|
2610
|
+
rendererSettings: VFXBatchSettings;
|
|
2611
|
+
neededToUpdateRender: boolean;
|
|
2612
|
+
behaviors: Array<Behavior>;
|
|
2613
|
+
emissionState: EmissionState;
|
|
2614
|
+
emitterVelocity: Vector3;
|
|
2615
|
+
private prewarmed;
|
|
2616
|
+
private emitEnded;
|
|
2617
|
+
private markForDestroy;
|
|
2618
|
+
private startDelayTimeLeft;
|
|
2619
|
+
private previousEmitterPos?;
|
|
2620
|
+
private tempEmitterPos;
|
|
2621
|
+
private temp;
|
|
2622
|
+
private normalMatrix;
|
|
2623
|
+
private memory;
|
|
2624
|
+
private listeners;
|
|
2625
|
+
private readonly layerMaskProxy;
|
|
2626
|
+
private materialRef;
|
|
2627
|
+
private qualityFactor;
|
|
2628
|
+
private useFastTrailHistory;
|
|
2629
|
+
/** @internal **/
|
|
2630
|
+
_renderer?: BatchedRenderer;
|
|
2631
|
+
set time(time: number);
|
|
2632
|
+
get time(): number;
|
|
2633
|
+
get layers(): {
|
|
2634
|
+
mask: number;
|
|
2635
|
+
};
|
|
2636
|
+
get texture(): Texture | null;
|
|
2637
|
+
set texture(texture: Texture | null);
|
|
2638
|
+
get material(): any;
|
|
2639
|
+
set material(material: any);
|
|
2640
|
+
get uTileCount(): number;
|
|
2641
|
+
set uTileCount(u: number);
|
|
2642
|
+
get vTileCount(): number;
|
|
2643
|
+
set vTileCount(v: number);
|
|
2644
|
+
get blendTiles(): boolean;
|
|
2645
|
+
set blendTiles(v: boolean);
|
|
2646
|
+
get softParticles(): boolean;
|
|
2647
|
+
set softParticles(v: boolean);
|
|
2648
|
+
get softNearFade(): number;
|
|
2649
|
+
set softNearFade(v: number);
|
|
2650
|
+
get softFarFade(): number;
|
|
2651
|
+
set softFarFade(v: number);
|
|
2652
|
+
get instancingGeometry(): Float32Array;
|
|
2653
|
+
set instancingGeometry(geometry: Float32Array);
|
|
2654
|
+
get blending(): number;
|
|
2655
|
+
set blending(blending: number);
|
|
2656
|
+
get renderMode(): RenderMode;
|
|
2657
|
+
set renderMode(renderMode: RenderMode);
|
|
2658
|
+
get renderOrder(): number;
|
|
2659
|
+
set renderOrder(renderOrder: number);
|
|
2660
|
+
constructor(parameters: ParticleSystemParameters);
|
|
2661
|
+
private applyMaterialSettings;
|
|
2662
|
+
pause(): void;
|
|
2663
|
+
play(): void;
|
|
2664
|
+
stop(): void;
|
|
2665
|
+
private refreshTrailHistoryMode;
|
|
2666
|
+
private ensureTrailHistoryCapacity;
|
|
2667
|
+
private resetTrailHistory;
|
|
2668
|
+
private getTrailHistoryCount;
|
|
2669
|
+
private updateFastTrailHistory;
|
|
2670
|
+
setQualityFactor(qualityFactor: number): void;
|
|
2671
|
+
private spawn;
|
|
2672
|
+
endEmit(): void;
|
|
2673
|
+
dispose(): void;
|
|
2674
|
+
restart(): void;
|
|
2675
|
+
private firstTimeUpdate;
|
|
2676
|
+
/** @internal */
|
|
2677
|
+
update(delta: number): void;
|
|
2678
|
+
emit(delta: number, emissionState: EmissionState, emitterMatrix: Matrix4): void;
|
|
2679
|
+
toJSON(metaData?: BabylonMetaData | string, _options?: SerializationOptions): ParticleSystemJSONParameters;
|
|
2680
|
+
static fromJSON(json: ParticleSystemJSONParameters, meta: BabylonMetaData, dependencies?: {
|
|
2681
|
+
[uuid: string]: Behavior;
|
|
2682
|
+
}, scene?: Scene): ParticleSystem;
|
|
2683
|
+
private static nextSerializationId;
|
|
2684
|
+
private static createFallbackNormals;
|
|
2685
|
+
private toRendererSettingsJSON;
|
|
2686
|
+
private ensureGeometryMeta;
|
|
2687
|
+
private ensureMaterialMeta;
|
|
2688
|
+
private static resolveGeometryData;
|
|
2689
|
+
addBehavior(behavior: Behavior): void;
|
|
2690
|
+
getRendererSettings(): VFXBatchSettings;
|
|
2691
|
+
addEventListener(event: ParticleSystemEventType, callback: (event: ParticleSystemEvent) => void): void;
|
|
2692
|
+
removeAllEventListeners(event: ParticleSystemEventType): void;
|
|
2693
|
+
removeEventListener(event: ParticleSystemEventType, callback: (event: ParticleSystemEvent) => void): void;
|
|
2694
|
+
private fire;
|
|
2695
|
+
clone(): ParticleSystem;
|
|
2696
|
+
}
|
|
2697
|
+
|
|
2698
|
+
declare class QuarksUtil {
|
|
2699
|
+
static runOnAllParticleEmitters(root: Node, callback: (emitter: ParticleEmitter) => void): void;
|
|
2700
|
+
static addToBatchRenderer(root: Node, batchRenderer: BatchedRenderer): void;
|
|
2701
|
+
static play(root: Node): void;
|
|
2702
|
+
static stop(root: Node): void;
|
|
2703
|
+
static pause(root: Node): void;
|
|
2704
|
+
static restart(root: Node): void;
|
|
2705
|
+
static setAutoDestroy(root: Node, autoDestroy: boolean): void;
|
|
2706
|
+
static endEmit(root: Node): void;
|
|
2707
|
+
private static traverseNode;
|
|
2708
|
+
}
|
|
2709
|
+
|
|
2710
|
+
interface QuarksLoaderOptions {
|
|
2711
|
+
baseUrl?: string;
|
|
2712
|
+
}
|
|
2713
|
+
declare class QuarksLoader {
|
|
2714
|
+
private scene;
|
|
2715
|
+
private options;
|
|
2716
|
+
constructor(scene: Scene, options?: QuarksLoaderOptions);
|
|
2717
|
+
load(url: string): Promise<TransformNode>;
|
|
2718
|
+
parse(json: any, baseUrl?: string): TransformNode;
|
|
2719
|
+
private parseGeometries;
|
|
2720
|
+
private parseSphereGeometry;
|
|
2721
|
+
private parseBufferGeometry;
|
|
2722
|
+
private extractInterleavedAttribute;
|
|
2723
|
+
private int32ArrayToFloat32;
|
|
2724
|
+
private parseImages;
|
|
2725
|
+
private parseTextures;
|
|
2726
|
+
private mapWrapMode;
|
|
2727
|
+
private parseMaterials;
|
|
2728
|
+
private getGeometry;
|
|
2729
|
+
private getMaterial;
|
|
2730
|
+
private createPlaceholderNode;
|
|
2731
|
+
private createMeshNode;
|
|
2732
|
+
private parseObject;
|
|
2733
|
+
private parseParticleSystem;
|
|
2734
|
+
private linkReferences;
|
|
2735
|
+
}
|
|
2736
|
+
|
|
2737
|
+
interface QuarksTimelineClip {
|
|
2738
|
+
uuid?: string;
|
|
2739
|
+
duration?: number;
|
|
2740
|
+
play?: () => void;
|
|
2741
|
+
pause?: () => void;
|
|
2742
|
+
stop?: () => void;
|
|
2743
|
+
setTime?: (time: number) => void;
|
|
2744
|
+
}
|
|
2745
|
+
interface AnimationData extends IAnimationData {
|
|
2746
|
+
type: 'three' | 'ps';
|
|
2747
|
+
target: TransformNode;
|
|
2748
|
+
loop: boolean;
|
|
2749
|
+
clip?: QuarksTimelineClip;
|
|
2750
|
+
clipUUID?: string;
|
|
2751
|
+
}
|
|
2752
|
+
declare class QuarksPrefab extends TransformNode implements IPrefab {
|
|
2753
|
+
type: string;
|
|
2754
|
+
animationData: Array<AnimationData>;
|
|
2755
|
+
isPlaying: boolean;
|
|
2756
|
+
currentTime: number;
|
|
2757
|
+
timeScale: number;
|
|
2758
|
+
duration: number;
|
|
2759
|
+
private _lastUpdateTimeMs;
|
|
2760
|
+
private _batchedRenderer?;
|
|
2761
|
+
private _tempAnimationJSON;
|
|
2762
|
+
constructor(name?: string, scene?: Scene);
|
|
2763
|
+
registerBatchedRenderer(renderer: BatchedRenderer): void;
|
|
2764
|
+
addParticleSystemAnimation(emitter: ParticleEmitter, startTime?: number, duration?: number, loop?: boolean): AnimationData;
|
|
2765
|
+
addThreeAnimation(target: TransformNode, clip?: QuarksTimelineClip, startTime?: number, duration?: number, loop?: boolean, clipUUID?: string): AnimationData;
|
|
2766
|
+
removeAnimation(index: number): void;
|
|
2767
|
+
play(): void;
|
|
2768
|
+
pause(): void;
|
|
2769
|
+
stop(): void;
|
|
2770
|
+
update(forceDelta?: number): void;
|
|
2771
|
+
setTime(time: number): void;
|
|
2772
|
+
getDuration(): number;
|
|
2773
|
+
resolveReferences(root: TransformNode): void;
|
|
2774
|
+
toJSON(): any;
|
|
2775
|
+
static fromJSON(json: any, scene?: Scene): QuarksPrefab;
|
|
2776
|
+
private resolveTimelineClip;
|
|
2777
|
+
private updateDuration;
|
|
2778
|
+
}
|
|
2779
|
+
|
|
2780
|
+
declare class MeshSurfaceEmitter implements EmitterShape {
|
|
2781
|
+
type: string;
|
|
2782
|
+
private _triangleIndexToArea;
|
|
2783
|
+
private _mesh?;
|
|
2784
|
+
private _positions?;
|
|
2785
|
+
private _indices?;
|
|
2786
|
+
private _meshReferenceId?;
|
|
2787
|
+
get mesh(): Mesh | undefined;
|
|
2788
|
+
set mesh(mesh: Mesh | undefined);
|
|
2789
|
+
constructor(mesh?: Mesh, meshReferenceId?: string);
|
|
2790
|
+
initialize(p: Particle): void;
|
|
2791
|
+
toJSON(): ShapeJSON;
|
|
2792
|
+
static fromJSON(json: any): MeshSurfaceEmitter;
|
|
2793
|
+
clone(): EmitterShape;
|
|
2794
|
+
update(_system: IParticleSystem, _delta: number): void;
|
|
2795
|
+
}
|
|
2796
|
+
declare const MeshSurfaceEmitterPlugin: Plugin;
|
|
2797
|
+
|
|
2798
|
+
declare function registerShaderChunks(): void;
|
|
2799
|
+
declare function getShaderChunk(chunkName: string): string | undefined;
|
|
2800
|
+
declare function getRegisteredShaderChunks(): Readonly<Record<string, string>>;
|
|
2801
|
+
|
|
2802
|
+
declare const _default$7: "\n// Per-vertex attributes\nattribute vec3 position;\nattribute vec2 uv;\n\n// Per-instance attributes\nattribute vec3 offset;\nattribute vec4 color;\nattribute vec3 size;\nattribute float rotation;\nattribute float uvTile;\n\n// Uniforms\nuniform mat4 world;\nuniform mat4 view;\nuniform mat4 projection;\nuniform mat4 worldViewProjection;\n\n#ifdef UV_TILE\nuniform float tileCountX;\nuniform float tileCountY;\n#endif\n\n// Varyings\nvarying vec2 vUV;\nvarying vec4 vColor;\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n#ifdef SOFT_PARTICLES\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\nvoid main() {\n float c = cos(rotation);\n float s = sin(rotation);\n\n vec2 alignedPosition = position.xy * size.xy;\n vec2 rotatedPosition;\n rotatedPosition.x = c * alignedPosition.x - s * alignedPosition.y;\n rotatedPosition.y = s * alignedPosition.x + c * alignedPosition.y;\n\n#ifdef HORIZONTAL\n vec4 mvPosition = world * vec4(offset, 1.0);\n mvPosition.x += rotatedPosition.x;\n mvPosition.z -= rotatedPosition.y;\n mvPosition = view * mvPosition;\n#elif defined(VERTICAL)\n vec4 mvPosition = world * vec4(offset, 1.0);\n mvPosition.y += rotatedPosition.y;\n mvPosition = view * mvPosition;\n mvPosition.x += rotatedPosition.x;\n#else\n vec4 mvPosition = view * world * vec4(offset, 1.0);\n mvPosition.xy += rotatedPosition;\n#endif\n\n gl_Position = projection * mvPosition;\n#ifdef SOFT_PARTICLES\n projPosition = gl_Position;\n linearDepth = -mvPosition.z;\n#endif\n\n #ifdef UV_TILE\n vec2 tc = vec2(tileCountX, tileCountY);\n float baseTile = floor(uvTile);\n float tileU = mod(baseTile, tc.x) / tc.x;\n float tileV = 1.0 - floor(baseTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV = uv / tc + vec2(tileU, tileV);\n #ifdef TILE_BLEND\n float nextTile = ceil(uvTile);\n float nextU = mod(nextTile, tc.x) / tc.x;\n float nextV = 1.0 - floor(nextTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV2 = uv / tc + vec2(nextU, nextV);\n vTileBlend = fract(uvTile);\n #endif\n #else\n vUV = uv;\n #endif\n\n vColor = color;\n}\n";
|
|
2803
|
+
|
|
2804
|
+
declare const _default$6: "\nvarying vec2 vUV;\nvarying vec4 vColor;\n\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n\n#ifdef USE_MAP\nuniform sampler2D map;\n#endif\n\n#ifdef SOFT_PARTICLES\nuniform sampler2D depthTexture;\nuniform vec2 softParams;\nuniform vec4 projParams;\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\n#ifdef USE_ALPHATEST\nuniform float alphaTest;\n#endif\n\nvoid main() {\n vec4 baseColor = vColor;\n\n#ifdef USE_MAP\n vec4 texColor = texture2D(map, vUV);\n #ifdef TILE_BLEND\n vec4 texColor2 = texture2D(map, vUV2);\n texColor = mix(texColor, texColor2, vTileBlend);\n #endif\n baseColor *= texColor;\n#endif\n\n#ifdef USE_COLOR_AS_ALPHA\n baseColor.a *= (baseColor.r + baseColor.g + baseColor.b) / 3.0;\n#endif\n\n#ifdef USE_ALPHATEST\n if (baseColor.a < alphaTest) discard;\n#else\n if (baseColor.a < 0.01) discard;\n#endif\n\n gl_FragColor = baseColor;\n\n#ifdef SOFT_PARTICLES\n vec2 p2 = projPosition.xy / projPosition.w;\n p2 = 0.5 * p2 + 0.5;\n float readDepth = texture2D(depthTexture, p2.xy).r;\n float zNear = projParams.x;\n float zFar = projParams.y;\n float viewDepth = (zFar * zNear) / (zFar - readDepth * (zFar - zNear));\n float fade = clamp(softParams.y * ((viewDepth - softParams.x) - linearDepth), 0.0, 1.0);\n gl_FragColor *= fade;\n#endif\n}\n";
|
|
2805
|
+
|
|
2806
|
+
declare const _default$5: "\n// Per-vertex attributes\nattribute vec3 position;\nattribute vec2 uv;\n\n// Per-instance attributes\nattribute vec3 offset;\nattribute vec4 color;\nattribute vec3 size;\nattribute vec4 rotation;\nattribute float uvTile;\n\n// Uniforms\nuniform mat4 worldViewProjection;\n\n#ifdef UV_TILE\nuniform float tileCountX;\nuniform float tileCountY;\n#endif\n\n// Varyings\nvarying vec2 vUV;\nvarying vec4 vColor;\n\nvec3 applyQuaternion(vec3 v, vec4 q) {\n vec3 qVec = q.xyz;\n float qW = q.w;\n vec3 t = 2.0 * cross(qVec, v);\n return v + qW * t + cross(qVec, t);\n}\n\nvoid main() {\n vec3 rotatedPosition = applyQuaternion(position * size, rotation);\n vec3 worldPos = rotatedPosition + offset;\n\n gl_Position = worldViewProjection * vec4(worldPos, 1.0);\n\n #ifdef UV_TILE\n vec2 tc = vec2(tileCountX, tileCountY);\n float baseTile = floor(uvTile);\n float tileU = mod(baseTile, tc.x) / tc.x;\n float tileV = 1.0 - floor(baseTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV = uv / tc + vec2(tileU, tileV);\n #else\n vUV = uv;\n #endif\n\n vColor = color;\n}\n";
|
|
2807
|
+
|
|
2808
|
+
declare const _default$4: "\nattribute vec3 position;\nattribute vec2 uv;\nattribute vec3 normal;\nattribute vec3 offset;\nattribute vec4 color;\nattribute vec3 size;\nattribute vec4 rotation;\nattribute float uvTile;\n\nuniform mat4 world;\nuniform mat4 view;\nuniform mat4 projection;\n\n#ifdef UV_TILE\nuniform float tileCountX;\nuniform float tileCountY;\n#endif\n\nvarying vec2 vUV;\nvarying vec4 vColor;\nvarying vec3 vNormal;\nvarying vec3 vWorldPos;\n\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n\n#ifdef SOFT_PARTICLES\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\nvec3 applyQuaternion(vec3 v, vec4 q) {\n vec3 qVec = q.xyz;\n float qW = q.w;\n vec3 t = 2.0 * cross(qVec, v);\n return v + qW * t + cross(qVec, t);\n}\n\nvoid main() {\n vec3 scaledPosition = position * size;\n vec3 rotatedPosition = applyQuaternion(scaledPosition, rotation);\n vec3 rotatedNormal = normalize(applyQuaternion(normal, rotation));\n vec3 localPos = rotatedPosition + offset;\n\n vec4 worldPos = world * vec4(localPos, 1.0);\n vec4 viewPos = view * worldPos;\n gl_Position = projection * viewPos;\n\n vWorldPos = worldPos.xyz;\n vNormal = normalize((world * vec4(rotatedNormal, 0.0)).xyz);\n\n#ifdef SOFT_PARTICLES\n projPosition = gl_Position;\n linearDepth = -viewPos.z;\n#endif\n\n#ifdef UV_TILE\n vec2 tc = vec2(tileCountX, tileCountY);\n float baseTile = floor(uvTile);\n float tileU = mod(baseTile, tc.x) / tc.x;\n float tileV = 1.0 - floor(baseTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV = uv / tc + vec2(tileU, tileV);\n #ifdef TILE_BLEND\n float nextTile = ceil(uvTile);\n float nextU = mod(nextTile, tc.x) / tc.x;\n float nextV = 1.0 - floor(nextTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV2 = uv / tc + vec2(nextU, nextV);\n vTileBlend = fract(uvTile);\n #endif\n#else\n vUV = uv;\n#endif\n\n vColor = color;\n}\n";
|
|
2809
|
+
|
|
2810
|
+
declare const _default$3: "\nvarying vec2 vUV;\nvarying vec4 vColor;\nvarying vec3 vNormal;\n\nuniform vec3 lightDirection;\nuniform vec3 lightColor;\nuniform vec3 ambientColor;\n\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n\n#ifdef USE_MAP\nuniform sampler2D map;\n#endif\n\n#ifdef SOFT_PARTICLES\nuniform sampler2D depthTexture;\nuniform vec2 softParams;\nuniform vec4 projParams;\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\n#ifdef USE_ALPHATEST\nuniform float alphaTest;\n#endif\n\nvoid main() {\n vec4 baseColor = vColor;\n\n#ifdef USE_MAP\n vec4 texColor = texture2D(map, vUV);\n #ifdef TILE_BLEND\n vec4 texColor2 = texture2D(map, vUV2);\n texColor = mix(texColor, texColor2, vTileBlend);\n #endif\n baseColor *= texColor;\n#endif\n\n#ifdef USE_ALPHATEST\n if (baseColor.a < alphaTest) discard;\n#else\n if (baseColor.a < 0.01) discard;\n#endif\n\n vec3 N = normalize(vNormal);\n vec3 L = normalize(-lightDirection);\n float NdotL = max(dot(N, L), 0.0);\n vec3 litColor = ambientColor + lightColor * NdotL;\n\n gl_FragColor = vec4(baseColor.rgb * litColor, baseColor.a);\n\n#ifdef SOFT_PARTICLES\n vec2 p2 = projPosition.xy / projPosition.w;\n p2 = 0.5 * p2 + 0.5;\n float readDepth = texture2D(depthTexture, p2.xy).r;\n float zNear = projParams.x;\n float zFar = projParams.y;\n float viewDepth = (zFar * zNear) / (zFar - readDepth * (zFar - zNear));\n float fade = clamp(softParams.y * ((viewDepth - softParams.x) - linearDepth), 0.0, 1.0);\n gl_FragColor *= fade;\n#endif\n}\n";
|
|
2811
|
+
|
|
2812
|
+
declare const _default$2: "\n// Per-vertex attributes\nattribute vec3 position;\nattribute vec2 uv;\n\n// Per-instance attributes\nattribute vec3 offset;\nattribute vec4 color;\nattribute vec3 size;\nattribute float rotation;\nattribute float uvTile;\nattribute vec4 velocity;\n\n// Uniforms\nuniform mat4 world;\nuniform mat4 view;\nuniform mat4 projection;\nuniform float speedFactor;\n\n#ifdef UV_TILE\nuniform float tileCountX;\nuniform float tileCountY;\n#endif\n\n// Varyings\nvarying vec2 vUV;\nvarying vec4 vColor;\n#ifdef TILE_BLEND\nvarying vec2 vUV2;\nvarying float vTileBlend;\n#endif\n#ifdef SOFT_PARTICLES\nvarying vec4 projPosition;\nvarying float linearDepth;\n#endif\n\nvoid main() {\n float lengthFactor = velocity.w;\n float avgSize = (size.x + size.y) * 0.5;\n vec4 mvPosition = view * world * vec4(offset, 1.0);\n vec3 viewVelocity = mat3(view * world) * velocity.xyz;\n float vlength = length(viewVelocity);\n if (vlength < 0.0001) {\n vlength = 0.0001;\n viewVelocity = vec3(0.0, 0.0, 1.0);\n }\n mvPosition.xyz += position.y * normalize(cross(mvPosition.xyz, viewVelocity)) * avgSize;\n mvPosition.xyz -= (position.x + 0.5) * viewVelocity * (1.0 + lengthFactor / vlength) * avgSize;\n gl_Position = projection * mvPosition;\n#ifdef SOFT_PARTICLES\n projPosition = gl_Position;\n linearDepth = -mvPosition.z;\n#endif\n\n #ifdef UV_TILE\n vec2 tc = vec2(tileCountX, tileCountY);\n float baseTile = floor(uvTile);\n float tileU = mod(baseTile, tc.x) / tc.x;\n float tileV = 1.0 - floor(baseTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV = uv / tc + vec2(tileU, tileV);\n #ifdef TILE_BLEND\n float nextTile = ceil(uvTile);\n float nextU = mod(nextTile, tc.x) / tc.x;\n float nextV = 1.0 - floor(nextTile / tc.x) / tc.y - 1.0 / tc.y;\n vUV2 = uv / tc + vec2(nextU, nextV);\n vTileBlend = fract(uvTile);\n #endif\n #else\n vUV = uv;\n #endif\n\n vColor = color;\n}\n";
|
|
2813
|
+
|
|
2814
|
+
declare const _default$1: "\nattribute vec3 position;\nattribute vec3 previous;\nattribute vec3 next;\nattribute float side;\nattribute float width;\nattribute vec2 uv;\nattribute vec4 color;\n\nuniform mat4 view;\nuniform mat4 projection;\nuniform float lineWidth;\nuniform vec2 resolution;\nuniform float sizeAttenuation;\n\nvarying vec2 vUV;\nvarying vec4 vColor;\n\nvec2 fix(vec4 i, float aspect) {\n vec2 res = i.xy / i.w;\n res.x *= aspect;\n return res;\n}\n\nvoid main() {\n float aspect = resolution.x / resolution.y;\n vec4 finalPosition = projection * view * vec4(position, 1.0);\n vec4 prevPos = projection * view * vec4(previous, 1.0);\n vec4 nextPos = projection * view * vec4(next, 1.0);\n\n vec2 currentP = fix(finalPosition, aspect);\n vec2 prevP = fix(prevPos, aspect);\n vec2 nextP = fix(nextPos, aspect);\n\n float w = lineWidth * width;\n vec2 dir;\n if (distance(nextP, currentP) < 0.0001) {\n dir = normalize(currentP - prevP);\n } else if (distance(prevP, currentP) < 0.0001) {\n dir = normalize(nextP - currentP);\n } else {\n vec2 dir1 = normalize(currentP - prevP);\n vec2 dir2 = normalize(nextP - currentP);\n dir = normalize(dir1 + dir2);\n }\n vec4 normal = vec4(-dir.y, dir.x, 0.0, 1.0);\n normal.xy *= 0.5 * w;\n normal *= projection;\n if (sizeAttenuation == 0.0) {\n normal.xy *= finalPosition.w;\n normal.xy /= (vec4(resolution, 0.0, 1.0) * projection).xy;\n }\n finalPosition.xy += normal.xy * side;\n gl_Position = finalPosition;\n vUV = uv;\n vColor = color;\n}\n";
|
|
2815
|
+
|
|
2816
|
+
declare const _default: "\nvarying vec2 vUV;\nvarying vec4 vColor;\n\n#ifdef USE_MAP\nuniform sampler2D map;\n#endif\n\nvoid main() {\n vec4 baseColor = vColor;\n\n#ifdef USE_MAP\n vec4 texColor = texture2D(map, vUV);\n baseColor *= texColor;\n#endif\n\n if (baseColor.a < 0.01) discard;\n\n gl_FragColor = baseColor;\n}\n";
|
|
2817
|
+
|
|
2818
|
+
type BabylonParticleMaterialParameters = Record<string, any>;
|
|
2819
|
+
declare class ParticleMeshStandardMaterial extends StandardMaterial {
|
|
2820
|
+
readonly isParticleMeshStandardMaterial = true;
|
|
2821
|
+
constructor(name: string, scene?: Scene, parameters?: BabylonParticleMaterialParameters);
|
|
2822
|
+
}
|
|
2823
|
+
declare class ParticleMeshPhysicsMaterial extends PBRMaterial {
|
|
2824
|
+
readonly isParticleMeshPhysicsMaterial = true;
|
|
2825
|
+
constructor(name: string, scene?: Scene, parameters?: BabylonParticleMaterialParameters);
|
|
2826
|
+
}
|
|
2827
|
+
|
|
2828
|
+
export { ApplyCollision, ApplyForce, ApplySequences, AxisAngleGenerator, BatchedParticleRenderer, BatchedRenderer, BehaviorFromJSON, BehaviorTypes, Bezier, ChangeEmitDirection, CircleEmitter, ColorBySpeed, ColorGeneratorFromJSON, ColorOverLife, ColorRange, ConeEmitter, ConstantColor, ConstantValue, DEG2RAD, DonutEmitter, EmitSubParticleSystem, EmitterFromJSON, EmitterMode, EmitterShapes, Euler, EulerGenerator, ForceOverLife, FrameOverLife, GeneratorFromJSON, Gradient, GravityForce, GridEmitter, HemisphereEmitter, InheritVelocity, IntervalValue, LimitSpeedOverLife, MathUtils, Matrix3, Matrix4, MeshSurfaceEmitter, MeshSurfaceEmitterPlugin, NodeParticle, Noise, OrbitOverLife, ParticleEmitter, ParticleMeshPhysicsMaterial, ParticleMeshStandardMaterial, ParticleSystem, PiecewiseBezier, PiecewiseFunction, Plugins, PointEmitter, QuarksLoader, QuarksPrefab, QuarksUtil, Quaternion, RAD2DEG, RandomColor, RandomColorBetweenGradient, RandomQuatGenerator, RecordState, RectangleEmitter, RenderMode, Rotation3DOverLife, RotationBySpeed, RotationGeneratorFromJSON, RotationOverLife, SequencerFromJSON, SizeBySpeed, SizeOverLife, SpeedOverLife, SphereEmitter, SpriteBatch, SpriteParticle, SubParticleEmitMode, TextureSequencer, TrailBatch, TrailParticle, TurbulenceField, VFXBatch, ValueGeneratorFromJSON, Vector2, Vector3, Vector3Function, Vector3GeneratorFromJSON, Vector4, VelocityOverLife, WebGLCoordinateSystem, WebGPUCoordinateSystem, WidthOverLength, ceilPowerOfTwo, clamp, damp, degToRad, denormalize, euclideanModulo, floorPowerOfTwo, generateUUID, getPhysicsResolver, getRegisteredShaderChunks, getShaderChunk, getValueFromEmitterMode, inverseLerp, isPowerOfTwo, lerp, loadPlugin, _default$4 as localParticlePhysicsVertShader, _default$5 as localParticleVertShader, mapLinear, normalize, _default$6 as particleFragShader, _default$3 as particlePhysicsFragShader, _default$7 as particleVertShader, pingpong, radToDeg, randFloat, randFloatSpread, randInt, registerShaderChunks, seededRandom, setPhysicsResolver, setQuaternionFromProperEuler, smootherstep, smoothstep, _default$2 as stretchedBillboardVertShader, _default as trailFragShader, _default$1 as trailVertShader, unloadPlugin };
|
|
2829
|
+
export type { AdaptivePerformanceOptions, AdaptivePerformanceState, AnimationData, BabylonMetaData, BabylonParticleMaterialParameters, Behavior, BehaviorPlugin, BillBoardSettings, BurstParameters, BurstParametersJSON, CircleEmitterParameters, ColorGenerator, ConeEmitterParameters, Constructable, DonutEmitterParameters, EmissionState, EmitterShape, EmitterShapePlugin, EulerOrder, FieldType, FunctionColorGenerator, FunctionJSON, FunctionValueGenerator, GeneratorMemory, GridEmitterParameters, HemisphereEmitterParameters, IAnimationData, IEmitter, IParticle, IParticleSystem, IPrefab, InheritVelocityMode, JsonMetaData, MeshSettings, ParameterPair, ParameterType, Particle, ParticleSystemEvent, ParticleSystemEventType, ParticleSystemJSONParameters, ParticleSystemParameters, Plugin, QuarksLoaderOptions, QuarksTimelineClip, RectangleEmitterParameters, RendererEmitterSettings, Resource, RotationGenerator, Sequencer, SerializationOptions, ShapeJSON, SphereEmitterParameters, StoredBatchSettings, StretchedBillBoardSettings, TrailSettings, VFXBatchSettings, ValueGenerator, Vector3Generator, VelocityOverLifeSpace };
|