advanceTime method

bool advanceTime(
  1. num passedTime
)

This method is called by the Juggler with the time past since the last call.

Returns true as long as this Animatable is not completed; false if it is completed.

Implementation

bool advanceTime(num passedTime) {
  var particle = _rootParticle;
  var particleCount = _particleCount;

  // advance existing particles

  for (int i = 0; i < particleCount; i++) {
    var nextParticle = particle!._nextParticle!;

    if (nextParticle._advanceParticle(passedTime)) {
      particle = nextParticle;
      continue;
    }

    if (nextParticle._nextParticle != null) {
      particle._nextParticle = nextParticle._nextParticle;
      _lastParticle!._nextParticle = nextParticle;
      _lastParticle = nextParticle;
      _lastParticle!._nextParticle = null;
    }

    _particleCount--;
  }

  // create and advance new particles

  if (_emissionTime > 0.0) {
    num timeBetweenParticles = _lifespan / _maxNumParticles;
    _frameTime += passedTime;

    while (_frameTime > 0.0) {
      if (_particleCount < _maxNumParticles) {
        var nextParticle = particle!._nextParticle;

        nextParticle ??=
            _lastParticle = particle._nextParticle = _Particle(this);

        particle = nextParticle;
        particle._initParticle();
        particle._advanceParticle(_frameTime);
        _particleCount++;
      }

      _frameTime -= timeBetweenParticles;
    }

    _emissionTime = max(0.0, _emissionTime - passedTime);
  }

  //--------------------------------------------------------

  //return (_particleCount > 0);
  return true;
}