diff --git a/Source/Engine/Animations/Graph/AnimGraph.cpp b/Source/Engine/Animations/Graph/AnimGraph.cpp index bd4d63567..41d9a3589 100644 --- a/Source/Engine/Animations/Graph/AnimGraph.cpp +++ b/Source/Engine/Animations/Graph/AnimGraph.cpp @@ -273,6 +273,9 @@ void AnimGraphExecutor::Update(AnimGraphInstanceData& data, float dt) animResult = GetEmptyNodes(); } + // Allow for external override of the local pose (eg. by the ragdoll) + data.LocalPoseOverride(animResult); + // Calculate the global poses for the skeleton nodes { ANIM_GRAPH_PROFILE_EVENT("Global Pose"); diff --git a/Source/Engine/Animations/Graph/AnimGraph.h b/Source/Engine/Animations/Graph/AnimGraph.h index 3a472d223..353422ddd 100644 --- a/Source/Engine/Animations/Graph/AnimGraph.h +++ b/Source/Engine/Animations/Graph/AnimGraph.h @@ -75,7 +75,7 @@ struct RootMotionData /// Container for skeleton nodes transformation hierarchy and any other required data. /// Unified layout for both local and model transformation spaces. /// -struct AnimGraphImpulse +struct FLAXENGINE_API AnimGraphImpulse { /// /// The skeleton nodes transformation hierarchy nodes. Size always matches the Anim Graph skeleton description. @@ -245,7 +245,7 @@ public: /// /// The animation graph instance data storage. Required to update the animation graph. /// -class AnimGraphInstanceData +class FLAXENGINE_API AnimGraphInstanceData { public: @@ -347,6 +347,11 @@ public: /// ScriptingObject* Object; + /// + /// The custom event called after local pose evaluation. + /// + Delegate LocalPoseOverride; + public: ///