fix scaling issue with collider offset manipulators

Signed-off-by: greerdv <greerdv@amazon.com>
This commit is contained in:
greerdv
2022-02-04 16:35:49 +00:00
parent d37315c2af
commit bb4c896311
2 changed files with 12 additions and 7 deletions
+10 -6
View File
@@ -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)
+2 -1
View File
@@ -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;
};