bevy/crates/bevy_animation/src
robtfm 9ca5540b75
apply finished animations (#14743)
# Objective

fix #14742

## Solution

the issue arises because "finished" animations (where current time >=
last keyframe time) are not applied at all.
when transitioning from a finished animation to another later-indexed
anim, the transition kind-of works because the finished anim is skipped,
then the new anim is applied with a lower weight (weight / total_weight)
when transitioning from a finished animation to another earlier-indexed
anim, the transition is instant as the new anim is applied with 1.0 (as
weight == total_weight for the first applied), then the finished
animation is skipped.

to fix this we can always apply every animation based on the nearest 2
keyframes, and clamp the interpolation between them to [0,1].

pros:
- finished animations can be transitioned out of correctly
- blended animations where some curves have a last-keyframe before the
end of the animation will blend properly
- animations will actually finish on their last keyframe, rather than a
fraction of a render-frame before the end

cons:
- we have to re-apply finished animations every frame whether it's
necessary or not. i can't see a way to avoid this.
2024-08-15 15:10:23 +00:00
..
animatable.rs Remove ClampColor (#13307) 2024-05-10 13:15:56 +00:00
graph.rs Optimize common usages of AssetReader (#14082) 2024-07-01 19:59:42 +00:00
lib.rs apply finished animations (#14743) 2024-08-15 15:10:23 +00:00
transition.rs Fix repeated animation transition bug (#14411) 2024-07-22 19:17:46 +00:00
util.rs Animatable trait for interpolation and blending (#4482) 2024-02-02 21:19:37 +00:00