Platform/Mouse: Add SetRelativeMouseMode

This commit is contained in:
Lynix 2020-05-27 17:08:49 +02:00
parent 71c11c5d6f
commit c071f52d8f
5 changed files with 14 additions and 5 deletions

View File

@ -272,6 +272,8 @@ int main()
//Gestion des Evenements //Gestion des Evenements
Nz::EventHandler& eventHandler = window.GetEventHandler(); Nz::EventHandler& eventHandler = window.GetEventHandler();
Nz::Mouse::SetRelativeMouseMode(true);
eventHandler.OnMouseMoved.Connect([&camAngles, &cameraNode, &window](const Nz::EventHandler*, const Nz::WindowEvent::MouseMoveEvent& event) eventHandler.OnMouseMoved.Connect([&camAngles, &cameraNode, &window](const Nz::EventHandler*, const Nz::WindowEvent::MouseMoveEvent& event)
{ {
if (Ndk::Application::Instance()->IsConsoleEnabled()) if (Ndk::Application::Instance()->IsConsoleEnabled())
@ -291,11 +293,6 @@ int main()
// On applique les angles d'Euler à notre caméra // On applique les angles d'Euler à notre caméra
cameraNode.SetRotation(camAngles); 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) eventHandler.OnKeyPressed.Connect([&targetPos, &cameraNode, &smoothMovement, &window](const Nz::EventHandler*, const Nz::WindowEvent::KeyEvent& event)

View File

@ -37,6 +37,7 @@ namespace Nz
static Vector2i GetPosition(); static Vector2i GetPosition();
static Vector2i GetPosition(const Window& relativeTo); static Vector2i GetPosition(const Window& relativeTo);
static bool IsButtonPressed(Button button); static bool IsButtonPressed(Button button);
static bool SetRelativeMouseMode(bool relativeMouseMode);
static void SetPosition(const Vector2i& position); static void SetPosition(const Vector2i& position);
static void SetPosition(const Vector2i& position, const Window& relativeTo, bool ignoreEvent = true); static void SetPosition(const Vector2i& position, const Window& relativeTo, bool ignoreEvent = true);
static void SetPosition(int x, int y); static void SetPosition(int x, int y);

View File

@ -34,6 +34,11 @@ namespace Nz
return EventImpl::IsMouseButtonPressed(button); return EventImpl::IsMouseButtonPressed(button);
} }
bool Mouse::SetRelativeMouseMode(bool relativeMouseMode)
{
return EventImpl::SetRelativeMouseMode(relativeMouseMode);
}
void Mouse::SetPosition(const Vector2i& position) void Mouse::SetPosition(const Vector2i& position)
{ {
EventImpl::SetMousePosition(position.x, position.y); EventImpl::SetMousePosition(position.x, position.y);

View File

@ -85,6 +85,11 @@ namespace Nz
return (SDL_GetGlobalMouseState(nullptr, nullptr) & vButtons[button]) != 0; 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) void EventImpl::SetMousePosition(int x, int y)
{ {
if (SDL_WarpMouseGlobal(x, y) != 0) if (SDL_WarpMouseGlobal(x, y) != 0)

View File

@ -24,6 +24,7 @@ namespace Nz
static bool IsKeyPressed(Keyboard::Scancode key); static bool IsKeyPressed(Keyboard::Scancode key);
static bool IsKeyPressed(Keyboard::VKey key); static bool IsKeyPressed(Keyboard::VKey key);
static bool IsMouseButtonPressed(Mouse::Button button); 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);
static void SetMousePosition(int x, int y, const Window& relativeTo); static void SetMousePosition(int x, int y, const Window& relativeTo);
static void StartTextInput(); static void StartTextInput();