void PULinearForceAffector::updatePUAffector( PUParticle3D *particle, float /*deltaTime*/ ) { //for (auto iter : _particleSystem->getParticles()) { //PUParticle3D *particle = iter; // Affect the direction and take the specialisation into account if (_forceApplication == FA_ADD) { particle->direction += _scaledVector * calculateAffectSpecialisationFactor(particle); } else { particle->direction = (particle->direction + _forceVector) / 2; } } }
void PUGravityAffector::updatePUAffector( PUParticle3D *particle, float deltaTime ) { //for (auto iter : _particleSystem->getParticles()) { //PUParticle3D *particle = iter; // Applied scaling in V1.3.1 /** Applying Newton's law of universal gravitation. */ Vec3 distance = _derivedPosition - particle->position; float length = distance.lengthSquared(); float scaleVelocity = 1.0f; //if (mParentTechnique) { scaleVelocity = (static_cast<PUParticleSystem3D *>(_particleSystem))->getParticleSystemScaleVelocity(); } if (length > 0/* && mParentTechnique*/) { //Real force = (mGravity * particle->mass * mass) / length; float force = (scaleVelocity * _gravity * particle->mass * _mass) / length; particle->direction += force * distance * deltaTime * calculateAffectSpecialisationFactor(particle); } } }