/**
  * Uses {@link #getTrackTime()} to compute the <code>animationTime</code>, which is between
  * {@link #getAnimationStart()} and {@link #getAnimationEnd()}. When the <code>trackTime</code>
  * is 0, the <code>animationTime</code> is equal to the <code>animationStart</code> time.
  */
 public float getAnimationTime() {
   if (loop) {
     float duration = animationEnd - animationStart;
     if (duration == 0) return animationStart;
     return (trackTime % duration) + animationStart;
   }
   return Math.min(trackTime + animationStart, animationEnd);
 }
  private void setCurrent(int index, TrackEntry current, boolean interrupt) {
    TrackEntry from = expandToIndex(index);
    tracks.set(index, current);

    if (from != null) {
      if (interrupt) queue.interrupt(from);
      current.mixingFrom = from;
      current.mixTime = 0;

      from.timelinesRotation.clear(); // Reset rotation for mixing out, in case entry was mixed in.

      // If not completely mixed in, set mixAlpha so mixing out happens from current mix to zero.
      if (from.mixingFrom != null && from.mixDuration > 0)
        current.mixAlpha *= Math.min(from.mixTime / from.mixDuration, 1);
    }

    queue.start(current);
  }