From 2bd2bd508122a9a8ef76606abc700b5cdbafead8 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Fri, 30 Jun 2023 11:02:58 +0200 Subject: [PATCH] Fix crash when modifying animated model skeleton pose from gameplay code during update event --- Source/Engine/Level/Actors/AnimatedModel.cpp | 8 +++++++- Source/Engine/Level/Actors/AnimatedModel.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Source/Engine/Level/Actors/AnimatedModel.cpp b/Source/Engine/Level/Actors/AnimatedModel.cpp index 882026db7..148b57682 100644 --- a/Source/Engine/Level/Actors/AnimatedModel.cpp +++ b/Source/Engine/Level/Actors/AnimatedModel.cpp @@ -603,7 +603,13 @@ void AnimatedModel::OnAnimationUpdated_Sync() // Update synchronous stuff UpdateSockets(); ApplyRootMotion(GraphInstance.RootMotion); - AnimationUpdated(); + if (!_isDuringUpdateEvent) + { + // Prevent stack-overflow when gameplay modifies the pose within the event + _isDuringUpdateEvent = true; + AnimationUpdated(); + _isDuringUpdateEvent = false; + } } void AnimatedModel::OnAnimationUpdated() diff --git a/Source/Engine/Level/Actors/AnimatedModel.h b/Source/Engine/Level/Actors/AnimatedModel.h index ccd0ee3b5..33f206580 100644 --- a/Source/Engine/Level/Actors/AnimatedModel.h +++ b/Source/Engine/Level/Actors/AnimatedModel.h @@ -60,6 +60,7 @@ private: AnimationUpdateMode _actualMode; uint32 _counter; Real _lastMinDstSqr; + bool _isDuringUpdateEvent = false; uint64 _lastUpdateFrame; BlendShapesInstance _blendShapes; ScriptingObjectReference _masterPose;