Game Window Cursor Clipping: Difference between revisions
Jump to navigation
Jump to search
Note:This works only when the window is active, otherwise, the cursor will be unlocked automatically just as in the games specified above.
Note:Note that if you copy the header to a subfolder, you gotta specify that in your #include
LordOf Xen (talk | contribs) |
LordOf Xen (talk | contribs) (→Notes) |
||
Line 57: | Line 57: | ||
== Notes == | == Notes == | ||
If you start the game | * If you start the game with '''-tools''', '''-dev''', '''-developer''', and '''-nocursorclipping''' the cursor clipping will be disabled and won't work by default. | ||
* If you're compiling into a different platform, else than WIN32, the cursor clipping will be disabled and won't work by default. | |||
* You can also add a ConVar to enable or disable this dynamically in-game, all you'll need to do is adding one more check on '''CCursorClipManagement::Think()'''. | |||
* If you do not want to check if the window is active or not every time '''OnRenderEnd()''' called, you can also do this by hooking into window events/messages. Check [https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowshookexa SetWindowsHookExA]. | |||
You can also add a ConVar to enable or disable this dynamically in-game, all you'll need to do is adding one more check on '''CCursorClipManagement::Think()'''. | |||
[[Category:Programming]] | [[Category:Programming]] | ||
[[Category:Free source code]] | [[Category:Free source code]] |
Revision as of 14:04, 6 January 2021
Summary
This implementation allows you to clip the cursor to the game window such as in DOOM and DOOM Eternal (id Tech 6 - 7), also brings some fixes to various bugs on VGUI.

Requirements
- Knowledge of C++
- Knowledge of Source Engine
- Source SDK Base 2013 - Currently tested on Source SDK Base 2013 Multiplayer
Getting the Implementation/Code
First of all, you'll need the following files from the following GitHub repository:
Which you will copy to src/game/client/. You can also create a subfolder if you wish to, and copy these files there.
Implementation
Now head over to cdll_client_int.cpp' and include
#include "CCursorClipManagement.h"
Anywhere before
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"

In the same cpp, find CHLClient::PostInit() and add this to the end:
CCursorClipManagement::Init();
Lastly, find void OnRenderEnd() and add this to the end:
g_pCursorClipManager->Think();
Conclusion
You're all set! Compile your client project and check if it works.
Notes
- If you start the game with -tools, -dev, -developer, and -nocursorclipping the cursor clipping will be disabled and won't work by default.
- If you're compiling into a different platform, else than WIN32, the cursor clipping will be disabled and won't work by default.
- You can also add a ConVar to enable or disable this dynamically in-game, all you'll need to do is adding one more check on CCursorClipManagement::Think().
- If you do not want to check if the window is active or not every time OnRenderEnd() called, you can also do this by hooking into window events/messages. Check SetWindowsHookExA.