Set mouse as used when mouse is moved instead of disabling it when gamepad is in use

This commit is contained in:
Jan 2021-08-24 11:24:43 +02:00
parent e49e17d6e6
commit 30c90e5985
2 changed files with 13 additions and 23 deletions

View File

@ -1428,28 +1428,16 @@ namespace Components
return gamePads[0].inUse;
}
__declspec(naked) void Gamepad::CL_MouseEvent_Stub()
int Gamepad::CL_MouseEvent_Hk(const int x, const int y, const int dx, const int dy)
{
__asm
if(dx != 0 || dy != 0)
{
pushad
cmp eax, 6
jz hideCursor
call IsGamePadInUse
test al, al
jnz hideCursor
// Continue checks
popad
push 0x4D7C68
retn;
hideCursor:
popad
push 0x4D7C8A
retn
gamePads[0].inUse = false;
gpad_in_use.setRaw(false);
}
// Call original function
return Utils::Hook::Call<int(int, int, int, int)>(0x4D7C50)(x, y, dx, dy);
}
bool Gamepad::UI_RefreshViewport_Hk()
@ -1514,9 +1502,11 @@ namespace Components
// Mark controller as unused when keyboard key is pressed
Utils::Hook(0x43D179, CL_KeyEvent_Hk, HOOK_CALL).install()->quick();
// Mark controller as unused when mouse is moved
Utils::Hook(0x64C507, CL_MouseEvent_Hk, HOOK_CALL).install()->quick();
// Hide cursor when controller is active
Utils::Hook(0x4D7C63, CL_MouseEvent_Stub, HOOK_JUMP).install()->quick(); // Disable cursor
Utils::Hook(0x48E527, UI_RefreshViewport_Hk, HOOK_CALL).install()->quick(); // Do not draw cursor
Utils::Hook(0x48E527, UI_RefreshViewport_Hk, HOOK_CALL).install()->quick();
// Only return gamepad keys when gamepad enabled and only non gamepad keys when not
Utils::Hook(0x5A7A23, Key_GetCommandAssignmentInternal_Hk, HOOK_CALL).install()->quick();

View File

@ -354,7 +354,7 @@ namespace Components
static int Key_GetCommandAssignmentInternal_Hk(const char* cmd, int(*keys)[2]);
static bool IsGamePadInUse();
static void CL_KeyEvent_Hk(int localClientNum, int key, int down, unsigned int time);
static void CL_MouseEvent_Stub();
static int CL_MouseEvent_Hk(int x, int y, int dx, int dy);
static bool UI_RefreshViewport_Hk();
static void CreateKeyNameMap();
};