b2_circle_contact.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // MIT License
  2. // Copyright (c) 2019 Erin Catto
  3. // Permission is hereby granted, free of charge, to any person obtaining a copy
  4. // of this software and associated documentation files (the "Software"), to deal
  5. // in the Software without restriction, including without limitation the rights
  6. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  7. // copies of the Software, and to permit persons to whom the Software is
  8. // furnished to do so, subject to the following conditions:
  9. // The above copyright notice and this permission notice shall be included in all
  10. // copies or substantial portions of the Software.
  11. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  12. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  13. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  14. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  15. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  16. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  17. // SOFTWARE.
  18. #include "b2_circle_contact.h"
  19. #include "box2d/b2_block_allocator.h"
  20. #include "box2d/b2_body.h"
  21. #include "box2d/b2_fixture.h"
  22. #include "box2d/b2_time_of_impact.h"
  23. #include "box2d/b2_world_callbacks.h"
  24. #include <new>
  25. b2Contact* b2CircleContact::Create(b2Fixture* fixtureA, int32, b2Fixture* fixtureB, int32, b2BlockAllocator* allocator)
  26. {
  27. void* mem = allocator->Allocate(sizeof(b2CircleContact));
  28. return new (mem) b2CircleContact(fixtureA, fixtureB);
  29. }
  30. void b2CircleContact::Destroy(b2Contact* contact, b2BlockAllocator* allocator)
  31. {
  32. ((b2CircleContact*)contact)->~b2CircleContact();
  33. allocator->Free(contact, sizeof(b2CircleContact));
  34. }
  35. b2CircleContact::b2CircleContact(b2Fixture* fixtureA, b2Fixture* fixtureB)
  36. : b2Contact(fixtureA, 0, fixtureB, 0)
  37. {
  38. b2Assert(m_fixtureA->GetType() == b2Shape::e_circle);
  39. b2Assert(m_fixtureB->GetType() == b2Shape::e_circle);
  40. }
  41. void b2CircleContact::Evaluate(b2Manifold* manifold, const b2Transform& xfA, const b2Transform& xfB)
  42. {
  43. b2CollideCircles(manifold,
  44. (b2CircleShape*)m_fixtureA->GetShape(), xfA,
  45. (b2CircleShape*)m_fixtureB->GetShape(), xfB);
  46. }