/**
  * <code>performAction</code> rotates the camera about it's up vector or lock axis at a speed of
  * movement speed * time. Where time is the time between frames and 1 corresponds to 1 second.
  *
  * @see com.jme.input.action.KeyInputAction#performAction(InputActionEvent)
  */
 public void performAction(InputActionEvent evt) {
   incr.loadIdentity();
   if (lockAxis == null) {
     node.getLocalRotation().getRotationColumn(1, tempVa);
     tempVa.normalizeLocal();
     incr.fromAngleNormalAxis(-speed * evt.getTime(), tempVa);
   } else {
     incr.fromAngleNormalAxis(-speed * evt.getTime(), lockAxis);
   }
   node.getLocalRotation()
       .fromRotationMatrix(incr.mult(node.getLocalRotation().toRotationMatrix(tempMa), tempMb));
   node.getLocalRotation().normalize();
 }
 /**
  * <code>performAction</code> moves the camera along the negative left vector for a given distance
  * of speed * time.
  *
  * @see com.jme.input.action.KeyInputAction#performAction(InputActionEvent)
  */
 public void performAction(InputActionEvent evt) {
   Vector3f loc = node.getLocalTranslation();
   loc =
       loc.addLocal(
           node.getLocalRotation().getRotationColumn(0, tempVa).multLocal(-speed * evt.getTime()));
   node.setLocalTranslation(loc);
 }
 /**
  * Sets an object to animate. The object's index is <code>index</code> and it's parent index is
  * <code>parentIndex</code>. A parent index of -1 indicates it has no parent.
  *
  * @param objChange The spatial that will be updated by this SpatialTransformer.
  * @param index The index of that spatial in this transformer's array
  * @param parentIndex The parentIndex in this transformer's array for this Spatial
  */
 public void setObject(Spatial objChange, int index, int parentIndex) {
   toChange[index] = objChange;
   pivots[index].setTranslation(objChange.getLocalTranslation());
   pivots[index].setScale(objChange.getLocalScale());
   pivots[index].setRotationQuaternion(objChange.getLocalRotation());
   parentIndexes[index] = parentIndex;
 }
예제 #4
0
  public static void deepRotate(Spatial s, int x, int y, int z) {
    Quaternion q = s.getLocalRotation();
    //  only transform objects with non-zero rotation
    if (q.x != 0 || q.y != 0 || q.z != 0 || q.w != 1) {
      s.setLocalRotation(q.addLocal(Rotator.fromThreeAngles(x, y, z)));
    }

    if (s instanceof Node) {
      if (((Node) s).getChildren() != null) {
        for (Spatial child : ((Node) s).getChildren()) {
          deepRotate(child, x, y, z);
        }
      }
    }
  }
예제 #5
0
  /**
   * Configurable method to print information about an object.
   *
   * @param toUse
   * @param s
   * @param recursive
   * @param translation
   * @param rotation
   * @param scale
   */
  public static void printInformation(
      Logger toUse,
      Spatial s,
      boolean recursive,
      boolean translation,
      boolean rotation,
      boolean scale) {
    logger.info(s.getClass().getSimpleName() + ": " + s.getName());
    if (translation)
      toUse.info(
          s.getName()
              + " Translation: "
              + s.getLocalTranslation().x
              + ","
              + s.getLocalTranslation().y
              + ","
              + s.getLocalTranslation().z);
    if (rotation) {
      float[] angles = s.getLocalRotation().toAngles(null);
      toUse.info(s.getName() + " Rotation: " + angles[0] + "," + angles[1] + "," + angles[2]);
    }
    if (scale)
      toUse.info(
          s.getName()
              + " Scale: "
              + s.getLocalScale().x
              + ","
              + s.getLocalScale().y
              + ","
              + s.getLocalScale().z);

    if (recursive) {
      if (s instanceof Node) {
        if (((Node) s).getQuantity() > 0) {
          for (Spatial child : ((Node) s).getChildren()) {
            printInformation(toUse, child, recursive, translation, rotation, scale);
          }
        }
      }
    }
  }
 public void update(float time) {
   // //TODO: We only take care of walking at the moment
   // 2 events ?? why ?
   super.update(time);
   // TODO: Take this out and register individual actions !
   Vector3f location = player.getLocalTranslation();
   Quaternion rotation = player.getLocalRotation();
   boolean forward = KeyBindingManager.getKeyBindingManager().isValidCommand(PROP_KEY_FORWARD);
   boolean backward = KeyBindingManager.getKeyBindingManager().isValidCommand(PROP_KEY_BACKWARD);
   int moveStatus = ClientPlayerData.getInstance().getPlayer().getMoveStatus();
   // TODO: Refactor !
   if (!(forward && backward)) {
     if (!forward && (moveStatus == Globals.WALKING || moveStatus == Globals.RUNNING)) {
       sendMovementEvent(Globals.STANDING, EventTypes.MOVEMENT_STOP_WALK, location, rotation);
     } else if (forward && moveStatus != Globals.WALKING) {
       sendMovementEvent(Globals.WALKING, EventTypes.MOVEMENT_START_WALK, location, rotation);
     } else if (!backward && moveStatus == Globals.WALKING_BACKWARD) {
       sendMovementEvent(Globals.STANDING, EventTypes.MOVEMENT_STOP_WALK, location, rotation);
     } else if (backward && moveStatus != Globals.WALKING_BACKWARD) {
       sendMovementEvent(
           Globals.WALKING_BACKWARD, EventTypes.MOVEMENT_START_WALK_BACKWARDS, location, rotation);
     }
   }
   boolean turnLeft = KeyBindingManager.getKeyBindingManager().isValidCommand(PROP_KEY_LEFT);
   boolean turnRight = KeyBindingManager.getKeyBindingManager().isValidCommand(PROP_KEY_RIGHT);
   if (!(turnRight && turnLeft)) {
     int turnStatus = ClientPlayerData.getInstance().getPlayer().getTurnStatus();
     if (turnLeft && turnStatus != Globals.TURN_LEFT) {
       sendTurnMovementEvent(
           Globals.TURN_LEFT, EventTypes.MOVEMENT_START_TURN_LEFT, location, rotation);
     } else if (!turnLeft && turnStatus == Globals.TURN_LEFT) {
       sendTurnMovementEvent(Globals.NO_TURN, EventTypes.MOVEMENT_STOP_TURN, location, rotation);
     } else if (turnRight && turnStatus != Globals.TURN_RIGHT) {
       sendTurnMovementEvent(
           Globals.TURN_RIGHT, EventTypes.MOVEMENT_START_TURN_RIGHT, location, rotation);
     } else if (!turnRight && turnStatus == Globals.TURN_RIGHT) {
       sendTurnMovementEvent(Globals.NO_TURN, EventTypes.MOVEMENT_STOP_TURN, location, rotation);
     }
   }
 }
예제 #7
0
 /**
  * Rotate a node by the current setting of incr matrix
  *
  * @param node The node to rotate
  */
 private static void rotateByIncr(Spatial node) {
   node.getLocalRotation()
       .fromRotationMatrix(incr.mult(node.getLocalRotation().toRotationMatrix(tempMa), tempMb));
   node.getLocalRotation().normalize();
 }
예제 #8
0
 /**
  * Rotate a node around one of its axes
  *
  * @param node The node to rotate
  * @param localAxisIndex The index of the local axis around which to rotate
  */
 public static void rotate(Spatial node, int localAxisIndex, float angle) {
   incr.fromAngleNormalAxis(
       angle, node.getLocalRotation().getRotationColumn(localAxisIndex, tempVa).normalizeLocal());
   rotateByIncr(node);
 }