advanceTime method
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;
}