Guest User

Untitled

a guest
May 13th, 2020
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. for(u32 CollisionIndex = 0;
  2. CollisionIndex < GameState->CollisionCount;
  3. CollisionIndex++)
  4. {
  5. collision_data *Collision = GameState->Collisions + CollisionIndex;
  6.  
  7. for(u32 ContactIndex = 0;
  8. ContactIndex < Collision->Manifold.ContactCount;
  9. )
  10. {
  11. contact_point *Contact = Collision->Manifold.Contacts + ContactIndex;
  12.  
  13. vec3 NewGlobalA = Collision->A->RigidBody.P + Collision->A->RigidBody.Orientation*Contact->LocalA;
  14. vec3 NewGlobalB = Collision->B->RigidBody.P + Collision->B->RigidBody.Orientation*Contact->LocalB;
  15. vec3 rAB = NewGlobalB - NewGlobalA;
  16.  
  17. vec3 rA = Contact->GlobalA - NewGlobalA;
  18. vec3 rB = Contact->GlobalB - NewGlobalB;
  19.  
  20. b32 StillPenetrating = (Dot(Contact->Normal, rAB) >= 0.0f);
  21. b32 rACloseEnough = (LengthSq(rA) <= PersistentThresholdSq);
  22. b32 rBCloseEnough = (LengthSq(rB) <= PersistentThresholdSq);
  23. if(StillPenetrating && rACloseEnough && rBCloseEnough)
  24. {
  25. Contact->Persistent = true;
  26. ContactIndex++;
  27. }
  28. else
  29. {
  30. Collision->Manifold.Contacts[ContactIndex] = Collision->Manifold.Contacts[--Collision->Manifold.ContactCount];
  31. }
  32. }
  33. }
Advertisement
Add Comment
Please, Sign In to add comment