예제 #1
0
 /**
  * Removes all physics controls and joints in the given spatial from the physics space (e.g.
  * before saving to disk) - recursive if node
  *
  * @param spatial the rootnode containing the physics objects
  */
 public void removeAll(Spatial spatial) {
   if (spatial.getControl(RigidBodyControl.class) != null) {
     RigidBodyControl physicsNode = spatial.getControl(RigidBodyControl.class);
     // remove joints with physicsNode as BodyA
     List<PhysicsJoint> joints = physicsNode.getJoints();
     for (Iterator<PhysicsJoint> it1 = joints.iterator(); it1.hasNext(); ) {
       PhysicsJoint physicsJoint = it1.next();
       if (physicsNode.equals(physicsJoint.getBodyA())) {
         removeJoint(physicsJoint);
         // remove(physicsJoint.getBodyB());
       }
     }
     remove(physicsNode);
   } else if (spatial.getControl(PhysicsControl.class) != null) {
     remove(spatial);
   }
   // recursion
   if (spatial instanceof Node) {
     List<Spatial> children = ((Node) spatial).getChildren();
     for (Iterator<Spatial> it = children.iterator(); it.hasNext(); ) {
       Spatial spat = it.next();
       removeAll(spat);
     }
   }
 }
예제 #2
0
 /**
  * removes an object from the physics space
  *
  * @param obj the PhysicsControl or Spatial with PhysicsControl to remove
  */
 public void remove(Object obj) {
   if (obj == null) return;
   if (obj instanceof PhysicsControl) {
     ((PhysicsControl) obj).setPhysicsSpace(null);
   } else if (obj instanceof Spatial) {
     Spatial node = (Spatial) obj;
     for (int i = 0; i < node.getNumControls(); i++) {
       if (node.getControl(i) instanceof PhysicsControl) {
         remove(((PhysicsControl) node.getControl(i)));
       }
     }
   } else if (obj instanceof PhysicsCollisionObject) {
     removeCollisionObject((PhysicsCollisionObject) obj);
   } else if (obj instanceof PhysicsJoint) {
     removeJoint((PhysicsJoint) obj);
   } else {
     throw (new UnsupportedOperationException(
         "Cannot remove this kind of object from the physics space."));
   }
 }