ya2 · news · projects · code · about

b2f390df390482f7c857ac5bc59b7c6f82a466fd
[pmachines.git] / ya2 / lib / bullet / bullet.py
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
8
9
10 class BulletPhysWorld:
11
12 def __init__(self):
13 self._wld = BWorld()
14 self.__debug_np = None
15
16 def attach_rigid_body(self, rbnode):
17 return self._wld.attach_rigid_body(rbnode)
18
19 def remove_rigid_body(self, rbnode):
20 return self._wld.remove_rigid_body(rbnode)
21
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)
26
27 def ray_test_closest(self, from_pos, to_pos, mask=None):
28 if mask is not 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)
31 return res
32
33 def do_phys(self, dt, max_substeps, stepsize):
34 return self._wld.do_physics(dt, max_substeps, stepsize)
35
36 def set_gravity(self, vec): return self._wld.set_gravity(vec)
37
38 def init_debug(self):
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())
43
44 def stop(self): self.__debug_np.remove_node()
45
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)
50
51 def toggle_dbg(self):
52 hidden = self.__debug_np.is_hidden()
53 (self.__debug_np.show if hidden else self.__debug_np.hide)()
54
55
56 class BulletTriangleMesh:
57
58 def __init__(self):
59 self._mesh = BTriangleMesh()
60
61 def add_geom(self, geom, rm_dupl, xform):
62 return self._mesh.add_geom(geom, rm_dupl, xform)
63
64
65 class BulletTriangleMeshShape:
66
67 def __init__(self, mesh, dynamic):
68 self._mesh_shape = BTriangleMeshShape(mesh._mesh, dynamic=dynamic)
69 #TODO: access to protected member
70
71
72 class BulletRigidBodyNode:
73
74 def __init__(self, name): self._node = BRigidBodyNode(name)
75
76
77 class BulletGhostNode:
78
79 def __init__(self, name): self._node = BGhostNode(name)