From 83a1dd9a044dcbab718d4eb1b3df753e6543364e Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Mon, 1 Jul 2024 14:28:20 +0200 Subject: [PATCH] Add zoom --- openVulkanoCpp/Controller/MapCameraController.cpp | 12 ++++++++++++ openVulkanoCpp/Controller/MapCameraController.hpp | 1 + 2 files changed, 13 insertions(+) diff --git a/openVulkanoCpp/Controller/MapCameraController.cpp b/openVulkanoCpp/Controller/MapCameraController.cpp index 42150e3..a2c228b 100644 --- a/openVulkanoCpp/Controller/MapCameraController.cpp +++ b/openVulkanoCpp/Controller/MapCameraController.cpp @@ -15,6 +15,7 @@ namespace OpenVulkano auto input = Input::InputManager::GetInstance(); m_actionUp = input->GetAction("map_up"); m_actionSide = input->GetAction("map_side"); + m_actionZoom = input->GetAction("map_zoom"); } void MapCameraController::Tick() @@ -25,6 +26,15 @@ namespace OpenVulkano vec /= GetCamera()->GetZoom(); vec /= GetCamera()->GetContentScaleFactor(); + float zoom = Input::InputManager::GetInstance()->GetAxis(m_actionZoom); + if (zoom != 0) + { + float tmp = sqrt(GetCamera()->GetZoom()) + zoom / std::max(10.0f, (100 - GetCamera()->GetZoom())); + tmp = std::max(3.0f, tmp); + GetCamera()->SetZoom(tmp * tmp); + GetCamera()->UpdateProjectionMatrix(); + } + GetCamera()->SetMatrix(Math::Utils::translate(vec) * GetCamera()->GetMatrix()); } @@ -36,5 +46,7 @@ namespace OpenVulkano m_actionSide->BindKey(Input::InputKey::Controller::AXIS_LEFT_X); m_actionSide->BindKey(Input::InputKey::Touch::AXIS_PAN_X); m_actionSide->BindKey(Input::InputKey::Mouse::AXIS_X); + m_actionZoom->BindKey(Input::InputKey::Mouse::AXIS_WHEEL_Y, 2); + m_actionZoom->BindKey(Input::InputKey::Touch::AXIS_PINCH, 0.2); } } diff --git a/openVulkanoCpp/Controller/MapCameraController.hpp b/openVulkanoCpp/Controller/MapCameraController.hpp index 803f18a..24ff238 100644 --- a/openVulkanoCpp/Controller/MapCameraController.hpp +++ b/openVulkanoCpp/Controller/MapCameraController.hpp @@ -20,6 +20,7 @@ namespace OpenVulkano { Input::InputAction* m_actionSide; Input::InputAction* m_actionUp; + Input::InputAction* m_actionZoom; Math::Vector3f_SIMD m_dirUp; Math::Vector3f_SIMD m_dirSide;