Exemple #1
0
void Phx::Step(float delta)
{
	if(gravitation)           // Dodajemy grawitacje
	ApplyGravitation();     

	for(int i=0;i<DynamicList.size();i++)  // Liczymy si³y
	DynamicList[i]->CalcForces(delta);

	SearchForCollisions();     // Szukamy kolizji

	for(int i=0;i<Collisions.size();i++)      // Liczymy wstêpne dane
    Collisions[i]->Initialize(delta,Gravity);

	for(int i=0;i<10;i++)
	{
	 for(int i=0;i<Collisions.size();i++)
     Resolve(Collisions[i],delta);                             // Rozwi¹zujemy wszystkie wykryte kolizje

	ResolveJoints(delta);      // Rozwi¹zujemy po³¹czenia

	}

	PositionalCorrection();    // Korygujemy pozycje

	MoveBodies(delta);         // Poruszamy obiekty

	for(int i=0;i<DynamicList.size();i++)
	DynamicList[i]->CalcForces(delta);

	for(int i=0;i<DynamicList.size();i++)
	{
	DynamicList[i]->force.clear();
	DynamicList[i]->torque = 0;
	}
}
Exemple #2
0
void Solver::solvePositions(double dt)
{
	for (int i = 0; i < body.size(); i++)
	{
		Body* b = body[i];
		b->position += b->velocity * dt;
		b->orient += b->angVel * dt;
	}
	for (int j = 0; j < 3; j++)
	{
		ms.SolvePositions();
		for (auto it = contacts.begin(); it != contacts.end(); it++)
			it->PositionalCorrection();
		for (int i = 0; i < joint.size(); i++)
			joint[i]->PositionalCorrection();
	}
	for (int i = 0; i < body.size(); i++)
	{
		for (int j = 0; j < body[i]->shape.size(); j++)
			body[i]->shape[j]->setAABB();
	}
}