Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- for(u32 CollisionIndex = 0;
- CollisionIndex < GameState->CollisionCount;
- CollisionIndex++)
- {
- collision_data *Collision = GameState->Collisions + CollisionIndex;
- for(u32 ContactIndex = 0;
- ContactIndex < Collision->Manifold.ContactCount;
- )
- {
- contact_point *Contact = Collision->Manifold.Contacts + ContactIndex;
- vec3 NewGlobalA = Collision->A->RigidBody.P + Collision->A->RigidBody.Orientation*Contact->LocalA;
- vec3 NewGlobalB = Collision->B->RigidBody.P + Collision->B->RigidBody.Orientation*Contact->LocalB;
- vec3 rAB = NewGlobalB - NewGlobalA;
- vec3 rA = Contact->GlobalA - NewGlobalA;
- vec3 rB = Contact->GlobalB - NewGlobalB;
- b32 StillPenetrating = (Dot(Contact->Normal, rAB) >= 0.0f);
- b32 rACloseEnough = (LengthSq(rA) <= PersistentThresholdSq);
- b32 rBCloseEnough = (LengthSq(rB) <= PersistentThresholdSq);
- if(StillPenetrating && rACloseEnough && rBCloseEnough)
- {
- Contact->Persistent = true;
- ContactIndex++;
- }
- else
- {
- Collision->Manifold.Contacts[ContactIndex] = Collision->Manifold.Contacts[--Collision->Manifold.ContactCount];
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment