diff --git a/Nuake/src/Physics/DynamicWorld.cpp b/Nuake/src/Physics/DynamicWorld.cpp index a4e00f66..d8f8f145 100644 --- a/Nuake/src/Physics/DynamicWorld.cpp +++ b/Nuake/src/Physics/DynamicWorld.cpp @@ -33,6 +33,7 @@ #include #include +#include namespace Nuake { @@ -529,14 +530,23 @@ namespace Nuake joltTransform(0, 3), joltTransform(1, 3), joltTransform(2, 3), joltTransform(3, 3) ); + Entity entity = { (entt::entity)entId, Engine::GetCurrentScene().get() }; + if (entity.GetComponent().HasParent) + { + auto& parent = entity.GetComponent().Parent; + auto& parentTransformComponent = parent.GetComponent(); + const Matrix4& parentTransform = parentTransformComponent.GetGlobalTransform(); + + transform = glm::inverse(parentTransform) * transform; + } + Vector3 scale = Vector3(); Quat rotation = Quat(); Vector3 pos = Vector3(); Vector3 skew = Vector3(); Vector4 pesp = Vector4(); glm::decompose(transform, scale, rotation, pos, skew, pesp); - - Entity entity = { (entt::entity)entId, Engine::GetCurrentScene().get() }; + auto& transformComponent = entity.GetComponent(); transformComponent.SetLocalPosition(pos); transformComponent.SetLocalRotation(Quat(bodyRotation.GetW(), bodyRotation.GetX(), bodyRotation.GetY(), bodyRotation.GetZ())); @@ -563,6 +573,15 @@ namespace Nuake joltTransform(0, 3), joltTransform(1, 3), joltTransform(2, 3), joltTransform(3, 3) ); + if(entity.GetComponent().HasParent) + { + auto& parent = entity.GetComponent().Parent; + auto& parentTransformComponent = parent.GetComponent(); + const Matrix4& parentTransform = parentTransformComponent.GetGlobalTransform(); + + transform = glm::inverse(parentTransform) * transform; + } + Vector3 scale = Vector3(); Quat rotation = Quat(); Vector3 pos = Vector3();