diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 84e5a915d1..d37d0fda41 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -484,40 +484,42 @@ namespace OpenRA get { return LobbyInfo.Clients.FirstOrDefault(c => c.Index == orderManager.Connection.LocalClientId); } } - static Dictionary RemapKeys = new Dictionary - { - { '!', '1' }, - { '@', '2' }, - { '#', '3' }, - { '$', '4' }, - { '%', '5' }, - { '^', '6' }, - { '&', '7' }, - { '*', '8' }, - { '(', '9' }, - { ')', '0' }, - }; - - public static void HandleKeyPress(KeyInput e) + public static void HandleKeyDown(KeyInput e) { int sync = world.SyncHash(); if (chrome.HandleKeyPress(e)) return; - var c = RemapKeys.ContainsKey(e.KeyChar) ? RemapKeys[e.KeyChar] : e.KeyChar; + switch (e.KeyName) + { + case "up": scrollUp = true; break; + case "down": scrollDown = true; break; + case "left": scrollLeft = true; break; + case "right": scrollRight = true; break; + } - if (c >= '0' && c <= '9') - Game.controller.selection.DoControlGroup(world, - c - '0', e.Modifiers); - - if (c == 08) + if (e.KeyName.Length == 1 && char.IsDigit(e.KeyName[0])) + Game.controller.selection.DoControlGroup(world, e.KeyName[0] - '0', e.Modifiers); + + if (e.KeyChar == 08) Game.controller.GotoNextBase(); if (sync != Game.world.SyncHash()) throw new InvalidOperationException("Desync in OnKeyPress"); } + public static void HandleKeyUp(KeyInput e) + { + switch (e.KeyName) + { + case "up": scrollUp = false; break; + case "down": scrollDown = false; break; + case "left": scrollLeft = false; break; + case "right": scrollRight = false; break; + } + } + public static void HandleArrowKeyScroll(String k, Boolean pressed) { if (k == "up") diff --git a/OpenRA.Gl/GraphicsDevice.cs b/OpenRA.Gl/GraphicsDevice.cs index d52396b150..c64f179ffd 100644 --- a/OpenRA.Gl/GraphicsDevice.cs +++ b/OpenRA.Gl/GraphicsDevice.cs @@ -225,28 +225,29 @@ namespace OpenRA.GlRenderer case Sdl.SDL_KEYDOWN: { - bool handled = true; - var keyEvent = new KeyInput { Modifiers = mods, KeyChar = (char) e.key.keysym.unicode, - KeyName = Sdl.SDL_GetKeyName( e.key.keysym.sym ) + KeyName = Sdl.SDL_GetKeyName( e.key.keysym.sym ), + VirtKey = e.key.keysym.sym }; if (!HandleSpecialKey(keyEvent)) - Game.HandleKeyPress(keyEvent); + Game.HandleKeyDown(keyEvent); } break; case Sdl.SDL_KEYUP: { - switch (e.key.keysym.sym) + var keyEvent = new KeyInput { - case Sdl.SDLK_UP: Game.HandleArrowKeyScroll("up", false); break; - case Sdl.SDLK_LEFT: Game.HandleArrowKeyScroll("left", false); break; - case Sdl.SDLK_DOWN: Game.HandleArrowKeyScroll("down", false); break; - case Sdl.SDLK_RIGHT: Game.HandleArrowKeyScroll("right", false); break; - } + Modifiers = mods, + KeyChar = (char) e.key.keysym.unicode, + KeyName = Sdl.SDL_GetKeyName( e.key.keysym.sym ), + VirtKey = e.key.keysym.sym + }; + + Game.HandleKeyUp(keyEvent); } break; } }