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; } }
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(); } }