|
|
@@ -37,3 +37,44 @@ def test_box_into_sphere():
|
|
|
# No collision
|
|
|
entry = make_collision(CollisionBox((0, 0, 10), 6, 6, 6), sphere)[0]
|
|
|
assert entry is None
|
|
|
+
|
|
|
+
|
|
|
+def test_capsule_into_sphere():
|
|
|
+ # First test a sphere that is fully touching the inner line of the capsule
|
|
|
+ capsule = CollisionCapsule((0, 0, 1.0), (10, 0, 1.0), 1.0)
|
|
|
+ sphere = CollisionSphere(5, 0, 1.5, 1.0)
|
|
|
+
|
|
|
+ entry = make_collision(capsule, sphere)[0]
|
|
|
+ assert entry is not None
|
|
|
+ assert entry.get_from() == capsule
|
|
|
+ assert entry.get_into() == sphere
|
|
|
+
|
|
|
+ # Now test one that merely grazes.
|
|
|
+ entry = make_collision(CollisionCapsule((0, 0, 0), (10, 0, 0), 1.0), sphere)[0]
|
|
|
+ assert entry is not None
|
|
|
+
|
|
|
+ # No collision
|
|
|
+ entry = make_collision(CollisionCapsule((0, 0, 0), (10, 0, 0), 0.25), sphere)[0]
|
|
|
+ assert entry is None
|
|
|
+
|
|
|
+ # Degenerate case: capsule is actually a sphere.
|
|
|
+ entry = make_collision(CollisionCapsule((5, 0, 0), (5, 0, 0), 1.0), sphere)[0]
|
|
|
+ assert entry is not None
|
|
|
+
|
|
|
+ # Degenerate case, but not colliding.
|
|
|
+ entry = make_collision(CollisionCapsule((5, 0, 0), (5, 0, 0), 0.25), sphere)[0]
|
|
|
+ assert entry is None
|
|
|
+
|
|
|
+
|
|
|
+def test_segment_into_sphere():
|
|
|
+ segment = CollisionSegment((0, 0, 0), (10, 0, 0))
|
|
|
+ sphere = CollisionSphere(5, 0, 0.5, 1.0)
|
|
|
+
|
|
|
+ entry = make_collision(segment, sphere)[0]
|
|
|
+ assert entry is not None
|
|
|
+ assert entry.get_from() == segment
|
|
|
+ assert entry.get_into() == sphere
|
|
|
+
|
|
|
+ # No collision
|
|
|
+ entry = make_collision(CollisionSegment((0, 0, 0), (3, 0, 0)), sphere)[0]
|
|
|
+ assert entry is None
|