From fa9120c4ef9b0f4129ba03699b964d32041d722b Mon Sep 17 00:00:00 2001 From: gered Date: Sat, 17 Aug 2013 15:41:50 -0400 Subject: [PATCH] fix SDL->key mapping --- .../Blarg.GameFramework.SDL2.csproj | 1 + .../Input/SDLKeyMapper.cs | 145 ++++++++++++++++++ Blarg.GameFramework.SDL2/Input/SDLKeyboard.cs | 2 +- 3 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 Blarg.GameFramework.SDL2/Input/SDLKeyMapper.cs diff --git a/Blarg.GameFramework.SDL2/Blarg.GameFramework.SDL2.csproj b/Blarg.GameFramework.SDL2/Blarg.GameFramework.SDL2.csproj index 5db992a..d625a37 100644 --- a/Blarg.GameFramework.SDL2/Blarg.GameFramework.SDL2.csproj +++ b/Blarg.GameFramework.SDL2/Blarg.GameFramework.SDL2.csproj @@ -53,6 +53,7 @@ + diff --git a/Blarg.GameFramework.SDL2/Input/SDLKeyMapper.cs b/Blarg.GameFramework.SDL2/Input/SDLKeyMapper.cs new file mode 100644 index 0000000..f661cdf --- /dev/null +++ b/Blarg.GameFramework.SDL2/Input/SDLKeyMapper.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using SDL2; + +namespace Blarg.GameFramework.Input +{ + public static class SDLKeyMapper + { + static IDictionary _mapping = new Dictionary(); + + static SDLKeyMapper() + { + // borrowing and changing from the monogame-sdl2 WIP code + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_A, Key.A); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_B, Key.B); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_C, Key.C); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_D, Key.D); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_E, Key.E); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F, Key.F); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_G, Key.G); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_H, Key.H); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_I, Key.I); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_J, Key.J); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_K, Key.K); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_L, Key.L); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_M, Key.M); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_N, Key.N); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_O, Key.O); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_P, Key.P); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_Q, Key.Q); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_R, Key.R); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_S, Key.S); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_T, Key.T); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_U, Key.U); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_V, Key.V); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_W, Key.W); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_X, Key.X); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_Y, Key.Y); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_Z, Key.Z); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_0, Key.Num0); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_1, Key.Num1); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_2, Key.Num2); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_3, Key.Num3); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_4, Key.Num4); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_5, Key.Num5); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_6, Key.Num6); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_7, Key.Num7); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_8, Key.Num8); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_9, Key.Num9); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_0, Key.Numpad0); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_1, Key.Numpad1); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_2, Key.Numpad2); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_3, Key.Numpad3); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_4, Key.Numpad4); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_5, Key.Numpad5); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_6, Key.Numpad6); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_7, Key.Numpad7); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_8, Key.Numpad8); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_9, Key.Numpad9); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_CLEAR, Key.Clear); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_DECIMAL, Key.NumpadDecimal); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_DIVIDE, Key.NumpadDivide); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_ENTER, Key.Enter); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_MINUS, Key.NumpadSubtract); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_MULTIPLY, Key.NumpadMultiply); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_PERIOD, Key.NumpadDecimal); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_KP_PLUS, Key.NumpadAdd); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F1, Key.F1); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F2, Key.F2); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F3, Key.F3); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F4, Key.F4); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F5, Key.F5); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F6, Key.F6); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F7, Key.F7); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F8, Key.F8); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F9, Key.F9); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F10, Key.F10); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F11, Key.F11); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F12, Key.F12); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F13, Key.F13); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F14, Key.F14); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F15, Key.F15); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F16, Key.F16); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F17, Key.F17); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F18, Key.F18); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F19, Key.F19); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F20, Key.F20); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F21, Key.F21); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F22, Key.F22); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F23, Key.F23); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_F24, Key.F24); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_SPACE, Key.Space); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_UP, Key.Up); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_DOWN, Key.Down); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_LEFT, Key.Left); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_RIGHT, Key.Right); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_LALT, Key.LeftAlt); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_RALT, Key.RightAlt); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_LCTRL, Key.LeftCtrl); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_RCTRL, Key.RightCtrl); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_LGUI, Key.LeftWindows); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_RGUI, Key.RightWindows); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_LSHIFT, Key.LeftShift); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_RSHIFT, Key.RightShift); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_SLASH, Key.Slash); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_BACKSLASH, Key.BackSlash); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_LEFTBRACKET, Key.LeftBracket); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_RIGHTBRACKET, Key.RightBracket); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_CAPSLOCK, Key.CapsLock); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_COMMA, Key.Comma); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_DELETE, Key.Delete); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_END, Key.End); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_BACKSPACE, Key.Back); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_RETURN, Key.Enter); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_ESCAPE, Key.Escape); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_HOME, Key.Home); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_INSERT, Key.Insert); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_MINUS, Key.Minus); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_NUMLOCKCLEAR, Key.NumLock); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_PAGEUP, Key.PageUp); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_PAGEDOWN, Key.PageDown); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_PAUSE, Key.Pause); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_PERIOD, Key.Period); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_EQUALS, Key.Plus); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_PRINTSCREEN, Key.PrtScr); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_APOSTROPHE, Key.Quote); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_SCROLLLOCK, Key.ScrollLock); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_SEMICOLON, Key.Semicolon); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_SLEEP, Key.Sleep); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_TAB, Key.Tab); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_GRAVE, Key.Tilde); + _mapping.Add(SDL.SDL_Scancode.SDL_SCANCODE_UNKNOWN, Key.Unknown); + } + + public static Key ToKey(SDL.SDL_Scancode sdlKey) + { + Key key; + if (_mapping.TryGetValue(sdlKey, out key)) + return key; + else + return Key.Unknown; + } + } +} + diff --git a/Blarg.GameFramework.SDL2/Input/SDLKeyboard.cs b/Blarg.GameFramework.SDL2/Input/SDLKeyboard.cs index f74e775..04fdecd 100644 --- a/Blarg.GameFramework.SDL2/Input/SDLKeyboard.cs +++ b/Blarg.GameFramework.SDL2/Input/SDLKeyboard.cs @@ -19,7 +19,7 @@ namespace Blarg.GameFramework.Input public bool OnKeyEvent(SDL.SDL_KeyboardEvent e) { - int keyCode = (int)e.keysym.sym; + int keyCode = (int)SDLKeyMapper.ToKey(e.keysym.scancode); if (e.state == SDL.SDL_PRESSED) {