- override
Called before a frame is drawn.
Override this method to do any updates to the node or node tree before it's drawn to screen.
// Make the node rotate at a fixed speed
void update(double dt) {
rotation = rotation * 10.0 * dt;
}
Source
@override void update(double dt) { // TODO: Fix this (it's a temp fix for low framerates) if (dt > 0.1) dt = 0.1; // Create new particles double rate = 1.0 / emissionRate; if (_particles.length < maxParticles) { _emitCounter += dt; } while(_particles.length < maxParticles && _emitCounter > rate && (numParticlesToEmit == 0 || _numEmittedParticles < numParticlesToEmit)) { // Add a new particle _addParticle(); _emitCounter -= rate; } // _elapsedTime += dt; // Iterate over all particles for (int i = _particles.length -1; i >= 0; i--) { _Particle particle = _particles[i]; // Manage life time particle.timeToLive -= dt; if (particle.timeToLive <= 0) { _particles.removeAt(i); continue; } // Update the particle if (particle.accelerations != null) { // Radial acceleration Vector2 radial; if (particle.pos[0] != 0 || particle.pos[1] != 0) { radial = new Vector2.copy(particle.pos)..normalize(); } else { radial = new Vector2.zero(); } Vector2 tangential = new Vector2.copy(radial); radial.scale(particle.accelerations.radialAccel); // Tangential acceleration double newY = tangential.x; tangential.x = -tangential.y; tangential.y = newY; tangential.scale(particle.accelerations.tangentialAccel); // (gravity + radial + tangential) * dt final Vector2 accel = (_gravity + radial + tangential)..scale(dt); particle.dir += accel; } else if (_gravity[0] != 0.0 || _gravity[1] != 0) { // gravity final Vector2 accel = _gravity.clone()..scale(dt); particle.dir += accel; } // Update particle position particle.pos[0] += particle.dir[0] * dt; particle.pos[1] += particle.dir[1] * dt; // Size particle.size = math.max(particle.size + particle.deltaSize * dt, 0.0); // Angle particle.rotation += particle.deltaRotation * dt; // Color if (particle.simpleColorSequence != null) { for (int i = 0; i < 4; i++) { particle.simpleColorSequence[i] += particle.simpleColorSequence[i + 4] * dt; } } else { particle.colorPos = math.min(particle.colorPos + particle.deltaColorPos * dt, 1.0); } } if (autoRemoveOnFinish && _particles.length == 0 && _numEmittedParticles > 0) { if (parent != null) removeFromParent(); } }