Bläddra i källkod

tests: add capsule-into-sphere and segment-into-sphere tests

rdb 6 år sedan
förälder
incheckning
e0d6e07a93
2 ändrade filer med 42 tillägg och 0 borttagningar
  1. 1 0
      tests/collide/collisions.py
  2. 41 0
      tests/collide/test_into_sphere.py

+ 1 - 0
tests/collide/collisions.py

@@ -1,6 +1,7 @@
 from panda3d.core import CollisionNode, NodePath
 from panda3d.core import CollisionTraverser, CollisionHandlerQueue
 from panda3d.core import CollisionSphere, CollisionBox, CollisionPolygon
+from panda3d.core import CollisionCapsule, CollisionSegment
 from panda3d.core import Point3, Vec3
 
 

+ 41 - 0
tests/collide/test_into_sphere.py

@@ -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