From bb4c89631160651db89f3b9b1fd686ab079208c3 Mon Sep 17 00:00:00 2001 From: greerdv Date: Fri, 4 Feb 2022 16:35:49 +0000 Subject: [PATCH] fix scaling issue with collider offset manipulators Signed-off-by: greerdv --- Gems/PhysX/Code/Editor/ColliderOffsetMode.cpp | 16 ++++++++++------ Gems/PhysX/Code/Editor/ColliderOffsetMode.h | 3 ++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Gems/PhysX/Code/Editor/ColliderOffsetMode.cpp b/Gems/PhysX/Code/Editor/ColliderOffsetMode.cpp index 026eb177ac..2c9b90d5b3 100644 --- a/Gems/PhysX/Code/Editor/ColliderOffsetMode.cpp +++ b/Gems/PhysX/Code/Editor/ColliderOffsetMode.cpp @@ -45,19 +45,19 @@ namespace PhysX m_translationManipulators.InstallLinearManipulatorMouseMoveCallback([this, idPair]( const AzToolsFramework::LinearManipulator::Action& action) { - OnManipulatorMoved(action.LocalPosition(), idPair); + OnManipulatorMoved(action.m_start.m_localPosition, action.m_current.m_localPositionOffset, idPair); }); m_translationManipulators.InstallPlanarManipulatorMouseMoveCallback([this, idPair]( const AzToolsFramework::PlanarManipulator::Action& action) { - OnManipulatorMoved(action.LocalPosition(), idPair); + OnManipulatorMoved(action.m_start.m_localPosition, action.m_current.m_localOffset, idPair); }); m_translationManipulators.InstallSurfaceManipulatorMouseMoveCallback([this, idPair]( const AzToolsFramework::SurfaceManipulator::Action& action) { - OnManipulatorMoved(action.LocalPosition(), idPair); + OnManipulatorMoved(action.m_start.m_localPosition, action.m_current.m_localOffset, idPair); }); } @@ -74,10 +74,14 @@ namespace PhysX m_translationManipulators.Unregister(); } - void ColliderOffsetMode::OnManipulatorMoved(const AZ::Vector3& position, const AZ::EntityComponentIdPair& idPair) + void ColliderOffsetMode::OnManipulatorMoved(const AZ::Vector3& startPosition, const AZ::Vector3& offset, const AZ::EntityComponentIdPair& idPair) { - m_translationManipulators.SetLocalPosition(position); - PhysX::EditorColliderComponentRequestBus::Event(idPair, &PhysX::EditorColliderComponentRequests::SetColliderOffset, position); + AZ::Transform worldTransform = AZ::Transform::CreateIdentity(); + AZ::TransformBus::EventResult(worldTransform, idPair.GetEntityId(), &AZ::TransformBus::Events::GetWorldTM); + const float scale = AZ::GetMax(AZ::MinTransformScale, worldTransform.GetUniformScale()); + const AZ::Vector3 newPosition = startPosition + offset / scale; + m_translationManipulators.SetLocalPosition(newPosition); + PhysX::EditorColliderComponentRequestBus::Event(idPair, &PhysX::EditorColliderComponentRequests::SetColliderOffset, newPosition); } void ColliderOffsetMode::ResetValues(const AZ::EntityComponentIdPair& idPair) diff --git a/Gems/PhysX/Code/Editor/ColliderOffsetMode.h b/Gems/PhysX/Code/Editor/ColliderOffsetMode.h index 6a2e6a8a12..525000a1b1 100644 --- a/Gems/PhysX/Code/Editor/ColliderOffsetMode.h +++ b/Gems/PhysX/Code/Editor/ColliderOffsetMode.h @@ -28,7 +28,8 @@ namespace PhysX void ResetValues(const AZ::EntityComponentIdPair& idPair) override; private: - void OnManipulatorMoved(const AZ::Vector3& position, const AZ::EntityComponentIdPair& idPair); + void OnManipulatorMoved( + const AZ::Vector3& startPosition, const AZ::Vector3& offset, const AZ::EntityComponentIdPair& idPair); AzToolsFramework::TranslationManipulators m_translationManipulators; };