mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-19 13:15:00 -04:00
47 lines
1.8 KiB
Python
47 lines
1.8 KiB
Python
from collisions import *
|
|
from pytest import approx
|
|
|
|
|
|
def test_parabola_into_invsphere():
|
|
invsphere = CollisionInvSphere(1, 1, 1, 5)
|
|
parabola = CollisionParabola()
|
|
parabola.set_t1(0)
|
|
parabola.set_t2(2)
|
|
|
|
# parabola starts from outside the sphere
|
|
parabola.set_parabola(
|
|
LParabola((1, 1, 1), (0, 0, 0), (7, 7, 7)))
|
|
entry, np_from, np_into = make_collision(parabola, invsphere)
|
|
assert (entry.get_surface_point(np_from) -
|
|
invsphere.get_center()).length() == approx(invsphere.get_radius())
|
|
|
|
# parabola starts on the sphere
|
|
parabola.set_parabola(
|
|
LParabola((1, 0, 1), (1, 0, 0), (1, 1, 6)))
|
|
entry, np_from, np_into = make_collision(parabola, invsphere)
|
|
assert entry.get_surface_point(np_from) == (1, 1, 6)
|
|
|
|
# parabola starts from inside the sphere but doesn't collide
|
|
parabola.set_parabola(
|
|
LParabola((-1, -1, -1), (1, 1, 1), (1, 1, 1)))
|
|
entry = make_collision(parabola, invsphere)[0]
|
|
assert entry is None
|
|
|
|
# parabola is inside the sphere and collides on an endpoint
|
|
parabola.set_parabola(
|
|
LParabola((1, 0, 0), (0, 0, 0), (2, 1, 1)))
|
|
entry, np_from, np_into = make_collision(parabola, invsphere)
|
|
assert entry.get_surface_point(np_from) == (6, 1, 1)
|
|
|
|
# parabola starts from inside the sphere and collides on its projectile
|
|
parabola.set_t2(3)
|
|
assert parabola.get_parabola().calc_point(2) == (6, 1, 1)
|
|
entry, np_from, np_into = make_collision(parabola, invsphere)
|
|
assert entry.get_surface_point(np_from) == (6, 1, 1)
|
|
|
|
parabola.set_parabola(
|
|
LParabola((-1, 0, 0), (-1, 0, 0), (2, 1, 1)))
|
|
assert parabola.get_parabola().calc_point(2) == (-4, 1, 1)
|
|
entry, np_from, np_into = make_collision(parabola, invsphere)
|
|
assert entry.get_surface_point(np_from) == (-4, 1, 1)
|