From c4743baba104f3f64206b47700cc1407e3d191a0 Mon Sep 17 00:00:00 2001 From: Silc 'Tokage' Renew <61938263+TokageItLab@users.noreply.github.com> Date: Mon, 9 Oct 2023 17:12:27 +0900 Subject: [PATCH] Patch fix for AnimationMixer: misc type values cannot be blended --- scene/animation/animation_mixer.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/scene/animation/animation_mixer.cpp b/scene/animation/animation_mixer.cpp index d99f5aa3e4a6..cca1c6efbbd0 100644 --- a/scene/animation/animation_mixer.cpp +++ b/scene/animation/animation_mixer.cpp @@ -868,6 +868,27 @@ bool AnimationMixer::_update_caches() { track_value->is_continuous |= anim->value_track_get_update_mode(i) != Animation::UPDATE_DISCRETE; 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; + // TODO: Currently, misc type cannot be blended. In the future, + // it should have a separate blend weight, just as bool is converted to 0 and 1. + // Then, it should provide the correct precedence value. + switch (track_value->init_value.get_type()) { + case Variant::NIL: + case Variant::STRING_NAME: + case Variant::NODE_PATH: + case Variant::RID: + case Variant::OBJECT: + case Variant::CALLABLE: + case Variant::SIGNAL: + case Variant::DICTIONARY: + case Variant::ARRAY: { + WARN_PRINT_ONCE_ED("AnimationMixer: '" + String(E) + "', Value Track: '" + String(path) + "' uses a non-numeric type as key value with UpdateMode.UPDATE_CONTINUOUS. This will not be blended correctly, so it is forced to UpdateMode.UPDATE_DISCRETE."); + track_value->is_continuous = false; + break; + } + default: { + } + } + if (was_continuous != track_value->is_continuous) { WARN_PRINT_ONCE_ED("Value Track: " + String(path) + " has different update modes between some animations may be blended. Blending prioritizes UpdateMode.UPDATE_CONTINUOUS, so the process treat UpdateMode.UPDATE_DISCRETE as UpdateMode.UPDATE_CONTINUOUS with InterpolationType.INTERPOLATION_NEAREST."); }