apply method
void
apply(
- Skeleton skeleton,
- double lastTime,
- double time,
- List<
Event?> events, - double alpha,
- MixPose pose,
- 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;
}
}