1 from panda3d
.bullet
import \
2 BulletWorld
as BWorld
, \
3 BulletDebugNode
as BDebugNode
, \
4 BulletTriangleMesh
as BTriangleMesh
, \
5 BulletTriangleMeshShape
as BTriangleMeshShape
, \
6 BulletRigidBodyNode
as BRigidBodyNode
, \
7 BulletGhostNode
as BGhostNode
10 class BulletPhysWorld
:
14 self
.__debug
_np
= None
16 def attach_rigid_body(self
, rbnode
):
17 return self
._wld
.attach_rigid_body(rbnode
)
19 def remove_rigid_body(self
, rbnode
):
20 return self
._wld
.remove_rigid_body(rbnode
)
22 def attach_ghost(self
, gnode
): return self
._wld
.attach_ghost(gnode
)
23 def remove_ghost(self
, gnode
): return self
._wld
.remove_ghost(gnode
)
24 def attach_vehicle(self
, vehicle
): return self
._wld
.attach_vehicle(vehicle
)
25 def remove_vehicle(self
, vehicle
): return self
._wld
.remove_vehicle(vehicle
)
27 def ray_test_closest(self
, from_pos
, to_pos
, mask
=None):
29 res
= self
._wld
.ray_test_closest(from_pos
, to_pos
, mask
)
30 else: res
= self
._wld
.ray_test_closest(from_pos
, to_pos
)
33 def do_phys(self
, dt
, max_substeps
, stepsize
):
34 return self
._wld
.do_physics(dt
, max_substeps
, stepsize
)
36 def set_gravity(self
, vec
): return self
._wld
.set_gravity(vec
)
39 debug_node
= BDebugNode('Debug')
40 debug_node
.show_bounding_boxes(True)
41 self
.__debug
_np
= render
.attach_new_node(debug_node
)
42 self
._wld
.set_debug_node(self
.__debug
_np
.node())
44 def stop(self
): self
.__debug
_np
.remove_node()
46 def ray_test_all(self
, pt_a
, pt_b
, mask
=None):
47 args
= [pt_a
._vec
, pt_b
._vec
, mask
] if mask
else [pt_a
._vec
, pt_b
._vec
]
48 #TODO: access to protected member
49 return self
._wld
.ray_test_all(*args
)
52 hidden
= self
.__debug
_np
.is_hidden()
53 (self
.__debug
_np
.show
if hidden
else self
.__debug
_np
.hide
)()
56 class BulletTriangleMesh
:
59 self
._mesh
= BTriangleMesh()
61 def add_geom(self
, geom
, rm_dupl
, xform
):
62 return self
._mesh
.add_geom(geom
, rm_dupl
, xform
)
65 class BulletTriangleMeshShape
:
67 def __init__(self
, mesh
, dynamic
):
68 self
._mesh
_shape
= BTriangleMeshShape(mesh
._mesh
, dynamic
=dynamic
)
69 #TODO: access to protected member
72 class BulletRigidBodyNode
:
74 def __init__(self
, name
): self
._node
= BRigidBodyNode(name
)
77 class BulletGhostNode
:
79 def __init__(self
, name
): self
._node
= BGhostNode(name
)