This commit is contained in:
2026-08-26 19:44:10 -05:00
parent 6a8f202ba5
commit 0e78e0a3f3
+73 -15
View File
@@ -987,25 +987,83 @@ void UIController::handleKeyPress(unsigned int iPad, unsigned int key)
released = InputManager.ButtonReleased(iPad,key); // Toggle
#ifdef _WINDOWS64
// Keyboard menu input for player 0
if (iPad == 0)
{
bool kbDown = false, kbPressed = false, kbReleased = false;
switch(key)
int vk = 0;
switch (key)
{
case ACTION_MENU_UP: kbDown = g_KBMInput.IsKeyDown(VK_UP); kbPressed = g_KBMInput.IsKeyPressed(VK_UP); kbReleased = g_KBMInput.IsKeyReleased(VK_UP); break;
case ACTION_MENU_DOWN: kbDown = g_KBMInput.IsKeyDown(VK_DOWN); kbPressed = g_KBMInput.IsKeyPressed(VK_DOWN); kbReleased = g_KBMInput.IsKeyReleased(VK_DOWN); break;
case ACTION_MENU_LEFT: kbDown = g_KBMInput.IsKeyDown(VK_LEFT); kbPressed = g_KBMInput.IsKeyPressed(VK_LEFT); kbReleased = g_KBMInput.IsKeyReleased(VK_LEFT); break;
case ACTION_MENU_RIGHT: kbDown = g_KBMInput.IsKeyDown(VK_RIGHT); kbPressed = g_KBMInput.IsKeyPressed(VK_RIGHT); kbReleased = g_KBMInput.IsKeyReleased(VK_RIGHT); break;
case ACTION_MENU_OK: kbDown = g_KBMInput.IsKeyDown(VK_RETURN); kbPressed = g_KBMInput.IsKeyPressed(VK_RETURN); kbReleased = g_KBMInput.IsKeyReleased(VK_RETURN); break;
case ACTION_MENU_A: kbDown = g_KBMInput.IsKeyDown(VK_RETURN); kbPressed = g_KBMInput.IsKeyPressed(VK_RETURN); kbReleased = g_KBMInput.IsKeyReleased(VK_RETURN); break;
case ACTION_MENU_CANCEL: kbDown = g_KBMInput.IsKeyDown(VK_ESCAPE); kbPressed = g_KBMInput.IsKeyPressed(VK_ESCAPE); kbReleased = g_KBMInput.IsKeyReleased(VK_ESCAPE); break;
case ACTION_MENU_B: kbDown = g_KBMInput.IsKeyDown(VK_ESCAPE); kbPressed = g_KBMInput.IsKeyPressed(VK_ESCAPE); kbReleased = g_KBMInput.IsKeyReleased(VK_ESCAPE); break;
case ACTION_MENU_PAUSEMENU: kbDown = g_KBMInput.IsKeyDown(VK_ESCAPE); kbPressed = g_KBMInput.IsKeyPressed(VK_ESCAPE); kbReleased = g_KBMInput.IsKeyReleased(VK_ESCAPE); break;
case ACTION_MENU_OK: case ACTION_MENU_A: vk = VK_RETURN; break;
case ACTION_MENU_CANCEL: case ACTION_MENU_B: vk = VK_ESCAPE; break;
case ACTION_MENU_UP: vk = VK_UP; break;
case ACTION_MENU_DOWN: vk = VK_DOWN; break;
case ACTION_MENU_LEFT: vk = VK_LEFT; break;
case ACTION_MENU_RIGHT: vk = VK_RIGHT; break;
case ACTION_MENU_X: vk = 'R'; break;
case ACTION_MENU_Y: vk = VK_TAB; break;
case ACTION_MENU_LEFT_SCROLL: vk = 'Q'; break;
case ACTION_MENU_RIGHT_SCROLL: vk = 'E'; break;
case ACTION_MENU_PAGEUP: vk = VK_PRIOR; break;
case ACTION_MENU_PAGEDOWN: vk = VK_NEXT; break;
}
if (vk != 0)
{
if (g_KBMInput.IsKeyPressed(vk)) { pressed = true; down = true; }
if (g_KBMInput.IsKeyReleased(vk)) { released = true; down = false; }
if (!pressed && !released && g_KBMInput.IsKeyDown(vk)) { down = true; }
}
if ((key == ACTION_MENU_OK || key == ACTION_MENU_A) && !g_KBMInput.IsMouseGrabbed())
{
if (m_mouseDraggingSliderId < 0 && !m_mouseClickConsumedByScene)
{
if (g_KBMInput.IsMouseButtonPressed(KeyboardMouseInput::MOUSE_LEFT)) { pressed = true; down = true; }
if (g_KBMInput.IsMouseButtonReleased(KeyboardMouseInput::MOUSE_LEFT)) { released = true; down = false; }
if (!pressed && !released && g_KBMInput.IsMouseButtonDown(KeyboardMouseInput::MOUSE_LEFT)) { down = true; }
}
}
// Right click → ACTION_MENU_X (pick up half stack in inventory)
if (key == ACTION_MENU_X && !g_KBMInput.IsMouseGrabbed())
{
if (g_KBMInput.IsMouseButtonPressed(KeyboardMouseInput::MOUSE_RIGHT)) { pressed = true; down = true; }
if (g_KBMInput.IsMouseButtonReleased(KeyboardMouseInput::MOUSE_RIGHT)) { released = true; down = false; }
if (!pressed && !released && g_KBMInput.IsMouseButtonDown(KeyboardMouseInput::MOUSE_RIGHT)) { down = true; }
}
// Scroll wheel for list scrolling — only consume the wheel value when the
// action key actually matches, so the other direction isn't lost.
if (!g_KBMInput.IsMouseGrabbed() && (key == ACTION_MENU_OTHER_STICK_UP || key == ACTION_MENU_OTHER_STICK_DOWN))
{
int wheel = g_KBMInput.PeekMouseWheel();
if (key == ACTION_MENU_OTHER_STICK_UP && wheel > 0)
{
g_KBMInput.ConsumeMouseWheel();
pressed = true;
down = true;
}
else if (key == ACTION_MENU_OTHER_STICK_DOWN && wheel < 0)
{
g_KBMInput.ConsumeMouseWheel();
pressed = true;
down = true;
}
// Remap scroll wheel to navigation actions. Use LEFT/RIGHT when
// hovering a horizontal list (e.g. TexturePackList), UP/DOWN otherwise.
if (pressed && g_KBMInput.IsKBMActive())
{
UIScene* pTopScene = GetTopScene(0); // using 0 as default pad for KBM
bool isJoinMenu = pTopScene && pTopScene->getSceneType() == eUIScene_JoinMenu;
if (!isJoinMenu)
{
if (m_bMouseHoverHorizontalList)
key = (key == ACTION_MENU_OTHER_STICK_UP) ? ACTION_MENU_LEFT : ACTION_MENU_RIGHT;
else
key = (key == ACTION_MENU_OTHER_STICK_UP) ? ACTION_MENU_UP : ACTION_MENU_DOWN;
}
}
}
pressed = pressed || kbPressed;
released = released || kbReleased;
down = down || kbDown;
}
#endif