From c071f52d8f8a46f8308e6bbcfecfe91e80d89355 Mon Sep 17 00:00:00 2001 From: Lynix Date: Wed, 27 May 2020 17:08:49 +0200 Subject: [PATCH] Platform/Mouse: Add SetRelativeMouseMode --- examples/FirstScene/main.cpp | 7 ++----- include/Nazara/Platform/Mouse.hpp | 1 + src/Nazara/Platform/Mouse.cpp | 5 +++++ src/Nazara/Platform/SDL2/InputImpl.cpp | 5 +++++ src/Nazara/Platform/SDL2/InputImpl.hpp | 1 + 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/examples/FirstScene/main.cpp b/examples/FirstScene/main.cpp index f67a79f58..25a96ceca 100644 --- a/examples/FirstScene/main.cpp +++ b/examples/FirstScene/main.cpp @@ -272,6 +272,8 @@ int main() //Gestion des Evenements Nz::EventHandler& eventHandler = window.GetEventHandler(); + Nz::Mouse::SetRelativeMouseMode(true); + eventHandler.OnMouseMoved.Connect([&camAngles, &cameraNode, &window](const Nz::EventHandler*, const Nz::WindowEvent::MouseMoveEvent& event) { if (Ndk::Application::Instance()->IsConsoleEnabled()) @@ -291,11 +293,6 @@ int main() // On applique les angles d'Euler à notre caméra cameraNode.SetRotation(camAngles); - - // Pour éviter que le curseur ne sorte de l'écran, nous le renvoyons au centre de la fenétre - // Cette fonction est codée de sorte à ne pas provoquer d'événement MouseMoved - Nz::Vector2ui size = window.GetSize(); - Nz::Mouse::SetPosition(size.x / 2, size.y / 2, window); }); eventHandler.OnKeyPressed.Connect([&targetPos, &cameraNode, &smoothMovement, &window](const Nz::EventHandler*, const Nz::WindowEvent::KeyEvent& event) diff --git a/include/Nazara/Platform/Mouse.hpp b/include/Nazara/Platform/Mouse.hpp index 9a77179f9..70234cd8b 100644 --- a/include/Nazara/Platform/Mouse.hpp +++ b/include/Nazara/Platform/Mouse.hpp @@ -37,6 +37,7 @@ namespace Nz static Vector2i GetPosition(); static Vector2i GetPosition(const Window& relativeTo); static bool IsButtonPressed(Button button); + static bool SetRelativeMouseMode(bool relativeMouseMode); static void SetPosition(const Vector2i& position); static void SetPosition(const Vector2i& position, const Window& relativeTo, bool ignoreEvent = true); static void SetPosition(int x, int y); diff --git a/src/Nazara/Platform/Mouse.cpp b/src/Nazara/Platform/Mouse.cpp index e9b55031a..d79cea389 100644 --- a/src/Nazara/Platform/Mouse.cpp +++ b/src/Nazara/Platform/Mouse.cpp @@ -34,6 +34,11 @@ namespace Nz return EventImpl::IsMouseButtonPressed(button); } + bool Mouse::SetRelativeMouseMode(bool relativeMouseMode) + { + return EventImpl::SetRelativeMouseMode(relativeMouseMode); + } + void Mouse::SetPosition(const Vector2i& position) { EventImpl::SetMousePosition(position.x, position.y); diff --git a/src/Nazara/Platform/SDL2/InputImpl.cpp b/src/Nazara/Platform/SDL2/InputImpl.cpp index 9bf2fd40f..6363fbd54 100644 --- a/src/Nazara/Platform/SDL2/InputImpl.cpp +++ b/src/Nazara/Platform/SDL2/InputImpl.cpp @@ -85,6 +85,11 @@ namespace Nz return (SDL_GetGlobalMouseState(nullptr, nullptr) & vButtons[button]) != 0; } + bool EventImpl::SetRelativeMouseMode(bool relativeMouseMode) + { + return SDL_SetRelativeMouseMode((relativeMouseMode) ? SDL_TRUE : SDL_FALSE) == 0; + } + void EventImpl::SetMousePosition(int x, int y) { if (SDL_WarpMouseGlobal(x, y) != 0) diff --git a/src/Nazara/Platform/SDL2/InputImpl.hpp b/src/Nazara/Platform/SDL2/InputImpl.hpp index 568acb755..20147f602 100644 --- a/src/Nazara/Platform/SDL2/InputImpl.hpp +++ b/src/Nazara/Platform/SDL2/InputImpl.hpp @@ -24,6 +24,7 @@ namespace Nz static bool IsKeyPressed(Keyboard::Scancode key); static bool IsKeyPressed(Keyboard::VKey key); static bool IsMouseButtonPressed(Mouse::Button button); + static bool SetRelativeMouseMode(bool relativeMouseMode); static void SetMousePosition(int x, int y); static void SetMousePosition(int x, int y, const Window& relativeTo); static void StartTextInput();