test_into_sphere.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. from collisions import *
  2. def test_sphere_into_sphere():
  3. sphere1 = CollisionSphere(0, 0, 3, 3)
  4. sphere2 = CollisionSphere(0, 0, 0, 3)
  5. entry = make_collision(sphere1, sphere2)[0]
  6. assert entry is not None
  7. assert entry.get_from() == sphere1
  8. assert entry.get_into() == sphere2
  9. # Colliding just on the edge
  10. entry, np_from, np_into = make_collision(CollisionSphere(0, 0, 10, 7), sphere2)
  11. assert entry.get_surface_point(np_from) == Point3(0, 0, 3)
  12. assert entry.get_surface_normal(np_into) == Vec3(0, 0, 1) # Testing surface normal
  13. # No collision
  14. entry = make_collision(CollisionSphere(0, 0, 10, 6), sphere2)[0]
  15. assert entry is None
  16. def test_box_into_sphere():
  17. box = CollisionBox((0, 0, 0), 2, 3, 4)
  18. sphere = CollisionSphere(0, 0, 0, 3)
  19. entry = make_collision(box, sphere)[0]
  20. assert entry is not None
  21. assert entry.get_from() == box
  22. assert entry.get_into() == sphere
  23. # Colliding just on the edge
  24. entry, np_from, np_into = make_collision(CollisionBox((0, 0, 10), 6, 6, 7), sphere)
  25. assert entry.get_surface_point(np_from) == Point3(0, 0, 3)
  26. assert entry.get_surface_normal(np_into) == Vec3(0, 0, 1) # Testing surface normal
  27. # No collision
  28. entry = make_collision(CollisionBox((0, 0, 10), 6, 6, 6), sphere)[0]
  29. assert entry is None
  30. def test_capsule_into_sphere():
  31. # First test a sphere that is fully touching the inner line of the capsule
  32. capsule = CollisionCapsule((0, 0, 1.0), (10, 0, 1.0), 1.0)
  33. sphere = CollisionSphere(5, 0, 1.5, 1.0)
  34. entry = make_collision(capsule, sphere)[0]
  35. assert entry is not None
  36. assert entry.get_from() == capsule
  37. assert entry.get_into() == sphere
  38. # Now test one that merely grazes.
  39. entry = make_collision(CollisionCapsule((0, 0, 0), (10, 0, 0), 1.0), sphere)[0]
  40. assert entry is not None
  41. # No collision
  42. entry = make_collision(CollisionCapsule((0, 0, 0), (10, 0, 0), 0.25), sphere)[0]
  43. assert entry is None
  44. # Degenerate case: capsule is actually a sphere.
  45. entry = make_collision(CollisionCapsule((5, 0, 0), (5, 0, 0), 1.0), sphere)[0]
  46. assert entry is not None
  47. # Degenerate case, but not colliding.
  48. entry = make_collision(CollisionCapsule((5, 0, 0), (5, 0, 0), 0.25), sphere)[0]
  49. assert entry is None
  50. def test_segment_into_sphere():
  51. segment = CollisionSegment((0, 0, 0), (10, 0, 0))
  52. sphere = CollisionSphere(5, 0, 0.5, 1.0)
  53. entry = make_collision(segment, sphere)[0]
  54. assert entry is not None
  55. assert entry.get_from() == segment
  56. assert entry.get_into() == sphere
  57. # No collision
  58. entry = make_collision(CollisionSegment((0, 0, 0), (3, 0, 0)), sphere)[0]
  59. assert entry is None
  60. def test_plane_into_sphere():
  61. # CollisionPlane is not a 'from' object
  62. plane = CollisionPlane(Plane(Vec3(0, 0, 1), Point3(0, 0, 0)))
  63. sphere = CollisionSphere(0, 0, 0, 1)
  64. entry = make_collision(plane, sphere)[0]
  65. assert entry is None