apply method

  1. @override
void apply(
  1. Skeleton skeleton,
  2. double lastTime,
  3. double time,
  4. List<Event?> events,
  5. double alpha,
  6. MixPose pose,
  7. MixDirection direction
)
override

Implementation

@override
void apply(Skeleton skeleton, double lastTime, double time,
    List<Event?> events, double alpha, MixPose pose, MixDirection direction) {
  final Bone bone = skeleton.bones[boneIndex];
  final Float32List frames = this.frames;
  if (time < frames[0]) {
    if (pose == MixPose.setup) {
      bone
        ..shearX = bone.data.shearX
        ..shearY = bone.data.shearY;
    } else if (pose == MixPose.current) {
      bone
        ..shearX += (bone.data.shearX - bone.shearX) * alpha
        ..shearY += (bone.data.shearY - bone.shearY) * alpha;
    }
    return;
  }

  double x = 0.0, y = 0.0;
  if (time >= frames[frames.length - TranslateTimeline.entries]) {
    // Time is after last frame.
    x = frames[frames.length + TranslateTimeline.prevX];
    y = frames[frames.length + TranslateTimeline.prevY];
  } else {
    // Interpolate between the previous frame and the current frame.
    final int frame =
        Animation.binarySearch(frames, time, TranslateTimeline.entries);
    x = frames[frame + TranslateTimeline.prevX];
    y = frames[frame + TranslateTimeline.prevY];
    final double frameTime = frames[frame];
    final double percent = getCurvePercent(
        frame ~/ TranslateTimeline.entries - 1,
        1 -
            (time - frameTime) /
                (frames[frame + TranslateTimeline.prevTime] - frameTime));

    x = x + (frames[frame + TranslateTimeline.x] - x) * percent;
    y = y + (frames[frame + TranslateTimeline.y] - y) * percent;
  }
  if (pose == MixPose.setup) {
    bone
      ..shearX = bone.data.shearX + x * alpha
      ..shearY = bone.data.shearY + y * alpha;
  } else {
    bone
      ..shearX += (bone.data.shearX + x - bone.shearX) * alpha
      ..shearY += (bone.data.shearY + y - bone.shearY) * alpha;
  }
}