From 1f279ca7131192207c60bfbc6629cf2079222eb2 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Mon, 6 Dec 2021 12:19:02 -0600 Subject: [PATCH 1/3] Updated viewport to hide the transform maniuplators for entities marked as read only. Signed-off-by: Chris Galvan --- .../EditorTransformComponentSelection.cpp | 27 +++++++++++++++++++ .../EditorTransformComponentSelection.h | 5 ++++ 2 files changed, 32 insertions(+) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp index f43e8225a6..14344f33f9 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -1019,6 +1020,7 @@ namespace AzToolsFramework EditorManipulatorCommandUndoRedoRequestBus::Handler::BusConnect(entityContextId); EditorContextMenuBus::Handler::BusConnect(); ViewportInteraction::ViewportSettingsNotificationBus::Handler::BusConnect(ViewportUi::DefaultViewportId); + ReadOnlyEntityPublicNotificationBus::Handler::BusConnect(entityContextId); CreateTransformModeSelectionCluster(); CreateSpaceSelectionCluster(); @@ -1054,6 +1056,7 @@ namespace AzToolsFramework m_pivotOverrideFrame.Reset(); + ReadOnlyEntityPublicNotificationBus::Handler::BusDisconnect(); ViewportInteraction::ViewportSettingsNotificationBus::Handler::BusDisconnect(); EditorContextMenuBus::Handler::BusConnect(); EditorManipulatorCommandUndoRedoRequestBus::Handler::BusDisconnect(); @@ -3623,6 +3626,22 @@ namespace AzToolsFramework m_selectedEntityIds.erase(focusRoot); } } + + // Do not create maniuplators for any entities marked as read only + if (auto readOnlyEntityPublicInterface = AZ::Interface::Get()) + { + for (auto it = m_selectedEntityIds.begin(); it != m_selectedEntityIds.end();) + { + if (readOnlyEntityPublicInterface->IsReadOnly(*it)) + { + it = m_selectedEntityIds.erase(it); + } + else + { + ++it; + } + } + } } void EditorTransformComponentSelection::OnTransformChanged( @@ -3830,6 +3849,14 @@ namespace AzToolsFramework m_snappingCluster.TrySetVisible(m_viewportUiVisible && !m_selectedEntityIds.empty()); } + void EditorTransformComponentSelection::OnReadOnlyEntityStatusChanged(const AZ::EntityId& entityId, [[maybe_unused]] bool readOnly) + { + if (IsEntitySelected(entityId)) + { + RefreshSelectedEntityIdsAndRegenerateManipulators(); + } + } + namespace ETCS { // little raii wrapper to switch a value from true to false and back diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h index afc290380b..7b3ba08894 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -160,6 +161,7 @@ namespace AzToolsFramework , private EditorManipulatorCommandUndoRedoRequestBus::Handler , private AZ::TransformNotificationBus::MultiHandler , private ViewportInteraction::ViewportSettingsNotificationBus::Handler + , private ReadOnlyEntityPublicNotificationBus::Handler { public: AZ_CLASS_ALLOCATOR_DECL @@ -297,6 +299,9 @@ namespace AzToolsFramework // ViewportSettingsNotificationBus overrides ... void OnGridSnappingChanged(bool enabled) override; + // ReadOnlyEntityPublicNotificationBus overrides ... + void OnReadOnlyEntityStatusChanged(const AZ::EntityId& entityId, bool readOnly) override; + // Helpers to safely interact with the TransformBus (requests). void SetEntityWorldTranslation(AZ::EntityId entityId, const AZ::Vector3& worldTranslation); void SetEntityLocalTranslation(AZ::EntityId entityId, const AZ::Vector3& localTranslation); From e24323660b0c707813a03336977bdf7e38834583 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Mon, 6 Dec 2021 12:44:52 -0600 Subject: [PATCH 2/3] Fixed typo. Signed-off-by: Chris Galvan --- .../ViewportSelection/EditorTransformComponentSelection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp index 14344f33f9..df4f041a51 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp @@ -3627,7 +3627,7 @@ namespace AzToolsFramework } } - // Do not create maniuplators for any entities marked as read only + // Do not create manipulators for any entities marked as read only if (auto readOnlyEntityPublicInterface = AZ::Interface::Get()) { for (auto it = m_selectedEntityIds.begin(); it != m_selectedEntityIds.end();) From 10e95cd863ab951c2a30c2ed2e452c7a4833d180 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Mon, 6 Dec 2021 14:21:00 -0600 Subject: [PATCH 3/3] Updated logic to use AZStd::erase_if Signed-off-by: Chris Galvan --- .../EditorTransformComponentSelection.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp index df4f041a51..f54da3b089 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp @@ -3630,17 +3630,13 @@ namespace AzToolsFramework // Do not create manipulators for any entities marked as read only if (auto readOnlyEntityPublicInterface = AZ::Interface::Get()) { - for (auto it = m_selectedEntityIds.begin(); it != m_selectedEntityIds.end();) - { - if (readOnlyEntityPublicInterface->IsReadOnly(*it)) + AZStd::erase_if( + m_selectedEntityIds, + [readOnlyEntityPublicInterface](auto entityId) { - it = m_selectedEntityIds.erase(it); + return readOnlyEntityPublicInterface->IsReadOnly(entityId); } - else - { - ++it; - } - } + ); } }