panda3d/tests/collide/test_into_sphere.py
2019-04-09 13:44:20 +02:00

90 lines
2.9 KiB
Python

from collisions import *
def test_sphere_into_sphere():
sphere1 = CollisionSphere(0, 0, 3, 3)
sphere2 = CollisionSphere(0, 0, 0, 3)
entry = make_collision(sphere1, sphere2)[0]
assert entry is not None
assert entry.get_from() == sphere1
assert entry.get_into() == sphere2
# Colliding just on the edge
entry, np_from, np_into = make_collision(CollisionSphere(0, 0, 10, 7), sphere2)
assert entry.get_surface_point(np_from) == Point3(0, 0, 3)
assert entry.get_surface_normal(np_into) == Vec3(0, 0, 1) # Testing surface normal
# No collision
entry = make_collision(CollisionSphere(0, 0, 10, 6), sphere2)[0]
assert entry is None
def test_box_into_sphere():
box = CollisionBox((0, 0, 0), 2, 3, 4)
sphere = CollisionSphere(0, 0, 0, 3)
entry = make_collision(box, sphere)[0]
assert entry is not None
assert entry.get_from() == box
assert entry.get_into() == sphere
# Colliding just on the edge
entry, np_from, np_into = make_collision(CollisionBox((0, 0, 10), 6, 6, 7), sphere)
assert entry.get_surface_point(np_from) == Point3(0, 0, 3)
assert entry.get_surface_normal(np_into) == Vec3(0, 0, 1) # Testing surface normal
# 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
def test_plane_into_sphere():
# CollisionPlane is not a 'from' object
plane = CollisionPlane(Plane(Vec3(0, 0, 1), Point3(0, 0, 0)))
sphere = CollisionSphere(0, 0, 0, 1)
entry = make_collision(plane, sphere)[0]
assert entry is None