diff --git a/src/Camera.cpp b/src/Camera.cpp index 4442c6a..000a604 100644 --- a/src/Camera.cpp +++ b/src/Camera.cpp @@ -94,7 +94,13 @@ glm::mat4 Camera::getViewMatrix() const { } // ViewportController implementation -void ViewportController::updateFocusFromImGui(bool windowFocused) { +void ViewportController::updateFocusFromImGui(bool windowFocused, bool cursorLocked) { + if (cursorLocked) { + viewportFocused = true; + manualUnfocus = false; + return; + } + if (!windowFocused && viewportFocused && !manualUnfocus) { viewportFocused = false; } diff --git a/src/Camera.h b/src/Camera.h index 80b0183..2a1f2d1 100644 --- a/src/Camera.h +++ b/src/Camera.h @@ -26,7 +26,7 @@ private: bool manualUnfocus = false; public: - void updateFocusFromImGui(bool windowFocused); + void updateFocusFromImGui(bool windowFocused, bool cursorLocked); void setFocused(bool focused); bool isViewportFocused() const; void clearManualUnfocus(); diff --git a/src/EnginePanels.cpp b/src/EnginePanels.cpp index 3231720..68b8b06 100644 --- a/src/EnginePanels.cpp +++ b/src/EnginePanels.cpp @@ -2162,6 +2162,9 @@ void Engine::renderViewport() { glfwSetInputMode(editorWindow, GLFW_CURSOR, GLFW_CURSOR_NORMAL); camera.firstMouse = true; } + if (cursorLocked) { + viewportController.setFocused(true); + } } // Overlay hint @@ -2180,7 +2183,7 @@ void Engine::renderViewport() { } bool windowFocused = ImGui::IsWindowFocused(); - viewportController.updateFocusFromImGui(windowFocused); + viewportController.updateFocusFromImGui(windowFocused, cursorLocked); ImGui::End(); }