Browse Source

add setting to viewport message bus

Signed-off-by: amzn-ahmadkrm <[email protected]>
amzn-ahmadkrm 2 năm trước cách đây
mục cha
commit
349093bc1e

+ 5 - 0
Code/Editor/EditorViewportWidget.cpp

@@ -2555,6 +2555,11 @@ bool EditorViewportSettings::HelpersVisible() const
     return AzToolsFramework::HelpersVisible();
 }
 
+bool EditorViewportSettings::OnlyShowHelpersForSelectedEntities() const
+{
+    return AzToolsFramework::OnlyShowHelpersForSelectedEntities();
+}
+
 AZ_CVAR_EXTERNED(bool, ed_previewGameInFullscreen_once);
 
 bool EditorViewportWidget::ShouldPreviewFullscreen() const

+ 1 - 0
Code/Editor/EditorViewportWidget.h

@@ -80,6 +80,7 @@ struct EditorViewportSettings : public AzToolsFramework::ViewportInteraction::Vi
     AZ::Vector2 DefaultEditorCameraOrientation() const override;
     bool IconsVisible() const override;
     bool HelpersVisible() const override;
+    bool OnlyShowHelpersForSelectedEntities() const override;
 };
 
 //! EditorViewportWidget window

+ 4 - 4
Code/Editor/MainWindow.cpp

@@ -1067,16 +1067,16 @@ void MainWindow::InitActions()
             [](QAction* action)
             {
                 Q_ASSERT(action->isCheckable());
-                action->setChecked(AzToolsFramework::HelpersVisible());
+                action->setChecked(AzToolsFramework::OnlyShowHelpersForSelectedEntities());
             })
         .Connect(
             &QAction::triggered,
             []()
             {
-                AzToolsFramework::SetIconsVisible(!AzToolsFramework::IconsVisible());
+                AzToolsFramework::SetOnlyShowHelpersForSelectedEntities(!AzToolsFramework::OnlyShowHelpersForSelectedEntities());
                 AzToolsFramework::ViewportInteraction::ViewportSettingsNotificationBus::Broadcast(
-                    &AzToolsFramework::ViewportInteraction::ViewportSettingNotifications::OnIconsVisibilityChanged,
-                    AzToolsFramework::IconsVisible());
+                    &AzToolsFramework::ViewportInteraction::ViewportSettingNotifications::OnOnlyDrawHelpersForSelectedItemsChanged,
+                    AzToolsFramework::OnlyShowHelpersForSelectedEntities());
             });
 
     // Audio actions

+ 5 - 0
Code/Framework/AzToolsFramework/AzToolsFramework/Viewport/ViewportMessages.h

@@ -220,6 +220,8 @@ namespace AzToolsFramework
             virtual bool IconsVisible() const = 0;
             //! Returns if viewport helpers (additional debug drawing) are visible in the viewport.
             virtual bool HelpersVisible() const = 0;
+            //! Returns if viewport helpers are only drawn for selected entities in the viewport.
+            virtual bool OnlyShowHelpersForSelectedEntities() const = 0;
 
         protected:
             ~ViewportSettingsRequests() = default;
@@ -244,6 +246,9 @@ namespace AzToolsFramework
             virtual void OnIconsVisibilityChanged([[maybe_unused]] bool enabled)
             {
             }
+            virtual void OnOnlyDrawHelpersForSelectedItemsChanged([[maybe_unused]] bool enabled)
+            {
+            }
 
         protected:
             ~ViewportSettingNotifications() = default;

+ 0 - 1
Code/Framework/AzToolsFramework/AzToolsFramework/Viewport/ViewportSettings.cpp

@@ -140,7 +140,6 @@ namespace AzToolsFramework
 
     bool HelpersVisible()
     {
-
         return GetRegistry(HelpersVisibleSetting, true);
     }
 

+ 21 - 3
Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorHelpers.cpp

@@ -80,6 +80,15 @@ namespace AzToolsFramework
         return iconsVisible;
     }
 
+    //helper function to wrap Ebus call to check if helpers and icons should only be drawn for selected entities
+    static bool OnlyDrawHelpersForSelectedEntities(const AzFramework::ViewportId viewportId)
+    {
+        bool onlyDrawHelpersForSelectedEntities = false;
+        ViewportInteraction::ViewportSettingsRequestBus::EventResult(
+            onlyDrawHelpersForSelectedEntities, viewportId, &ViewportInteraction::ViewportSettingsRequestBus::Events::OnlyShowHelpersForSelectedEntities);
+        return onlyDrawHelpersForSelectedEntities;
+    }
+
     float GetIconScale(const float distance)
     {
         return ed_iconMinScale +
@@ -284,16 +293,25 @@ namespace AzToolsFramework
 
         const bool iconsVisible = IconsVisible(viewportInfo.m_viewportId);
         const bool helpersVisible = HelpersVisible(viewportInfo.m_viewportId);
+        const bool onlyDrawSelectedEntities = OnlyDrawHelpersForSelectedEntities(viewportInfo.m_viewportId);
 
         if (helpersVisible)
         {
             for (size_t entityCacheIndex = 0; entityCacheIndex < m_entityDataCache->VisibleEntityDataCount(); ++entityCacheIndex)
             {
                 if (const AZ::EntityId entityId = m_entityDataCache->GetVisibleEntityId(entityCacheIndex);
-                    m_entityDataCache->IsVisibleEntityVisible(entityCacheIndex) && m_entityDataCache->IsVisibleEntitySelected(entityCacheIndex))
+                    m_entityDataCache->IsVisibleEntityVisible(entityCacheIndex))
                 {
-                    // notify components to display
-                    DisplayComponents(entityId, viewportInfo, debugDisplay);
+                    if (onlyDrawSelectedEntities && m_entityDataCache->IsVisibleEntitySelected(entityCacheIndex))
+                    {
+                        // notify components to display
+                        DisplayComponents(entityId, viewportInfo, debugDisplay);
+                    }
+                    else if (!onlyDrawSelectedEntities)
+                    {
+                        DisplayComponents(entityId, viewportInfo, debugDisplay);
+                    }
+                    
                 }
             }
         }