fix various issues with collider manipulators and non-uniform scale

Signed-off-by: greerdv <greerdv@amazon.com>
This commit is contained in:
greerdv
2022-02-04 14:02:24 +00:00
parent eb84f54138
commit 08eb115e26
10 changed files with 74 additions and 25 deletions
@@ -10,6 +10,7 @@
#include <PhysX/EditorColliderComponentRequestBus.h>
#include <AzToolsFramework/Manipulators/ManipulatorManager.h>
#include <AzCore/Component/TransformBus.h>
#include <AzCore/Component/NonUniformScaleBus.h>
#include <AzFramework/Viewport/ViewportColors.h>
#include <AzToolsFramework/Manipulators/AngularManipulator.h>
#include <AzToolsFramework/ViewportSelection/EditorSelectionUtil.h>
@@ -29,6 +30,9 @@ namespace PhysX
AZ::Transform worldTransform;
AZ::TransformBus::EventResult(worldTransform, idPair.GetEntityId(), &AZ::TransformInterface::GetWorldTM);
AZ::Vector3 nonUniformScale = AZ::Vector3::CreateOne();
AZ::NonUniformScaleRequestBus::EventResult(nonUniformScale, idPair.GetEntityId(), &AZ::NonUniformScaleRequests::GetScale);
AZ::Quaternion colliderRotation;
PhysX::EditorColliderComponentRequestBus::EventResult(colliderRotation, idPair, &PhysX::EditorColliderComponentRequests::GetColliderRotation);
@@ -36,7 +40,8 @@ namespace PhysX
PhysX::EditorColliderComponentRequestBus::EventResult(colliderOffset, idPair, &PhysX::EditorColliderComponentRequests::GetColliderOffset);
m_rotationManipulators.SetSpace(worldTransform);
m_rotationManipulators.SetLocalPosition(colliderOffset);
m_rotationManipulators.SetNonUniformScale(nonUniformScale);
m_rotationManipulators.SetLocalPosition(nonUniformScale * colliderOffset);
m_rotationManipulators.SetLocalOrientation(colliderRotation);
m_rotationManipulators.AddEntityComponentIdPair(idPair);
m_rotationManipulators.Register(AzToolsFramework::g_mainManipulatorManagerId);
@@ -70,7 +75,11 @@ namespace PhysX
AZ::Vector3 colliderOffset = AZ::Vector3::CreateZero();
PhysX::EditorColliderComponentRequestBus::EventResult(colliderOffset, idPair, &PhysX::EditorColliderComponentRequests::GetColliderOffset);
m_rotationManipulators.SetLocalPosition(colliderOffset);
AZ::Vector3 nonUniformScale = AZ::Vector3::CreateOne();
AZ::NonUniformScaleRequestBus::EventResult(nonUniformScale, idPair.GetEntityId(), &AZ::NonUniformScaleRequests::GetScale);
m_rotationManipulators.SetLocalPosition(nonUniformScale * colliderOffset);
}
void ColliderRotationMode::Teardown(const AZ::EntityComponentIdPair& idPair)