fix scaling issue with collider offset manipulators
Signed-off-by: greerdv <greerdv@amazon.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user