@needle-tools/engine 2.41.0-pre → 2.42.0-pre

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.
Files changed (55) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/needle-engine.d.ts +100 -40
  3. package/dist/needle-engine.js +367 -367
  4. package/dist/needle-engine.js.map +3 -3
  5. package/dist/needle-engine.min.js +37 -37
  6. package/dist/needle-engine.min.js.map +3 -3
  7. package/lib/engine/engine_element.js +1 -1
  8. package/lib/engine/engine_element.js.map +1 -1
  9. package/lib/engine/engine_element_loading.js +6 -1
  10. package/lib/engine/engine_element_loading.js.map +1 -1
  11. package/lib/engine/engine_gizmos.d.ts +8 -22
  12. package/lib/engine/engine_gizmos.js +37 -3
  13. package/lib/engine/engine_gizmos.js.map +1 -1
  14. package/lib/engine/engine_setup.d.ts +3 -0
  15. package/lib/engine/engine_setup.js +15 -0
  16. package/lib/engine/engine_setup.js.map +1 -1
  17. package/lib/engine/engine_three_utils.d.ts +16 -1
  18. package/lib/engine/engine_three_utils.js +94 -54
  19. package/lib/engine/engine_three_utils.js.map +1 -1
  20. package/lib/engine/engine_types.d.ts +6 -0
  21. package/lib/engine/engine_types.js.map +1 -1
  22. package/lib/engine-components/AnimationCurve.js +2 -2
  23. package/lib/engine-components/AnimationCurve.js.map +1 -1
  24. package/lib/engine-components/BoxHelperComponent.js +9 -10
  25. package/lib/engine-components/BoxHelperComponent.js.map +1 -1
  26. package/lib/engine-components/ParticleSystem.d.ts +24 -10
  27. package/lib/engine-components/ParticleSystem.js +136 -41
  28. package/lib/engine-components/ParticleSystem.js.map +1 -1
  29. package/lib/engine-components/ParticleSystemModules.d.ts +40 -6
  30. package/lib/engine-components/ParticleSystemModules.js +103 -21
  31. package/lib/engine-components/ParticleSystemModules.js.map +1 -1
  32. package/lib/engine-components/ReflectionProbe.js +29 -11
  33. package/lib/engine-components/ReflectionProbe.js.map +1 -1
  34. package/lib/engine-components/Renderer.d.ts +1 -0
  35. package/lib/engine-components/Renderer.js +4 -2
  36. package/lib/engine-components/Renderer.js.map +1 -1
  37. package/lib/engine-components/codegen/components.d.ts +1 -0
  38. package/lib/engine-components/codegen/components.js +1 -0
  39. package/lib/engine-components/codegen/components.js.map +1 -1
  40. package/package.json +2 -2
  41. package/src/engine/codegen/register_types.js +4 -0
  42. package/src/engine/dist/engine_three_utils.js +279 -0
  43. package/src/engine/engine_element.ts +1 -1
  44. package/src/engine/engine_element_loading.ts +5 -1
  45. package/src/engine/engine_gizmos.ts +45 -8
  46. package/src/engine/engine_setup.ts +25 -2
  47. package/src/engine/engine_three_utils.ts +103 -62
  48. package/src/engine/engine_types.ts +8 -1
  49. package/src/engine-components/AnimationCurve.ts +2 -2
  50. package/src/engine-components/BoxHelperComponent.ts +12 -15
  51. package/src/engine-components/ParticleSystem.ts +151 -75
  52. package/src/engine-components/ParticleSystemModules.ts +127 -24
  53. package/src/engine-components/ReflectionProbe.ts +37 -13
  54. package/src/engine-components/Renderer.ts +4 -2
  55. package/src/engine-components/codegen/components.ts +1 -0
@@ -6,18 +6,35 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { Behaviour } from "./Component";
8
8
  import * as THREE from "three";
9
- import { MainModule, EmissionModule, ShapeModule, ColorOverLifetimeModule, SizeOverLifetimeModule, NoiseModule, ParticleSystemSimulationSpace } from "./ParticleSystemModules";
9
+ import { MainModule, EmissionModule, ShapeModule, ColorOverLifetimeModule, SizeOverLifetimeModule, NoiseModule, ParticleSystemSimulationSpace, ParticleBurst, ParticleSystemRenderMode } from "./ParticleSystemModules";
10
10
  import { getParam } from "../engine/engine_utils";
11
- import System, { Emitter, Position, Life, SpriteRenderer, Particle, } from 'three-nebula';
12
11
  // https://github.dev/creativelifeform/three-nebula
12
+ import System, { Emitter, Position, Life, SpriteRenderer, Particle, Body, MeshRenderer, } from 'three-nebula';
13
13
  import { serializeable } from "../engine/engine_serialization";
14
14
  import { Context } from "../engine/engine_setup";
15
- import { AxesHelper, Material, Vector3 } from "three";
15
+ import { AxesHelper, Material, Mesh, Object3D, Vector3 } from "three";
16
16
  import { getWorldQuaternion, getWorldScale } from "../engine/engine_three_utils";
17
+ import { assign } from "../engine/engine_serialization_core";
17
18
  const debug = getParam("debugparticles");
18
19
  export class ParticleSystemRenderer extends Behaviour {
20
+ renderMode;
19
21
  particleMaterial;
22
+ // @serializeable(Mesh)
23
+ particleMesh;
24
+ getMesh() {
25
+ let geo = null;
26
+ if (this.particleMesh instanceof Mesh) {
27
+ geo = this.particleMesh.geometry;
28
+ }
29
+ if (geo === null)
30
+ geo = new THREE.BoxGeometry(1, 1, 1);
31
+ const res = new Mesh(geo, this.particleMaterial);
32
+ return res;
33
+ }
20
34
  }
35
+ __decorate([
36
+ serializeable()
37
+ ], ParticleSystemRenderer.prototype, "renderMode", void 0);
21
38
  __decorate([
22
39
  serializeable(Material)
23
40
  ], ParticleSystemRenderer.prototype, "particleMaterial", void 0);
@@ -28,40 +45,92 @@ export class ParticleSystem extends Behaviour {
28
45
  sizeOverLifetime;
29
46
  shape;
30
47
  noise;
31
- renderer;
48
+ get renderer() {
49
+ return this._renderer;
50
+ }
51
+ get currentParticles() {
52
+ return this._system?.getCount() ?? 0;
53
+ }
54
+ get maxParticles() {
55
+ return this.main.maxParticles;
56
+ }
57
+ get time() {
58
+ return this._time;
59
+ }
60
+ get duration() {
61
+ return this.main.duration;
62
+ }
63
+ _renderer;
32
64
  _system;
33
65
  _emitter;
34
66
  _size;
67
+ _container;
68
+ _time = 0;
69
+ /** called from deserialization */
70
+ set bursts(arr) {
71
+ for (let i = 0; i < arr.length; i++) {
72
+ const burst = arr[i];
73
+ if ((burst instanceof ParticleBurst) === false) {
74
+ const instance = new ParticleBurst();
75
+ assign(instance, burst);
76
+ arr[i] = instance;
77
+ }
78
+ }
79
+ this._bursts = arr;
80
+ }
81
+ _bursts;
35
82
  awake() {
83
+ this._renderer = this.gameObject.getComponent(ParticleSystemRenderer);
84
+ this._system = new System();
85
+ if (this.main.simulationSpace == ParticleSystemSimulationSpace.Local) {
86
+ this._container = new Object3D();
87
+ this._container.matrixAutoUpdate = false;
88
+ this.gameObject.add(this._container);
89
+ }
90
+ const container = this.main.simulationSpace == ParticleSystemSimulationSpace.Local ? this._container : this.context.scene;
36
91
  if (debug) {
37
92
  console.log(this);
38
93
  this.gameObject.add(new AxesHelper(1));
39
94
  }
40
- this.renderer = this.gameObject.getComponent(ParticleSystemRenderer);
41
- this._system = new System();
42
- const container = this.main.simulationSpace == ParticleSystemSimulationSpace.Local ? this.gameObject : this.context.scene;
43
- const renderer = new SpriteRenderer(container, THREE);
95
+ const renderMode = this._renderer.renderMode;
96
+ let renderer = undefined;
97
+ switch (renderMode) {
98
+ case ParticleSystemRenderMode.Mesh:
99
+ // https://three-nebula-docs.netlify.app/class/src/renderer/meshrenderer.js~meshrenderer
100
+ // mesh renderer example: https://github.com/creativelifeform/three-nebula/blob/master/website/components/Examples/MeshRenderer/init.js
101
+ renderer = new MeshRenderer(container, THREE);
102
+ break;
103
+ case ParticleSystemRenderMode.Billboard:
104
+ renderer = new SpriteRenderer(container, THREE);
105
+ break;
106
+ }
107
+ if (!renderer) {
108
+ console.error("No renderer for particle system");
109
+ return;
110
+ }
44
111
  renderer.logRendererType = () => { };
45
- if (this.renderer.particleMaterial) {
46
- const sprite = renderer._body;
47
- sprite.layers.disableAll();
48
- sprite.layers.set(2); // ignore raycasting particles
49
- sprite.renderOrder = 1;
50
- sprite.material.map = this.renderer.particleMaterial.map;
51
- sprite.material.transparent = true;
52
- // sprite.material.sizeAttenuation = false;
53
- sprite.material.blending = this.renderer.particleMaterial.blending;
54
- sprite.material.blendDst = this.renderer.particleMaterial.blendDst;
55
- sprite.material.blendDstAlpha = this.renderer.particleMaterial.blendDstAlpha;
56
- sprite.material.blendEquation = this.renderer.particleMaterial.blendEquation;
57
- sprite.material.blendEquationAlpha = this.renderer.particleMaterial.blendEquationAlpha;
58
- sprite.material.blendSrc = this.renderer.particleMaterial.blendSrc;
59
- sprite.material.blendSrcAlpha = this.renderer.particleMaterial.blendSrcAlpha;
60
- sprite.material.premultipliedAlpha = this.renderer.particleMaterial.premultipliedAlpha;
61
- sprite.material.depthWrite = false;
62
- sprite.material.depthTest = true;
63
- if (debug)
64
- console.log(sprite);
112
+ if (renderMode === ParticleSystemRenderMode.Billboard) {
113
+ if (this.renderer.particleMaterial) {
114
+ const sprite = renderer._body;
115
+ sprite.layers.disableAll();
116
+ sprite.layers.set(2); // ignore raycasting particles
117
+ sprite.renderOrder = 1;
118
+ sprite.material.map = this.renderer.particleMaterial.map;
119
+ sprite.material.transparent = true;
120
+ // sprite.material.sizeAttenuation = false;
121
+ sprite.material.blending = this.renderer.particleMaterial.blending;
122
+ sprite.material.blendDst = this.renderer.particleMaterial.blendDst;
123
+ sprite.material.blendDstAlpha = this.renderer.particleMaterial.blendDstAlpha;
124
+ sprite.material.blendEquation = this.renderer.particleMaterial.blendEquation;
125
+ sprite.material.blendEquationAlpha = this.renderer.particleMaterial.blendEquationAlpha;
126
+ sprite.material.blendSrc = this.renderer.particleMaterial.blendSrc;
127
+ sprite.material.blendSrcAlpha = this.renderer.particleMaterial.blendSrcAlpha;
128
+ sprite.material.premultipliedAlpha = this.renderer.particleMaterial.premultipliedAlpha;
129
+ sprite.material.depthWrite = false;
130
+ sprite.material.depthTest = true;
131
+ if (debug)
132
+ console.log(sprite);
133
+ }
65
134
  }
66
135
  this._system.addRenderer(renderer);
67
136
  const initializers = [];
@@ -80,6 +149,9 @@ export class ParticleSystem extends Behaviour {
80
149
  velocity.gravity = this.main.gravityModifier;
81
150
  velocity.gravityModifierMultiplier = this.main.gravityModifierMultiplier;
82
151
  behaviours.push(velocity);
152
+ if (renderMode === ParticleSystemRenderMode.Mesh) {
153
+ initializers.push(new Body(this._renderer.getMesh()));
154
+ }
83
155
  const emitter = this._emitter = new Emitter({});
84
156
  emitter.setInitializers(initializers);
85
157
  emitter.setBehaviours(behaviours);
@@ -90,22 +162,46 @@ export class ParticleSystem extends Behaviour {
90
162
  this._emitter.emit();
91
163
  this._system.addEmitter(this._emitter);
92
164
  this._system.emit({ onStart: () => { }, onUpdate: () => { }, onEnd: () => { }, });
165
+ this._time = 0;
93
166
  }
94
167
  onDisable() {
95
168
  this._system.removeEmitter(this._emitter);
96
169
  }
97
170
  onBeforeRender() {
98
- this.emission.currentParticles = this._system.getCount();
99
- this.emission.maxParticles = this.main.maxParticles;
100
- this.shape.update(this.context, this.main.simulationSpace, this.gameObject);
101
- this.noise.update(this.context);
102
- this._system.update(this.context.time.deltaTime * this.main.simulationSpeed);
171
+ if (this._bursts) {
172
+ this.emission.bursts = this._bursts;
173
+ }
103
174
  // sprite materials must be scaled in AR
104
175
  const cam = this.context.mainCamera;
105
176
  if (cam) {
106
177
  const scale = getWorldScale(cam);
107
178
  this._size.cameraScale = scale.x;
108
179
  }
180
+ if (this._container && this.gameObject?.parent) {
181
+ // this._container.matrix.copy(this.gameObject.matrixWorld);
182
+ // this._container.matrixWorld.copy(this.gameObject.matrixWorld);
183
+ const scale = getWorldScale(this.gameObject.parent);
184
+ scale.x = 1 / scale.x;
185
+ scale.y = 1 / scale.y;
186
+ scale.z = 1 / scale.z;
187
+ // console.log(scale);
188
+ // this._container.scale.copy(scale);
189
+ // // this._container.updateMatrix();
190
+ // // this._container.updateMatrixWorld();
191
+ // // // set scale to 1
192
+ this._container.matrix.identity();
193
+ this._container.matrix.scale(scale);
194
+ // this._container.matrixWorld.copy(this._container.matrix);
195
+ }
196
+ // this._system.time
197
+ // this._system.duration = this.main.duration;
198
+ this.emission.system = this;
199
+ this.shape.update(this.context, this.main.simulationSpace, this.gameObject);
200
+ this.noise.update(this.context);
201
+ this._system.update(this.context.time.deltaTime * this.main.simulationSpeed);
202
+ this._time += this.context.time.deltaTime;
203
+ if (this._time > this.duration)
204
+ this._time = 0;
109
205
  }
110
206
  }
111
207
  __decorate([
@@ -228,7 +324,7 @@ class VelocityBehaviour extends CustomBehaviour {
228
324
  startMultiplier = 1;
229
325
  gravity;
230
326
  gravityModifierMultiplier = 1;
231
- downDirection = new Vector3(0, -1, 0);
327
+ downDirection = new Vector3();
232
328
  _temp = new Vector3();
233
329
  constructor(container, shape, noise, startCurve, startMultiplier) {
234
330
  super();
@@ -237,19 +333,17 @@ class VelocityBehaviour extends CustomBehaviour {
237
333
  this.noise = noise;
238
334
  this.startSpeed = startCurve;
239
335
  this.startMultiplier = startMultiplier;
240
- const quat = getWorldQuaternion(container);
241
- this.downDirection.applyQuaternion(quat);
242
336
  }
243
337
  applyBehaviour(target, deltaTime, index) {
244
338
  if (target instanceof Particle) {
245
339
  // target.velocity.x = target.velocity_start.x;
246
340
  // target.velocity.y = target.velocity_start.y;
247
341
  // target.velocity.z = target.velocity_start.z;
248
- if (target.gravity) {
342
+ if (target.gravity !== 0 && this.gravity) {
249
343
  // get world down vector
250
344
  this._temp.copy(this.downDirection);
251
345
  this._temp.multiplyScalar(target.gravity * deltaTime);
252
- target.velocity.sub(this._temp);
346
+ target.velocity.add(this._temp);
253
347
  }
254
348
  if (this.noise) {
255
349
  this.noise.applyNoise(index, target.position, target.velocity, deltaTime, target.age, target.life);
@@ -258,6 +352,7 @@ class VelocityBehaviour extends CustomBehaviour {
258
352
  }
259
353
  initialize(particle) {
260
354
  const dir = this.shape.getDirection(particle.position);
355
+ // dir.applyQuaternion(quat);
261
356
  const speed = this.startSpeed.evaluate(0, Math.random()) * this.startMultiplier;
262
357
  particle.velocity.x = dir.x * speed;
263
358
  particle.velocity.y = dir.y * speed;
@@ -268,13 +363,13 @@ class VelocityBehaviour extends CustomBehaviour {
268
363
  particle.velocity_start.y = particle.velocity.y;
269
364
  particle.velocity_start.z = particle.velocity.z;
270
365
  if (this.gravity) {
271
- particle.gravity = this.gravity.evaluate(0, Math.random()) * this.gravityModifierMultiplier * 9.81;
366
+ particle.gravity = this.gravity.evaluate(Math.random(), Math.random()) * 9.81;
272
367
  }
273
368
  else {
274
369
  particle.gravity = 0;
275
370
  }
276
- // particle.acceleration.y = 1;
277
- // console.log(particle);
371
+ const quat = getWorldQuaternion(this.container);
372
+ this.downDirection.set(0, -1, 0).applyQuaternion(quat);
278
373
  }
279
374
  }
280
375
  //# sourceMappingURL=ParticleSystem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ParticleSystem.js","sourceRoot":"","sources":["../../../engine-components/ParticleSystem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ParticleSystem.js","sourceRoot":"","sources":["../../../engine-components/ParticleSystem.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,17 @@ declare type AlphaKey = {
17
17
  time: number;
18
18
  alpha: number;
19
19
  };
20
+ export interface IParticleSystem {
21
+ get currentParticles(): number;
22
+ get maxParticles(): number;
23
+ get time(): number;
24
+ get duration(): number;
25
+ readonly main: MainModule;
26
+ }
27
+ export declare enum ParticleSystemRenderMode {
28
+ Billboard = 0,
29
+ Mesh = 4
30
+ }
20
31
  export declare class Gradient {
21
32
  alphaKeys: Array<AlphaKey>;
22
33
  colorKeys: Array<ColorKey>;
@@ -83,7 +94,8 @@ export declare class MinMaxGradient {
83
94
  gradient: Gradient;
84
95
  gradientMin: Gradient;
85
96
  gradientMax: Gradient;
86
- private _temp;
97
+ private static _temp;
98
+ private static _temp2;
87
99
  evaluate(t01: number, lerpFactor?: number): RGBAColor;
88
100
  }
89
101
  declare type ParticleSystemScalingMode = {
@@ -138,16 +150,38 @@ export declare class MainModule {
138
150
  stopAction: number;
139
151
  useUnscaledTime: boolean;
140
152
  }
153
+ export declare class ParticleBurst {
154
+ cycleCount: number;
155
+ maxCount: number;
156
+ minCount: number;
157
+ probability: number;
158
+ repeatInterval: number;
159
+ time: number;
160
+ count: {
161
+ constant: number;
162
+ constantMax: number;
163
+ constantMin: number;
164
+ curve?: AnimationCurve;
165
+ curveMax?: AnimationCurve;
166
+ curveMin?: AnimationCurve;
167
+ curveMultiplier?: number;
168
+ mode: ParticleSystemCurveMode;
169
+ };
170
+ private _performed;
171
+ reset(): void;
172
+ run(time: number): number;
173
+ }
141
174
  export declare class EmissionModule {
142
- burstCount: number;
143
175
  enabled: boolean;
176
+ get burstCount(): number;
177
+ bursts: ParticleBurst[];
144
178
  rateOverTime: MinMaxCurve;
145
179
  rateOverTimeMultiplier: number;
146
180
  rateOverDistance: MinMaxCurve;
147
181
  rateOverDistanceMultiplier: number;
148
- currentParticles: number;
149
- maxParticles: number;
150
- private _time;
182
+ /** set from system */
183
+ system: IParticleSystem;
184
+ get time(): number;
151
185
  private _summed;
152
186
  /** called by nebula */
153
187
  init(): void;
@@ -198,7 +232,7 @@ export declare class ShapeModule {
198
232
  /** called by nebula */
199
233
  getPosition(): void;
200
234
  private _dir;
201
- getDirection(position: any): Vec3;
235
+ getDirection(position: any): Vector3;
202
236
  }
203
237
  import { Context } from "../engine/engine_setup";
204
238
  export declare class NoiseModule {
@@ -9,6 +9,15 @@ import { Mathf } from "../engine/engine_math";
9
9
  import { serializeable } from "../engine/engine_serialization";
10
10
  import { RGBAColor } from "./js-extensions/RGBAColor";
11
11
  import { AnimationCurve } from "./AnimationCurve";
12
+ export var ParticleSystemRenderMode;
13
+ (function (ParticleSystemRenderMode) {
14
+ ParticleSystemRenderMode[ParticleSystemRenderMode["Billboard"] = 0] = "Billboard";
15
+ // Stretch = 1,
16
+ // HorizontalBillboard = 2,
17
+ // VerticalBillboard = 3,
18
+ ParticleSystemRenderMode[ParticleSystemRenderMode["Mesh"] = 4] = "Mesh";
19
+ // None = 5,
20
+ })(ParticleSystemRenderMode || (ParticleSystemRenderMode = {}));
12
21
  export class Gradient {
13
22
  alphaKeys;
14
23
  colorKeys;
@@ -181,22 +190,28 @@ export class MinMaxGradient {
181
190
  gradient;
182
191
  gradientMin;
183
192
  gradientMax;
184
- _temp = new RGBAColor(0, 0, 0, 1);
193
+ static _temp = new RGBAColor(0, 0, 0, 1);
194
+ static _temp2 = new RGBAColor(0, 0, 0, 1);
185
195
  evaluate(t01, lerpFactor) {
186
196
  const t = lerpFactor === undefined ? Math.random() : lerpFactor;
187
197
  switch (this.mode) {
188
198
  case ParticleSystemGradientMode.Color:
189
199
  return this.color;
190
200
  case ParticleSystemGradientMode.Gradient:
191
- this.gradient.evaluate(t01, this._temp);
192
- return this._temp;
201
+ this.gradient.evaluate(t01, MinMaxGradient._temp);
202
+ return MinMaxGradient._temp;
193
203
  case ParticleSystemGradientMode.TwoColors:
194
- return this._temp.lerpColors(this.colorMin, this.colorMax, t);
204
+ return MinMaxGradient._temp.lerpColors(this.colorMin, this.colorMax, t);
205
+ case ParticleSystemGradientMode.TwoGradients:
206
+ const t2 = Math.random();
207
+ this.gradientMin.evaluate(t2, MinMaxGradient._temp);
208
+ this.gradientMax.evaluate(t2, MinMaxGradient._temp2);
209
+ return MinMaxGradient._temp.lerp(MinMaxGradient._temp2, t);
195
210
  }
196
211
  // console.warn("Not implemented", ParticleSystemGradientMode[this.mode]);
197
- this._temp.set(0xff00ff);
198
- this._temp.alpha = 1;
199
- return this._temp;
212
+ MinMaxGradient._temp.set(0xff00ff);
213
+ MinMaxGradient._temp.alpha = 1;
214
+ return MinMaxGradient._temp;
200
215
  }
201
216
  }
202
217
  __decorate([
@@ -300,16 +315,63 @@ __decorate([
300
315
  __decorate([
301
316
  serializeable(MinMaxCurve)
302
317
  ], MainModule.prototype, "startSpeed", void 0);
318
+ export class ParticleBurst {
319
+ cycleCount;
320
+ maxCount;
321
+ minCount;
322
+ probability;
323
+ repeatInterval;
324
+ time;
325
+ count;
326
+ _performed = 0;
327
+ reset() {
328
+ this._performed = 0;
329
+ }
330
+ run(time) {
331
+ if (time <= this.time) {
332
+ this.reset();
333
+ return 0;
334
+ }
335
+ let amount = 0;
336
+ if (this.cycleCount === 0 || this._performed < this.cycleCount) {
337
+ const nextTime = this.time + this.repeatInterval * this._performed;
338
+ if (time >= nextTime) {
339
+ this._performed += 1;
340
+ if (Math.random() < this.probability) {
341
+ switch (this.count.mode) {
342
+ case ParticleSystemCurveMode.Constant:
343
+ amount = this.count.constant;
344
+ break;
345
+ case ParticleSystemCurveMode.TwoConstants:
346
+ amount = Mathf.lerp(this.count.constantMin, this.count.constantMax, Math.random());
347
+ break;
348
+ case ParticleSystemCurveMode.Curve:
349
+ amount = this.count.curve.evaluate(Math.random());
350
+ break;
351
+ case ParticleSystemCurveMode.TwoCurves:
352
+ const t = Math.random();
353
+ amount = Mathf.lerp(this.count.curveMin.evaluate(t), this.count.curveMax.evaluate(t), Math.random());
354
+ break;
355
+ }
356
+ }
357
+ }
358
+ }
359
+ return amount;
360
+ }
361
+ }
303
362
  export class EmissionModule {
304
- burstCount;
305
363
  enabled;
364
+ get burstCount() {
365
+ return this.bursts?.length ?? 0;
366
+ }
367
+ bursts;
306
368
  rateOverTime;
307
369
  rateOverTimeMultiplier;
308
370
  rateOverDistance;
309
371
  rateOverDistanceMultiplier;
310
- currentParticles = 0;
311
- maxParticles = Infinity;
312
- _time = 0;
372
+ /** set from system */
373
+ system;
374
+ get time() { return this.system.time; }
313
375
  _summed = 0;
314
376
  // private _didEmit: boolean = false;
315
377
  /** called by nebula */
@@ -317,27 +379,46 @@ export class EmissionModule {
317
379
  }
318
380
  /** called by nebula */
319
381
  getValue(deltaTime) {
320
- if (this.currentParticles >= this.maxParticles)
382
+ if (this.system.currentParticles >= this.system.maxParticles)
321
383
  return 0;
322
- // if (this._didEmit) return 0;
323
- // this._didEmit = true;
324
- // return 1;
325
384
  if (!this.enabled)
326
385
  return 0;
327
- const time = this._time += deltaTime;
328
- let count = this.rateOverTime.evaluate(time, Math.random());
386
+ let count = this.rateOverTime.evaluate(this.time / this.system.duration, Math.random());
329
387
  this._summed += count * deltaTime;
330
- const amount = Math.floor(this._summed);
388
+ let amount = Math.floor(this._summed);
331
389
  this._summed -= amount;
332
- return amount;
390
+ if (this.burstCount > 0) {
391
+ for (let i = 0; i < this.burstCount; i++) {
392
+ const burst = this.bursts[i];
393
+ if (burst.time >= this.time) {
394
+ burst.reset();
395
+ continue;
396
+ }
397
+ amount += Math.round(burst.run(this.time));
398
+ }
399
+ }
400
+ // dont emit more than we are allowed to
401
+ return amount; //Mathf.clamp(amount, 0, this.system.maxParticles - this.system.currentParticles);
333
402
  }
334
403
  }
404
+ __decorate([
405
+ serializeable()
406
+ ], EmissionModule.prototype, "enabled", void 0);
407
+ __decorate([
408
+ serializeable()
409
+ ], EmissionModule.prototype, "bursts", void 0);
335
410
  __decorate([
336
411
  serializeable(MinMaxCurve)
337
412
  ], EmissionModule.prototype, "rateOverTime", void 0);
413
+ __decorate([
414
+ serializeable()
415
+ ], EmissionModule.prototype, "rateOverTimeMultiplier", void 0);
338
416
  __decorate([
339
417
  serializeable(MinMaxCurve)
340
418
  ], EmissionModule.prototype, "rateOverDistance", void 0);
419
+ __decorate([
420
+ serializeable()
421
+ ], EmissionModule.prototype, "rateOverDistanceMultiplier", void 0);
341
422
  export class ColorOverLifetimeModule {
342
423
  enabled;
343
424
  color;
@@ -559,8 +640,9 @@ export class NoiseModule {
559
640
  if (!this.separateAxes) {
560
641
  if (this.strengthX)
561
642
  strengthFactor *= this.strengthX.evaluate(t, index * 1.1);
562
- strengthFactor *= this.strengthMultiplier;
563
- strengthFactor *= .1;
643
+ else
644
+ strengthFactor *= this.strengthMultiplier;
645
+ strengthFactor *= deltaTime;
564
646
  this._temp.multiplyScalar(strengthFactor);
565
647
  }
566
648
  if (this.separateAxes) {