From 2ba50e267ddcbf3252fcb56beefb624e4a620914 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Mon, 7 Oct 2024 09:40:31 +0200 Subject: [PATCH] ragdoll fix when physics simulation is disabled #958 --- WickedEngine/wiPhysics_Jolt.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/WickedEngine/wiPhysics_Jolt.cpp b/WickedEngine/wiPhysics_Jolt.cpp index 07e62b849..87a58aa2c 100644 --- a/WickedEngine/wiPhysics_Jolt.cpp +++ b/WickedEngine/wiPhysics_Jolt.cpp @@ -1408,12 +1408,15 @@ namespace wi::physics } Ragdoll& ragdoll = *(Ragdoll*)humanoid.ragdoll.get(); + if (humanoid.IsRagdollPhysicsEnabled()) + { + ragdoll.Activate(scene, humanoidEntity); + } + if (IsSimulationEnabled()) { if (humanoid.IsRagdollPhysicsEnabled()) { - ragdoll.Activate(scene, humanoidEntity); - // Apply effects on dynamics if needed: if (scene.weather.IsOceanEnabled()) { @@ -1488,19 +1491,17 @@ namespace wi::physics const Vec3 position = cast(transform->GetPosition()); const Quat rotation = cast(transform->GetRotation()); - Mat44 m = Mat44::sTranslation(position) * Mat44::sRotation(rotation); - m = m * rb.restBasisInverse; m = m * rb.additionalTransform; - rb.prev_position = m.GetTranslation(); - rb.prev_rotation = m.GetQuaternion().Normalized(); - + // Simulation is disabled, update physics state immediately: + rb.prev_position = position; + rb.prev_rotation = rotation; body_interface.SetPositionAndRotation( rb.bodyID, - rb.prev_position, - rb.prev_rotation, - EActivation::DontActivate + m.GetTranslation(), + m.GetQuaternion().Normalized(), + EActivation::Activate ); } }