From 368bc450ce2a4c64623291ab218dd07c21035405 Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Wed, 7 Jun 2023 12:33:10 +0200 Subject: [PATCH] better cam controls --- include/render/Renderer.h | 2 +- src/render/Renderer.cpp | 9 +++++---- src/render/WorldRenderer.cpp | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/include/render/Renderer.h b/include/render/Renderer.h index d957c73..c5db2d7 100644 --- a/include/render/Renderer.h +++ b/include/render/Renderer.h @@ -56,7 +56,7 @@ public: void SetZoom(float zoom); void SetCamAngularMovement(const Vec2f& mov); - void SetCamMovement(const Vec2f& mov); + void SetCamMovement(const Vec2f& lastCursorPos, const Vec2f& currentCursorPos); void SetCamLook(const Vec2f& worldPos); void SetBackgroundColor(const Vec3f& color) { m_BackgroundColor = color; } diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 14960b1..960a206 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -98,10 +98,11 @@ void Renderer::SetCamAngularMovement(const Vec2f& mov) { SetCamLook(m_Camera.CamLook); } -void Renderer::SetCamMovement(const Vec2f& mov) { - Vec2f cursor = { static_cast(m_WindowSize.x) / 2.0f - mov.x, static_cast(m_WindowSize.y) / 2.0f - mov.y }; - Vec2f worldMovement = GetCursorWorldPos(cursor, m_WindowSize.x, m_WindowSize.y); - SetCamLook(worldMovement); +void Renderer::SetCamMovement(const Vec2f& lastCursorPos, const Vec2f& currentCursorPos) { + Vec2f worldLastCursorPos = GetCursorWorldPos(lastCursorPos, m_WindowSize.x, m_WindowSize.y); + Vec2f worldCurrentCursorPos = GetCursorWorldPos(currentCursorPos, m_WindowSize.x, m_WindowSize.y); + Vec2f movement = worldCurrentCursorPos - worldLastCursorPos; + SetCamLook(m_Camera.CamLook - movement); } void Renderer::SetCamPos(const Vec3f& newPos) { diff --git a/src/render/WorldRenderer.cpp b/src/render/WorldRenderer.cpp index 5eafcbb..56c4f14 100644 --- a/src/render/WorldRenderer.cpp +++ b/src/render/WorldRenderer.cpp @@ -33,7 +33,6 @@ void WorldRenderer::LoadModels() { WorldRenderer::WorldRenderer(game::World* world, client::ClientGame* client) : m_Client(client), m_Renderer(m_Client->GetRenderer()), m_World(world), m_Zoom(0.1) { m_Renderer->SetZoom(m_Zoom); - m_Renderer->SetCamMovement({}); m_TowerPlacePopup = std::make_unique(m_Client->GetClient()); m_TowerUpgradePopup = std::make_unique(m_Client->GetClient()); m_MobTooltip = std::make_unique(m_Client->GetClient()); @@ -52,8 +51,9 @@ void WorldRenderer::Update() { ImGuiIO& io = ImGui::GetIO(); if (io.MouseDown[0] && !ImGui::IsAnyItemActive() && !ImGui::IsAnyItemHovered()) { + ImVec2 mousePos = ImGui::GetIO().MousePos; ImVec2 mouseDelta = ImGui::GetIO().MouseDelta; - m_Renderer->SetCamMovement({ mouseDelta.x, mouseDelta.y }); + m_Renderer->SetCamMovement({mousePos.x - mouseDelta.x, mousePos.y - mouseDelta.y}, { mousePos.x, mousePos.y }); } if (io.MouseDown[1] && !ImGui::IsAnyItemActive() && !ImGui::IsAnyItemHovered()) {