Ejemplo n.º 1
0
    def update_root_nodepath(self, nodepath):
        entity = self._entity
        component = self._class_component

        # Find appropriate mesh source
        mesh_name = component.mesh_name
        if mesh_name is None:
            physics_node = BulletRigidBodyNode()

            # Load mesh from first MeshComponent
            for cls_component in entity.components.values():
                if isinstance(cls_component, MeshComponent):
                    shape = self._shape_from_mesh_component(
                        entity, cls_component)
                    physics_node.add_shape(shape)
                    break

        else:
            physics_node = self._node_from_bam_name(entity, mesh_name)

        # Set mass
        if component.mass is not None:
            physics_node.set_mass(component.mass)

        physics_node.notify_collisions(True)
        physics_node.set_deactivation_enabled(False)

        physics_nodepath = NodePath(physics_node)
        nodepath.reparent_to(physics_nodepath)

        self.body = physics_node
        self._nodepath = physics_nodepath

        return physics_nodepath