Exemplo n.º 1
0
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();
}
Exemplo n.º 2
0
bool AsyncTimerMockImpl::fastForward(Milliseconds time) {
    if (time >= _timeLeft) {
        _timeLeft = kZeroMilliseconds;
        _expire();
    } else {
        _timeLeft -= time;
    }

    return _timeLeft > kZeroMilliseconds;
}