/** <b>This method foces interpolation mode, regardless of input</b> */
  @SuppressWarnings("unchecked")
  public void read(JMEImporter e) throws IOException {
    InputCapsule cap = e.getCapsule(this);
    name = cap.readString("name", null);
    keyframeTime = cap.readFloatArray("keyframeTime", null);
    interpolationType = cap.readIntArray("interpolationType", null);
    boneTransforms = cap.readSavableArrayList("boneTransforms", null);
    currentTime = cap.readFloat("currentTime", 0);
    currentFrame = cap.readInt("currentFrame", 1);
    prevFrame = cap.readInt("prevFrame", 0);
    endFrame = cap.readInt("endFrame", 0);
    startFrame = cap.readInt("startFrame", 0);
    interpolationRate = cap.readFloat("interpolationRate", DEFAULT_RATE);
    lastTime = cap.readFloat("lastTime", 0);
    cycleMode = cap.readInt("cycleMode", 1);
    interpolate = cap.readBoolean("interpolate", true);
    children = cap.readSavableArrayList("children", null);

    int[] frames = cap.readIntArray("eventFrames", null);

    if (frames != null) {
      for (int i = 0; i < frames.length; i++) {
        ArrayList<Savable> events = cap.readSavableArrayList("event" + frames[i], null);
        for (int j = 0; j < events.size(); j++) {
          AnimationEventManager.getInstance()
              .addAnimationEvent(this, frames[i], (AnimationEvent) events.get(i));
        }
      }
    }

    // Update the method Javadoc when non-interpolation is supported again.
    interpolationType = new int[keyframeTime.length];
    for (int i = 0; i < keyframeTime.length; i++) {
      interpolationType[i] = BoneAnimation.LINEAR;
    }
  }