diff --git a/Minecraft.Client/Windows64/KeyboardMouseInput.cpp b/Minecraft.Client/Windows64/KeyboardMouseInput.cpp index fe3c39194..6af2a54ab 100644 --- a/Minecraft.Client/Windows64/KeyboardMouseInput.cpp +++ b/Minecraft.Client/Windows64/KeyboardMouseInput.cpp @@ -4,6 +4,7 @@ #include "KeyboardMouseInput.h" #include +#include KeyboardMouseInput g_KBMInput; @@ -125,16 +126,40 @@ void KeyboardMouseInput::Tick() } } - if ((m_mouseGrabbed || m_cursorHiddenForUI) && g_hWnd) - { - RECT rc; - GetClientRect(g_hWnd, &rc); - POINT center; - center.x = (rc.right - rc.left) / 2; - center.y = (rc.bottom - rc.top) / 2; - ClientToScreen(g_hWnd, ¢er); - SetCursorPos(center.x, center.y); - } + #ifdef _WINDOWS64 + if (!IsGameInFront()) + { + ClipCursor(NULL); + while (ShowCursor(TRUE) < 0) {} + } + else if (m_cursorHiddenForUI) + { + ClipCursor(NULL); + } + else if (m_mouseGrabbed && g_hWnd) + { + ClipCursorToWindow(g_hWnd); + + RECT rc; + GetClientRect(g_hWnd, &rc); + POINT center; + center.x = (rc.right - rc.left) / 2; + center.y = (rc.bottom - rc.top) / 2; + ClientToScreen(g_hWnd, ¢er); + SetCursorPos(center.x, center.y); + } + #else + if ((m_mouseGrabbed || m_cursorHiddenForUI) && g_hWnd) + { + RECT rc; + GetClientRect(g_hWnd, &rc); + POINT center; + center.x = (rc.right - rc.left) / 2; + center.y = (rc.bottom - rc.top) / 2; + ClientToScreen(g_hWnd, ¢er); + SetCursorPos(center.x, center.y); + } + #endif } void KeyboardMouseInput::OnKeyDown(int vkCode) @@ -408,4 +433,10 @@ void KeyboardMouseInput::ClearCharBuffer() m_charBufferTail = 0; } +bool KeyboardMouseInput::IsGameInFront() +{ + HWND InFrontWindow = GetForegroundWindow(); + return (InFrontWindow == g_hWnd); +} + #endif // _WINDOWS64 diff --git a/Minecraft.Client/Windows64/KeyboardMouseInput.h b/Minecraft.Client/Windows64/KeyboardMouseInput.h index fff924bfd..f59d9fe08 100644 --- a/Minecraft.Client/Windows64/KeyboardMouseInput.h +++ b/Minecraft.Client/Windows64/KeyboardMouseInput.h @@ -139,6 +139,8 @@ private: wchar_t m_charBuffer[CHAR_BUFFER_SIZE]; int m_charBufferHead; int m_charBufferTail; + + bool IsGameInFront(); }; extern KeyboardMouseInput g_KBMInput; diff --git a/MinecraftConsoles.sln b/MinecraftConsoles.sln index 1ce395672..8ffbbe602 100644 --- a/MinecraftConsoles.sln +++ b/MinecraftConsoles.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.14.37012.4 d17.14 +VisualStudioVersion = 17.14.37012.4 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Minecraft.World", "Minecraft.World\Minecraft.World.vcxproj", "{F046C3CE-9749-4823-B32B-D9CC10B1A2C8}" EndProject