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
..scaleX = bone.data.scaleX
..scaleY = bone.data.scaleY;
} else if (pose == MixPose.current) {
bone
..scaleX += (bone.data.scaleX - bone.scaleX) * alpha
..scaleY += (bone.data.scaleY - bone.scaleY) * 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] * bone.data.scaleX;
y = frames[frames.length + TranslateTimeline.prevY] * bone.data.scaleY;
} 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) *
bone.data.scaleX;
y = (y + (frames[frame + TranslateTimeline.y] - y) * percent) *
bone.data.scaleY;
}
if (alpha == 1) {
bone
..scaleX = x
..scaleY = y;
} else {
double bx = 0.0, by = 0.0;
if (pose == MixPose.setup) {
bx = bone.data.scaleX;
by = bone.data.scaleY;
} else {
bx = bone.scaleX;
by = bone.scaleY;
}
// Mixing out uses sign of setup or current pose, else use sign of key.
if (direction == MixDirection.mixOut) {
x = x.abs() * MathUtils.signum(bx);
y = y.abs() * MathUtils.signum(by);
} else {
bx = bx.abs() * MathUtils.signum(x);
by = by.abs() * MathUtils.signum(y);
}
bone
..scaleX = bx + (x - bx) * alpha
..scaleY = by + (y - by) * alpha;
}
}