ParticleSystem constructor

ParticleSystem({
  1. int maxParticles = 1024,
  2. required EmitterShape shape,
  3. required Spawner spawner,
  4. List<ParticleModule> modules = const <ParticleModule>[],
  5. FloatDistribution lifetime = const ConstantFloat(1.0),
  6. FloatDistribution startSpeed = const ConstantFloat(0.0),
  7. FloatDistribution startSize = const ConstantFloat(1.0),
  8. FloatDistribution startRotation = const ConstantFloat(0.0),
  9. FloatDistribution startAngularVelocity = const ConstantFloat(0.0),
  10. ColorDistribution? startColor,
  11. Vector3? gravity,
  12. bool looping = true,
  13. double duration = 5.0,
  14. double fixedStep = 1.0 / 60.0,
  15. double maxFrameTime = 0.25,
  16. int seed = 0,
  17. double prewarm = 0.0,
})

Creates a particle system. The distributions, shape, spawner, gravity, looping behaviour, fixed-step size, and seed are all configurable; only shape and spawner are required.

When prewarm is positive the system is advanced that many seconds at construction so it starts already populated.

Implementation

ParticleSystem({
  int maxParticles = 1024,
  required this.shape,
  required this.spawner,
  List<ParticleModule> modules = const <ParticleModule>[],
  this.lifetime = const ConstantFloat(1.0),
  this.startSpeed = const ConstantFloat(0.0),
  this.startSize = const ConstantFloat(1.0),
  this.startRotation = const ConstantFloat(0.0),
  this.startAngularVelocity = const ConstantFloat(0.0),
  ColorDistribution? startColor,
  Vector3? gravity,
  this.looping = true,
  this.duration = 5.0,
  this.fixedStep = 1.0 / 60.0,
  this.maxFrameTime = 0.25,
  this.seed = 0,
  double prewarm = 0.0,
}) : assert(maxParticles > 0),
     assert(duration > 0),
     assert(fixedStep > 0),
     assert(maxFrameTime >= fixedStep),
     assert(prewarm >= 0),
     storage = ParticleStorage(maxParticles),
     modules = List<ParticleModule>.unmodifiable(modules),
     startColor = startColor ?? ConstantColor(Vector4(1, 1, 1, 1)),
     gravity = gravity?.clone() ?? Vector3.zero(),
     _random = math.Random(seed) {
  if (prewarm > 0.0) {
    final steps = (prewarm / fixedStep).floor();
    for (var i = 0; i < steps; i++) {
      _stepFixed(fixedStep);
    }
  }
}