From 3bdb0f5d9b2cd837f2a71566293b2575334ade31 Mon Sep 17 00:00:00 2001 From: Guthrie Adams Date: Mon, 14 Feb 2022 15:29:42 -0600 Subject: [PATCH] Atom Tools: Restoring idle behavior for viewport input behavior controller Signed-off-by: Guthrie Adams --- .../IdleBehavior.h | 21 +++++++++++++++++++ .../IdleBehavior.cpp | 18 ++++++++++++++++ .../ViewportInputBehaviorController.cpp | 6 ++++++ .../Code/atomtoolsframework_files.cmake | 2 ++ .../Viewport/MaterialViewportWidget.cpp | 3 +++ 5 files changed, 50 insertions(+) create mode 100644 Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/ViewportInputBehaviorController/IdleBehavior.h create mode 100644 Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ViewportInputBehaviorController/IdleBehavior.cpp diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/ViewportInputBehaviorController/IdleBehavior.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/ViewportInputBehaviorController/IdleBehavior.h new file mode 100644 index 0000000000..c762927336 --- /dev/null +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/ViewportInputBehaviorController/IdleBehavior.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AtomToolsFramework +{ + class IdleBehavior final : public ViewportInputBehavior + { + public: + IdleBehavior(ViewportInputBehaviorControllerInterface* controller); + virtual ~IdleBehavior() = default; + }; +} // namespace AtomToolsFramework diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ViewportInputBehaviorController/IdleBehavior.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ViewportInputBehaviorController/IdleBehavior.cpp new file mode 100644 index 0000000000..7bf2f378ce --- /dev/null +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ViewportInputBehaviorController/IdleBehavior.cpp @@ -0,0 +1,18 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +namespace AtomToolsFramework +{ + IdleBehavior::IdleBehavior(ViewportInputBehaviorControllerInterface* controller) + : ViewportInputBehavior(controller) + { + } +} // namespace AtomToolsFramework diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ViewportInputBehaviorController/ViewportInputBehaviorController.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ViewportInputBehaviorController/ViewportInputBehaviorController.cpp index fd06427622..3e0398f08e 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ViewportInputBehaviorController/ViewportInputBehaviorController.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ViewportInputBehaviorController/ViewportInputBehaviorController.cpp @@ -280,8 +280,14 @@ namespace AtomToolsFramework void ViewportInputBehaviorController::EvaluateControlBehavior() { auto it = m_behaviorMap.find(m_keys); + if (it == m_behaviorMap.end()) + { + it = m_behaviorMap.find(None); + } + AZStd::shared_ptr nextBehavior = it != m_behaviorMap.end() ? it->second : AZStd::shared_ptr(); + if (m_behavior != nextBehavior) { if (m_behavior) diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/atomtoolsframework_files.cmake b/Gems/Atom/Tools/AtomToolsFramework/Code/atomtoolsframework_files.cmake index 008eb5fe96..5046e28145 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/atomtoolsframework_files.cmake +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/atomtoolsframework_files.cmake @@ -95,6 +95,8 @@ set(FILES Include/AtomToolsFramework/Viewport/ViewportInputBehaviorController/ViewportInputBehavior.h Source/Viewport/ViewportInputBehaviorController/DollyCameraBehavior.cpp Include/AtomToolsFramework/Viewport/ViewportInputBehaviorController/DollyCameraBehavior.h + Source/Viewport/ViewportInputBehaviorController/IdleBehavior.cpp + Include/AtomToolsFramework/Viewport/ViewportInputBehaviorController/IdleBehavior.h Source/Viewport/ViewportInputBehaviorController/MoveCameraBehavior.cpp Include/AtomToolsFramework/Viewport/ViewportInputBehaviorController/MoveCameraBehavior.h Source/Viewport/ViewportInputBehaviorController/PanCameraBehavior.cpp diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportWidget.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportWidget.cpp index 89aecd67a2..06e0945fa3 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportWidget.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportWidget.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -312,6 +313,8 @@ namespace MaterialEditor // Create viewport input controller and regioster its behaviors m_viewportController.reset( aznew ViewportInputBehaviorController(m_cameraEntity->GetId(), m_modelEntity->GetId(), m_iblEntity->GetId())); + m_viewportController->AddBehavior( + ViewportInputBehaviorController::None, AZStd::make_shared(m_viewportController.get())); m_viewportController->AddBehavior( ViewportInputBehaviorController::Lmb, AZStd::make_shared(m_viewportController.get())); m_viewportController->AddBehavior(