from panda3d.core import CullFaceAttrib, Point3, NodePath, Point2, Texture
-from panda3d.bullet import BulletBoxShape, BulletRigidBodyNode
+from panda3d.bullet import BulletBoxShape, BulletRigidBodyNode, BulletGhostNode
from direct.gui.OnscreenText import OnscreenText
from lib.lib.p3d.gfx import P3dGfxMgr
self._plane_node = plane_node
self._count = count
self._cb_inst = cb_inst
- shape = BulletBoxShape((.5, .5, .5))
- self.node = BulletRigidBodyNode('box')
- self.node.add_shape(shape)
+ self._shape = BulletBoxShape((.5, .5, .5))
+ self.node = BulletGhostNode('box')
+ self.node.add_shape(self._shape)
self._np = render.attach_new_node(self.node)
- world.attach_rigid_body(self.node)
- model = loader.load_model('assets/gltf/box/box.gltf')
- model.flatten_light()
- model.reparent_to(self._np)
+ world.attach_ghost(self.node)
+ self._model = loader.load_model('assets/gltf/box/box.gltf')
+ self._model.flatten_light()
+ self._model.reparent_to(self._np)
self._set_outline_model()
self._start_drag_pos = None
self._prev_rot_info = None
return task.cont
def play(self):
+ if not self._instantiated:
+ return
self._world.remove_rigid_body(self.node)
self.node.set_mass(1)
self._world.attach_rigid_body(self.node)
self._start_drag_pos = pos, self._np.get_pos()
loader.load_sfx('assets/audio/sfx/grab.ogg').play()
if not self._instantiated:
+ self._world.remove_ghost(self.node)
+ pos = self._np.get_pos()
+ self._np.remove_node()
+ self.node = BulletRigidBodyNode('box')
+ self.node.add_shape(self._shape)
+ self._np = render.attach_new_node(self.node)
+ self._world.attach_rigid_body(self.node)
+ self._model.reparent_to(self._np)
+ self._np.set_pos(pos)
+ self._set_outline_model()
self._instantiated = True
self._txt.destroy()
self._count -= 1