diff --git a/Source/Engine/Level/Actors/Ragdoll.cpp b/Source/Engine/Level/Actors/Ragdoll.cpp index 756d126d1..f31be0ac9 100644 --- a/Source/Engine/Level/Actors/Ragdoll.cpp +++ b/Source/Engine/Level/Actors/Ragdoll.cpp @@ -39,6 +39,9 @@ float Ragdoll::InitBone(RigidBody* rigidBody, int32& nodeIndex, Transform& local node.Decompose(nodeT); localOffset = nodeT.WorldToLocal(rigidBody->GetLocalTransform()); _bonesOffsets[rigidBody] = localOffset; + + // Initialize body + rigidBody->SetSolverIterationCounts(PositionSolverIterations, VelocitySolverIterations); } return weight; } diff --git a/Source/Engine/Level/Actors/Ragdoll.h b/Source/Engine/Level/Actors/Ragdoll.h index b79426fbc..29f84a02f 100644 --- a/Source/Engine/Level/Actors/Ragdoll.h +++ b/Source/Engine/Level/Actors/Ragdoll.h @@ -31,6 +31,20 @@ public: API_FIELD(Attributes="EditorOrder(20), EditorDisplay(\"Ragdoll\")") Dictionary BonesWeights; + /// + /// The minimum number of position iterations the physics solver should perform for bodies in this ragdoll. Higher values improve stability but affect performance. + /// + /// + API_FIELD(Attributes="EditorOrder(100), EditorDisplay(\"Ragdoll\"), Limit(1, 255)") + uint8 PositionSolverIterations = 8; + + /// + /// The minimum number of velocity iterations the physics solver should perform for bodies in this ragdoll. Higher values improve stability but affect performance. + /// + /// + API_FIELD(Attributes="EditorOrder(100), EditorDisplay(\"Ragdoll\"), Limit(1, 255)") + uint8 VelocitySolverIterations = 2; + public: ///