void Particle::integrate(float duration) { if (getInverseMass() <= 0.0f) { return; } assert(duration > 0.0f); mPosition.addScaledVector(mVelocity, duration); Vector3 resultingAcc = mAcceleration; resultingAcc.addScaledVector(mForceAccumulation, getInverseMass()); mVelocity.addScaledVector(resultingAcc, duration); //mVelocity = mVelocity * powf(mDamping, duration); clearAccumulator(); }
void GravityForceGenerator::update(floatType timeDelta_ms) { //iterate over the list of collision components for (auto collisionComponent : this->getRegisteredComponents()) { auto physicsComponent = collisionComponent->getPhysicsRelation(); if (physicsComponent == nullptr) { continue; } //don't calculate if it doesn't have a finite mass const floatType inverseMass = physicsComponent->getInverseMass(); if (inverseMass <= 0) { continue; } physicsComponent->addForce(this->gravity * inverseMass); } }