void ParticleSystem::_update(Real timeElapsed) { Real nonvisibleTimeout = mNonvisibleTimeoutSet ? mNonvisibleTimeout : msDefaultNonvisibleTimeout; // Scale incoming speed for the rest of the calculation timeElapsed *= mSpeedFactor; // Init renderer if not done already configureRenderer(); // Initialise emitted emitters list if not done already initialiseEmittedEmitters(); Real iterationInterval = mIterationIntervalSet ? mIterationInterval : msDefaultIterationInterval; if (iterationInterval > 0) { mUpdateRemainTime += timeElapsed; while (mUpdateRemainTime >= iterationInterval) { // Update existing particles _expire(iterationInterval); _triggerAffectors(iterationInterval); _applyMotion(iterationInterval); if (mIsEmitting) { // Emit new particles _triggerEmitters(iterationInterval); } mUpdateRemainTime -= iterationInterval; } } else { // Update existing particles _expire(timeElapsed); _triggerAffectors(timeElapsed); _applyMotion(timeElapsed); if (mIsEmitting) { // Emit new particles _triggerEmitters(timeElapsed); } } if (!mBoundsAutoUpdate && mBoundsUpdateTime > 0.0f) { mBoundsUpdateTime -= timeElapsed; // count down } // _updateBounds(); }
bool AsyncTimerMockImpl::fastForward(Milliseconds time) { if (time >= _timeLeft) { _timeLeft = kZeroMilliseconds; _expire(); } else { _timeLeft -= time; } return _timeLeft > kZeroMilliseconds; }