From 618b1bfd3966e53f36ef5f0167dcaa828fba2f3f Mon Sep 17 00:00:00 2001 From: MineBill Date: Sun, 1 Oct 2023 16:13:49 +0300 Subject: [PATCH] Evaluate transition data before executing the transition rule. --- .../Animations/Graph/AnimGroup.Animation.cpp | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Source/Engine/Animations/Graph/AnimGroup.Animation.cpp b/Source/Engine/Animations/Graph/AnimGroup.Animation.cpp index 73ddbc41c..86b75af86 100644 --- a/Source/Engine/Animations/Graph/AnimGroup.Animation.cpp +++ b/Source/Engine/Animations/Graph/AnimGroup.Animation.cpp @@ -512,18 +512,6 @@ void AnimGraphExecutor::UpdateStateTransitions(AnimGraphContext& context, const transitionIndex++; continue; } - const bool useDefaultRule = EnumHasAnyFlags(transition.Flags, AnimGraphStateTransition::FlagTypes::UseDefaultRule); - if (transition.RuleGraph && !useDefaultRule) - { - // Execute transition rule - auto rootNode = transition.RuleGraph->GetRootNode(); - ASSERT(rootNode); - if (!(bool)eatBox((Node*)rootNode, &rootNode->Boxes[0])) - { - transitionIndex++; - continue; - } - } // Evaluate source state transition data (position, length, etc.) const Value sourceStatePtr = SampleState(stateMachineBucket.CurrentState); @@ -542,6 +530,19 @@ void AnimGraphExecutor::UpdateStateTransitions(AnimGraphContext& context, const transitionData.Position = 0; transitionData.Length = ZeroTolerance; } + + const bool useDefaultRule = EnumHasAnyFlags(transition.Flags, AnimGraphStateTransition::FlagTypes::UseDefaultRule); + if (transition.RuleGraph && !useDefaultRule) + { + // Execute transition rule + auto rootNode = transition.RuleGraph->GetRootNode(); + ASSERT(rootNode); + if (!(bool)eatBox((Node*)rootNode, &rootNode->Boxes[0])) + { + transitionIndex++; + continue; + } + } // Check if can trigger the transition bool canEnter = false;