mirror of
https://github.com/mkxp-z/mkxp-z.git
synced 2025-08-09 08:25:33 +02:00
Support mouse buttons in MKXP_GetAsyncKeyState
This commit is contained in:
parent
ba5c6392dc
commit
ebbf9e4310
1 changed files with 38 additions and 31 deletions
|
@ -335,6 +335,7 @@ NOP_VAL(true)
|
||||||
|
|
||||||
// Shift key with GetKeyboardState doesn't work for whatever reason,
|
// Shift key with GetKeyboardState doesn't work for whatever reason,
|
||||||
// so Windows needs this too
|
// so Windows needs this too
|
||||||
|
#define ks(sc) shState->eThread().keyStates[SDL_SCANCODE_##sc]
|
||||||
PREFABI BOOL
|
PREFABI BOOL
|
||||||
MKXP_GetKeyboardState(PBYTE lpKeyState)
|
MKXP_GetKeyboardState(PBYTE lpKeyState)
|
||||||
{
|
{
|
||||||
|
@ -342,38 +343,15 @@ MKXP_GetKeyboardState(PBYTE lpKeyState)
|
||||||
bool rc = GetKeyboardState(lpKeyState);
|
bool rc = GetKeyboardState(lpKeyState);
|
||||||
if (rc)
|
if (rc)
|
||||||
{
|
{
|
||||||
unsigned char *sdlkeystate = shState->eThread().keyStates;
|
lpKeyState[VK_LSHIFT] = ks(LSHIFT) << 7;
|
||||||
lpKeyState[VK_LSHIFT] = sdlkeystate[SDL_SCANCODE_LSHIFT] << 7;
|
lpKeyState[VK_RSHIFT] = ks(RSHIFT) << 7;
|
||||||
lpKeyState[VK_RSHIFT] = sdlkeystate[SDL_SCANCODE_RSHIFT] << 7;
|
|
||||||
lpKeyState[VK_SHIFT] = (lpKeyState[VK_LSHIFT] || lpKeyState[VK_RSHIFT]) ? 0x80 : 0;
|
lpKeyState[VK_SHIFT] = (lpKeyState[VK_LSHIFT] || lpKeyState[VK_RSHIFT]) ? 0x80 : 0;
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
#else
|
#else
|
||||||
for (int i = 254; i > 0; i--)
|
for (int i = 254; i > 0; i--)
|
||||||
{
|
{
|
||||||
if (i == 0x10) // Either Shift key
|
lpKeyState[i] = (MKXP_GetAsyncKeyState(i)) ? 0x80 : 0;
|
||||||
{
|
|
||||||
lpKeyState[i] = (lpKeyState[0xa0] || lpKeyState[0xa1]) ? 0x80 : 0;
|
|
||||||
}
|
|
||||||
else if (i == 0x11) // Either Ctrl key
|
|
||||||
{
|
|
||||||
lpKeyState[i] = (lpKeyState[0xa2] || lpKeyState[0xa3]) ? 0x80 : 0;
|
|
||||||
}
|
|
||||||
else if (i == 0x12) // Either Alt key
|
|
||||||
{
|
|
||||||
lpKeyState[i] = (lpKeyState[0xa4] || lpKeyState[0xa5]) ? 0x80 : 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
lpKeyState[i] = shState->eThread().keyStates[vKeyToScancode[i]] << 7;
|
|
||||||
}
|
|
||||||
catch(...)
|
|
||||||
{
|
|
||||||
lpKeyState[i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
|
@ -422,14 +400,43 @@ PREFABI SHORT
|
||||||
MKXP_GetAsyncKeyState(int vKey)
|
MKXP_GetAsyncKeyState(int vKey)
|
||||||
{
|
{
|
||||||
SHORT result;
|
SHORT result;
|
||||||
|
switch (vKey) {
|
||||||
|
case 0x10: // Any Shift
|
||||||
|
result = (ks(LSHIFT) || ks(RSHIFT)) ? 0x8000 : 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x11: // Any Ctrl
|
||||||
|
result = (ks(LCTRL) || ks(RCTRL)) ? 0x8000 : 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x12: // Any Alt
|
||||||
|
result = (ks(LALT) || ks(RALT)) ? 0x8000 : 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x1: // Mouse button 1
|
||||||
|
result = shState->input().isPressed(Input::MouseLeft) << 15;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x2: // Mouse button 2
|
||||||
|
result = shState->input().isPressed(Input::MouseRight) << 15;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x4: // Middle mouse
|
||||||
|
result = shState->input().isPressed(Input::MouseMiddle) << 15;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
try {
|
try {
|
||||||
result = shState->eThread().keyStates[vKeyToScancode[vKey]] << 15;
|
result = shState->eThread().keyStates[vKeyToScancode[vKey]] << 15;
|
||||||
}
|
}
|
||||||
catch (...) {
|
catch (...) {
|
||||||
result = 0;
|
result = 0;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
#undef ks
|
||||||
|
|
||||||
PREFABI BOOL
|
PREFABI BOOL
|
||||||
MKXP_GetSystemPowerStatus(LPSYSTEM_POWER_STATUS lpSystemPowerStatus)
|
MKXP_GetSystemPowerStatus(LPSYSTEM_POWER_STATUS lpSystemPowerStatus)
|
||||||
|
|
Loading…
Add table
Reference in a new issue