diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2022-11-28 08:06:25 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2022-11-28 08:06:25 +0100 |
commit | c7c9aa8d8bd741f5d0aaca31780ab648f5614111 (patch) | |
tree | fc9cc27429b4aa36617a6fe4d7d14c299359d2b4 | |
parent | d4c4a446075e1c37cfb1fee3316de807757ffcc2 (diff) | |
parent | 1193c2641b929ca4099dcba99a4394cfa872fc3d (diff) |
Merge pull request #69240 from TokageItLab/fix-anim-tree-value-track-cache-bug
Fixed AnimationTree `TrackCacheValue` bug for special case blending
-rw-r--r-- | scene/animation/animation_tree.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/scene/animation/animation_tree.cpp b/scene/animation/animation_tree.cpp index 99d450fa5b..8729ab156b 100644 --- a/scene/animation/animation_tree.cpp +++ b/scene/animation/animation_tree.cpp @@ -800,9 +800,18 @@ bool AnimationTree::_update_caches(AnimationPlayer *player) { } } else if (track_cache_type == Animation::TYPE_VALUE) { // If it has at least one angle interpolation, it also uses angle interpolation for blending. - TrackCacheValue *track_value = memnew(TrackCacheValue); + TrackCacheValue *track_value = static_cast<TrackCacheValue *>(track); + bool was_discrete = track_value->is_discrete; + bool was_using_angle = track_value->is_using_angle; track_value->is_discrete |= anim->value_track_get_update_mode(i) == Animation::UPDATE_DISCRETE || anim->value_track_get_update_mode(i) == Animation::UPDATE_TRIGGER; track_value->is_using_angle |= anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_LINEAR_ANGLE || anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_CUBIC_ANGLE; + + if (was_discrete != track_value->is_discrete) { + WARN_PRINT_ONCE("Tracks with different update modes are blended. Blending prioritizes Discrete/Trigger mode, so other update mode tracks will not be blended."); + } + if (was_using_angle != track_value->is_using_angle) { + WARN_PRINT_ONCE("Tracks for rotation with different interpolation types are blended. Blending prioritizes angle interpolation, so the blending result uses the shortest path referenced to the initial (RESET animation) value."); + } } track->setup_pass = setup_pass; |