示例#1
0
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();
}
示例#2
0
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);
    }
}