//----------------------------------------------------------------------- inline void GravityAffector::_affect(ParticleTechnique* particleTechnique, Particle* particle, Ogre::Real timeElapsed) { /** Applying Newton's law of universal gravitation. */ Ogre::Vector3 distance = mDerivedPosition - particle->position; Ogre::Real length = distance.squaredLength(); if (length > 0) { Ogre::Real force = (mGravity * particle->mass * mass) / length; particle->direction += force * distance * timeElapsed * _calculateAffectSpecialisationFactor(particle); } }
//----------------------------------------------------------------------- void LinearForceAffector::_affect(ParticleTechnique* particleTechnique, Particle* particle, Real timeElapsed) { // Affect the direction and take the specialisation into account if (mForceApplication == FA_ADD) { particle->direction += mScaledVector * _calculateAffectSpecialisationFactor(particle); } else { particle->direction = (particle->direction + mForceVector) / 2; } }