//----------------------------------------------------------------------- bool PUOnTimeObserver::observe (PUParticle3D* particle, float timeElapsed) { if (_compare == CO_GREATER_THAN) { if (_sinceStartSystem) { // Validate whether time since start of the particle system > threshold return (_particleSystem->getTimeElapsedSinceStart() > _threshold); } else { // Validate whether time since start of the particle emission > threshold return (particle && (particle->totalTimeToLive - particle->timeToLive) > _threshold); } } else if (_compare == CO_LESS_THAN) { if (_sinceStartSystem) { // Validate whether time since start of the particle system < threshold return (_particleSystem->getTimeElapsedSinceStart() < _threshold); } else { // Validate whether time since start of the particle emission < threshold return (particle && (particle->totalTimeToLive - particle->timeToLive) < _threshold); } } else { // Equals if (_sinceStartSystem) { // Validate whether time since start of the particle system == threshold return almostEquals(_particleSystem->getTimeElapsedSinceStart(), _threshold, 0.01f); } else { // Validate whether time since start of the particle emission == threshold return particle && almostEquals((particle->totalTimeToLive - particle->timeToLive), _threshold, 0.01f); } } return false; }
//----------------------------------------------------------------------- bool OnTimeObserver::_observe (ParticleTechnique* particleTechnique, Particle* particle, Real timeElapsed) { if (mCompare == CO_GREATER_THAN) { if (mSinceStartSystem) { // Validate whether time since start of the particle system > threshold return (mParentTechnique->getParentSystem()->getTimeElapsedSinceStart() > mThreshold); } else { // Validate whether time since start of the particle emission > threshold return (particle && (particle->totalTimeToLive - particle->timeToLive) > mThreshold); } } else if (mCompare == CO_LESS_THAN) { if (mSinceStartSystem) { // Validate whether time since start of the particle system < threshold return (mParentTechnique->getParentSystem()->getTimeElapsedSinceStart() < mThreshold); } else { // Validate whether time since start of the particle emission < threshold return (particle && (particle->totalTimeToLive - particle->timeToLive) < mThreshold); } } else { // Equals if (mSinceStartSystem) { // Validate whether time since start of the particle system == threshold return almostEquals(mParentTechnique->getParentSystem()->getTimeElapsedSinceStart(), mThreshold, 0.01f); } else { // Validate whether time since start of the particle emission == threshold return particle && almostEquals((particle->totalTimeToLive - particle->timeToLive), mThreshold, 0.01f); } } return false; }
//----------------------------------------------------------------------- bool PUOnVelocityObserver::observe (PUParticle3D* particle, float timeElapsed) { if (!particle) return false; // Compensate for the scaled velocity float scaleVelocity = _particleSystem->getParticleSystemScaleVelocity(); if (_compare == CO_GREATER_THAN) { // Changed in V 1.3.1 return (particle->calculateVelocity()) > (scaleVelocity * _threshold); } else if (_compare == CO_LESS_THAN) { return (particle->calculateVelocity()) < (scaleVelocity * _threshold); } else { // Equals return almostEquals(particle->calculateVelocity(), (scaleVelocity * _threshold), 0.01f); } return false; }
//----------------------------------------------------------------------- bool OnVelocityObserver::_observe (ParticleTechnique* particleTechnique, Particle* particle, Real timeElapsed) { if (!particle) return false; // Compensate for the scaled velocity Real scaleVelocity = particleTechnique->getParentSystem()->getScaleVelocity(); if (mCompare == CO_GREATER_THAN) { // Changed in V 1.3.1 return (particle->calculateVelocity()) > (scaleVelocity * mThreshold); } else if (mCompare == CO_LESS_THAN) { return (particle->calculateVelocity()) < (scaleVelocity * mThreshold); } else { // Equals return almostEquals(particle->calculateVelocity(), (scaleVelocity * mThreshold), 0.01f); } return false; }