Path: blob/master/RSDKv5/RSDK/Input/Keyboard/KBInputDevice.cpp
1174 views
1using namespace RSDK;23int32 RSDK::SKU::keyState[PLAYER_COUNT];45#if !RETRO_REV026int32 RSDK::SKU::specialKeyStates[4];7int32 RSDK::SKU::prevSpecialKeyStates[4];8int32 RSDK::SKU::buttonDownCount = 0;9int32 RSDK::SKU::prevButtonDownCount = 0;10#endif1112#if RETRO_RENDERDEVICE_SDL213int32 winAPIToSDLMappings(int32 mapping)14{15switch (mapping) {16default: return SDL_SCANCODE_UNKNOWN;17case VK_LBUTTON: return SDL_SCANCODE_UNKNOWN;18case VK_RBUTTON: return SDL_SCANCODE_UNKNOWN;19case VK_CANCEL: return SDL_SCANCODE_CANCEL;20case VK_MBUTTON: return SDL_SCANCODE_UNKNOWN;21case VK_XBUTTON1: return SDL_SCANCODE_UNKNOWN;22case VK_XBUTTON2: return SDL_SCANCODE_UNKNOWN;23case VK_BACK: return SDL_SCANCODE_UNKNOWN;24case VK_TAB: return SDL_SCANCODE_TAB;25case VK_CLEAR: return SDL_SCANCODE_CLEAR;26case VK_RETURN: return SDL_SCANCODE_RETURN;27case VK_SHIFT: return SDL_SCANCODE_UNKNOWN;28case VK_CONTROL: return SDL_SCANCODE_UNKNOWN;29case VK_MENU: return SDL_SCANCODE_MENU;30case VK_PAUSE: return SDL_SCANCODE_PAUSE;31case VK_CAPITAL: return SDL_SCANCODE_CAPSLOCK;32case VK_KANA: return SDL_SCANCODE_UNKNOWN;33case VK_JUNJA: return SDL_SCANCODE_UNKNOWN;34case VK_FINAL: return SDL_SCANCODE_UNKNOWN;35case VK_HANJA: return SDL_SCANCODE_UNKNOWN;36case VK_ESCAPE: return SDL_SCANCODE_ESCAPE;37case VK_CONVERT: return SDL_SCANCODE_UNKNOWN;38case VK_NONCONVERT: return SDL_SCANCODE_UNKNOWN;39case VK_ACCEPT: return SDL_SCANCODE_UNKNOWN;40case VK_MODECHANGE: return SDL_SCANCODE_UNKNOWN;41case VK_SPACE: return SDL_SCANCODE_SPACE;42case VK_PRIOR: return SDL_SCANCODE_PAGEUP;43case VK_NEXT: return SDL_SCANCODE_PAGEDOWN;44case VK_END: return SDL_SCANCODE_END;45case VK_HOME: return SDL_SCANCODE_HOME;46case VK_LEFT: return SDL_SCANCODE_LEFT;47case VK_UP: return SDL_SCANCODE_UP;48case VK_RIGHT: return SDL_SCANCODE_RIGHT;49case VK_DOWN: return SDL_SCANCODE_DOWN;50case VK_SELECT: return SDL_SCANCODE_SELECT;51case VK_PRINT: return SDL_SCANCODE_UNKNOWN;52case VK_EXECUTE: return SDL_SCANCODE_EXECUTE;53case VK_SNAPSHOT: return SDL_SCANCODE_PRINTSCREEN;54case VK_INSERT: return SDL_SCANCODE_INSERT;55case VK_DELETE: return SDL_SCANCODE_DELETE;56case VK_HELP: return SDL_SCANCODE_HELP;57case VK_0: return SDL_SCANCODE_0;58case VK_1: return SDL_SCANCODE_1;59case VK_2: return SDL_SCANCODE_2;60case VK_3: return SDL_SCANCODE_3;61case VK_4: return SDL_SCANCODE_4;62case VK_5: return SDL_SCANCODE_5;63case VK_6: return SDL_SCANCODE_6;64case VK_7: return SDL_SCANCODE_7;65case VK_8: return SDL_SCANCODE_8;66case VK_9: return SDL_SCANCODE_9;67case VK_A: return SDL_SCANCODE_A;68case VK_B: return SDL_SCANCODE_B;69case VK_C: return SDL_SCANCODE_C;70case VK_D: return SDL_SCANCODE_D;71case VK_E: return SDL_SCANCODE_E;72case VK_F: return SDL_SCANCODE_F;73case VK_G: return SDL_SCANCODE_G;74case VK_H: return SDL_SCANCODE_H;75case VK_I: return SDL_SCANCODE_I;76case VK_J: return SDL_SCANCODE_J;77case VK_K: return SDL_SCANCODE_K;78case VK_L: return SDL_SCANCODE_L;79case VK_M: return SDL_SCANCODE_M;80case VK_N: return SDL_SCANCODE_N;81case VK_O: return SDL_SCANCODE_O;82case VK_P: return SDL_SCANCODE_P;83case VK_Q: return SDL_SCANCODE_Q;84case VK_R: return SDL_SCANCODE_R;85case VK_S: return SDL_SCANCODE_S;86case VK_T: return SDL_SCANCODE_T;87case VK_U: return SDL_SCANCODE_U;88case VK_V: return SDL_SCANCODE_V;89case VK_W: return SDL_SCANCODE_W;90case VK_X: return SDL_SCANCODE_X;91case VK_Y: return SDL_SCANCODE_Y;92case VK_Z: return SDL_SCANCODE_Z;93case VK_LWIN: return SDL_SCANCODE_UNKNOWN;94case VK_RWIN: return SDL_SCANCODE_UNKNOWN;95case VK_APPS: return SDL_SCANCODE_UNKNOWN;96case VK_SLEEP: return SDL_SCANCODE_UNKNOWN;97case VK_NUMPAD0: return SDL_SCANCODE_UNKNOWN;98case VK_NUMPAD1: return SDL_SCANCODE_UNKNOWN;99case VK_NUMPAD2: return SDL_SCANCODE_UNKNOWN;100case VK_NUMPAD3: return SDL_SCANCODE_UNKNOWN;101case VK_NUMPAD4: return SDL_SCANCODE_UNKNOWN;102case VK_NUMPAD5: return SDL_SCANCODE_UNKNOWN;103case VK_NUMPAD6: return SDL_SCANCODE_UNKNOWN;104case VK_NUMPAD7: return SDL_SCANCODE_UNKNOWN;105case VK_NUMPAD8: return SDL_SCANCODE_UNKNOWN;106case VK_NUMPAD9: return SDL_SCANCODE_UNKNOWN;107case VK_MULTIPLY: return SDL_SCANCODE_UNKNOWN;108case VK_ADD: return SDL_SCANCODE_UNKNOWN;109case VK_SEPARATOR: return SDL_SCANCODE_UNKNOWN;110case VK_SUBTRACT: return SDL_SCANCODE_UNKNOWN;111case VK_DECIMAL: return SDL_SCANCODE_UNKNOWN;112case VK_DIVIDE: return SDL_SCANCODE_UNKNOWN;113case VK_F1: return SDL_SCANCODE_F1;114case VK_F2: return SDL_SCANCODE_F2;115case VK_F3: return SDL_SCANCODE_F3;116case VK_F4: return SDL_SCANCODE_F4;117case VK_F5: return SDL_SCANCODE_F5;118case VK_F6: return SDL_SCANCODE_F6;119case VK_F7: return SDL_SCANCODE_F7;120case VK_F8: return SDL_SCANCODE_F8;121case VK_F9: return SDL_SCANCODE_F9;122case VK_F10: return SDL_SCANCODE_F10;123case VK_F11: return SDL_SCANCODE_F11;124case VK_F12: return SDL_SCANCODE_F12;125case VK_F13: return SDL_SCANCODE_F13;126case VK_F14: return SDL_SCANCODE_F14;127case VK_F15: return SDL_SCANCODE_F15;128case VK_F16: return SDL_SCANCODE_F16;129case VK_F17: return SDL_SCANCODE_F17;130case VK_F18: return SDL_SCANCODE_F18;131case VK_F19: return SDL_SCANCODE_F19;132case VK_F20: return SDL_SCANCODE_F20;133case VK_F21: return SDL_SCANCODE_F21;134case VK_F22: return SDL_SCANCODE_F22;135case VK_F23: return SDL_SCANCODE_F23;136case VK_F24: return SDL_SCANCODE_F24;137case VK_NAVIGATION_VIEW: return SDL_SCANCODE_UNKNOWN;138case VK_NAVIGATION_MENU: return SDL_SCANCODE_UNKNOWN;139case VK_NAVIGATION_UP: return SDL_SCANCODE_UNKNOWN;140case VK_NAVIGATION_DOWN: return SDL_SCANCODE_UNKNOWN;141case VK_NAVIGATION_LEFT: return SDL_SCANCODE_UNKNOWN;142case VK_NAVIGATION_RIGHT: return SDL_SCANCODE_UNKNOWN;143case VK_NAVIGATION_ACCEPT: return SDL_SCANCODE_UNKNOWN;144case VK_NAVIGATION_CANCEL: return SDL_SCANCODE_UNKNOWN;145case VK_NUMLOCK: return SDL_SCANCODE_UNKNOWN;146case VK_SCROLL: return SDL_SCANCODE_UNKNOWN;147case VK_OEM_NEC_EQUAL: return SDL_SCANCODE_UNKNOWN;148case VK_OEM_FJ_MASSHOU: return SDL_SCANCODE_UNKNOWN;149case VK_OEM_FJ_TOUROKU: return SDL_SCANCODE_UNKNOWN;150case VK_OEM_FJ_LOYA: return SDL_SCANCODE_UNKNOWN;151case VK_OEM_FJ_ROYA: return SDL_SCANCODE_UNKNOWN;152case VK_LSHIFT: return SDL_SCANCODE_LSHIFT;153case VK_RSHIFT: return SDL_SCANCODE_RSHIFT;154case VK_LCONTROL: return SDL_SCANCODE_LCTRL;155case VK_RCONTROL: return SDL_SCANCODE_RCTRL;156case VK_LMENU: return SDL_SCANCODE_LALT;157case VK_RMENU: return SDL_SCANCODE_RALT;158case VK_BROWSER_BACK: return SDL_SCANCODE_UNKNOWN;159case VK_BROWSER_FORWARD: return SDL_SCANCODE_UNKNOWN;160case VK_BROWSER_REFRESH: return SDL_SCANCODE_UNKNOWN;161case VK_BROWSER_STOP: return SDL_SCANCODE_UNKNOWN;162case VK_BROWSER_SEARCH: return SDL_SCANCODE_UNKNOWN;163case VK_BROWSER_FAVORITES: return SDL_SCANCODE_UNKNOWN;164case VK_BROWSER_HOME: return SDL_SCANCODE_UNKNOWN;165case VK_VOLUME_MUTE: return SDL_SCANCODE_UNKNOWN;166case VK_VOLUME_DOWN: return SDL_SCANCODE_UNKNOWN;167case VK_VOLUME_UP: return SDL_SCANCODE_UNKNOWN;168case VK_MEDIA_NEXT_TRACK: return SDL_SCANCODE_UNKNOWN;169case VK_MEDIA_PREV_TRACK: return SDL_SCANCODE_UNKNOWN;170case VK_MEDIA_STOP: return SDL_SCANCODE_UNKNOWN;171case VK_MEDIA_PLAY_PAUSE: return SDL_SCANCODE_UNKNOWN;172case VK_LAUNCH_MAIL: return SDL_SCANCODE_UNKNOWN;173case VK_LAUNCH_MEDIA_SELECT: return SDL_SCANCODE_UNKNOWN;174case VK_LAUNCH_APP1: return SDL_SCANCODE_UNKNOWN;175case VK_LAUNCH_APP2: return SDL_SCANCODE_UNKNOWN;176case VK_OEM_1: return SDL_SCANCODE_UNKNOWN;177case VK_OEM_PLUS: return SDL_SCANCODE_UNKNOWN;178case VK_OEM_COMMA: return SDL_SCANCODE_UNKNOWN;179case VK_OEM_MINUS: return SDL_SCANCODE_UNKNOWN;180case VK_OEM_PERIOD: return SDL_SCANCODE_UNKNOWN;181case VK_OEM_2: return SDL_SCANCODE_UNKNOWN;182case VK_OEM_3: return SDL_SCANCODE_UNKNOWN;183case VK_GAMEPAD_A: return SDL_SCANCODE_UNKNOWN;184case VK_GAMEPAD_B: return SDL_SCANCODE_UNKNOWN;185case VK_GAMEPAD_X: return SDL_SCANCODE_UNKNOWN;186case VK_GAMEPAD_Y: return SDL_SCANCODE_UNKNOWN;187case VK_GAMEPAD_RIGHT_SHOULDER: return SDL_SCANCODE_UNKNOWN;188case VK_GAMEPAD_LEFT_SHOULDER: return SDL_SCANCODE_UNKNOWN;189case VK_GAMEPAD_LEFT_TRIGGER: return SDL_SCANCODE_UNKNOWN;190case VK_GAMEPAD_RIGHT_TRIGGER: return SDL_SCANCODE_UNKNOWN;191case VK_GAMEPAD_DPAD_UP: return SDL_SCANCODE_UNKNOWN;192case VK_GAMEPAD_DPAD_DOWN: return SDL_SCANCODE_UNKNOWN;193case VK_GAMEPAD_DPAD_LEFT: return SDL_SCANCODE_UNKNOWN;194case VK_GAMEPAD_DPAD_RIGHT: return SDL_SCANCODE_UNKNOWN;195case VK_GAMEPAD_MENU: return SDL_SCANCODE_UNKNOWN;196case VK_GAMEPAD_VIEW: return SDL_SCANCODE_UNKNOWN;197case VK_GAMEPAD_LEFT_THUMBSTICK_BUTTON: return SDL_SCANCODE_UNKNOWN;198case VK_GAMEPAD_RIGHT_THUMBSTICK_BUTTON: return SDL_SCANCODE_UNKNOWN;199case VK_GAMEPAD_LEFT_THUMBSTICK_UP: return SDL_SCANCODE_UNKNOWN;200case VK_GAMEPAD_LEFT_THUMBSTICK_DOWN: return SDL_SCANCODE_UNKNOWN;201case VK_GAMEPAD_LEFT_THUMBSTICK_RIGHT: return SDL_SCANCODE_UNKNOWN;202case VK_GAMEPAD_LEFT_THUMBSTICK_LEFT: return SDL_SCANCODE_UNKNOWN;203case VK_GAMEPAD_RIGHT_THUMBSTICK_UP: return SDL_SCANCODE_UNKNOWN;204case VK_GAMEPAD_RIGHT_THUMBSTICK_DOWN: return SDL_SCANCODE_UNKNOWN;205case VK_GAMEPAD_RIGHT_THUMBSTICK_RIGHT: return SDL_SCANCODE_UNKNOWN;206case VK_GAMEPAD_RIGHT_THUMBSTICK_LEFT: return SDL_SCANCODE_UNKNOWN;207case VK_OEM_4: return SDL_SCANCODE_UNKNOWN;208case VK_OEM_5: return SDL_SCANCODE_UNKNOWN;209case VK_OEM_6: return SDL_SCANCODE_UNKNOWN;210case VK_OEM_7: return SDL_SCANCODE_UNKNOWN;211case VK_OEM_8: return SDL_SCANCODE_UNKNOWN;212case VK_OEM_AX: return SDL_SCANCODE_UNKNOWN;213case VK_OEM_102: return SDL_SCANCODE_UNKNOWN;214case VK_ICO_HELP: return SDL_SCANCODE_UNKNOWN;215case VK_ICO_00: return SDL_SCANCODE_UNKNOWN;216case VK_PROCESSKEY: return SDL_SCANCODE_UNKNOWN;217case VK_ICO_CLEAR: return SDL_SCANCODE_UNKNOWN;218case VK_PACKET: return SDL_SCANCODE_UNKNOWN;219case VK_OEM_RESET: return SDL_SCANCODE_UNKNOWN;220case VK_OEM_JUMP: return SDL_SCANCODE_UNKNOWN;221case VK_OEM_PA1: return SDL_SCANCODE_UNKNOWN;222case VK_OEM_PA2: return SDL_SCANCODE_UNKNOWN;223case VK_OEM_PA3: return SDL_SCANCODE_UNKNOWN;224case VK_OEM_WSCTRL: return SDL_SCANCODE_UNKNOWN;225case VK_OEM_CUSEL: return SDL_SCANCODE_UNKNOWN;226case VK_OEM_ATTN: return SDL_SCANCODE_UNKNOWN;227case VK_OEM_FINISH: return SDL_SCANCODE_UNKNOWN;228case VK_OEM_COPY: return SDL_SCANCODE_UNKNOWN;229case VK_OEM_AUTO: return SDL_SCANCODE_UNKNOWN;230case VK_OEM_ENLW: return SDL_SCANCODE_UNKNOWN;231case VK_OEM_BACKTAB: return SDL_SCANCODE_UNKNOWN;232case VK_ATTN: return SDL_SCANCODE_UNKNOWN;233case VK_CRSEL: return SDL_SCANCODE_UNKNOWN;234case VK_EXSEL: return SDL_SCANCODE_UNKNOWN;235case VK_EREOF: return SDL_SCANCODE_UNKNOWN;236case VK_PLAY: return SDL_SCANCODE_UNKNOWN;237case VK_ZOOM: return SDL_SCANCODE_UNKNOWN;238case VK_NONAME: return SDL_SCANCODE_UNKNOWN;239case VK_PA1: return SDL_SCANCODE_UNKNOWN;240case VK_OEM_CLEAR: return SDL_SCANCODE_UNKNOWN;241}242}243244int32 SDLToWinAPIMappings(int32 mapping)245{246switch (mapping) {247default: return KEYMAP_NO_MAPPING;248case SDL_SCANCODE_CANCEL: return VK_CANCEL;249case SDL_SCANCODE_TAB: return VK_TAB;250case SDL_SCANCODE_CLEAR: return VK_CLEAR;251case SDL_SCANCODE_RETURN: return VK_RETURN;252case SDL_SCANCODE_MENU: return VK_MENU;253case SDL_SCANCODE_PAUSE: return VK_PAUSE;254case SDL_SCANCODE_CAPSLOCK: return VK_CAPITAL;255case SDL_SCANCODE_ESCAPE: return VK_ESCAPE;256case SDL_SCANCODE_SPACE: return VK_SPACE;257case SDL_SCANCODE_PAGEUP: return VK_PRIOR;258case SDL_SCANCODE_PAGEDOWN: return VK_NEXT;259case SDL_SCANCODE_END: return VK_END;260case SDL_SCANCODE_HOME: return VK_HOME;261case SDL_SCANCODE_LEFT: return VK_LEFT;262case SDL_SCANCODE_UP: return VK_UP;263case SDL_SCANCODE_RIGHT: return VK_RIGHT;264case SDL_SCANCODE_DOWN: return VK_DOWN;265case SDL_SCANCODE_SELECT: return VK_SELECT;266case SDL_SCANCODE_EXECUTE: return VK_EXECUTE;267case SDL_SCANCODE_PRINTSCREEN: return VK_SNAPSHOT;268case SDL_SCANCODE_INSERT: return VK_INSERT;269case SDL_SCANCODE_DELETE: return VK_DELETE;270case SDL_SCANCODE_HELP: return VK_HELP;271case SDL_SCANCODE_0: return VK_0;272case SDL_SCANCODE_1: return VK_1;273case SDL_SCANCODE_2: return VK_2;274case SDL_SCANCODE_3: return VK_3;275case SDL_SCANCODE_4: return VK_4;276case SDL_SCANCODE_5: return VK_5;277case SDL_SCANCODE_6: return VK_6;278case SDL_SCANCODE_7: return VK_7;279case SDL_SCANCODE_8: return VK_8;280case SDL_SCANCODE_9: return VK_9;281case SDL_SCANCODE_A: return VK_A;282case SDL_SCANCODE_B: return VK_B;283case SDL_SCANCODE_C: return VK_C;284case SDL_SCANCODE_D: return VK_D;285case SDL_SCANCODE_E: return VK_E;286case SDL_SCANCODE_F: return VK_F;287case SDL_SCANCODE_G: return VK_G;288case SDL_SCANCODE_H: return VK_H;289case SDL_SCANCODE_I: return VK_I;290case SDL_SCANCODE_J: return VK_J;291case SDL_SCANCODE_K: return VK_K;292case SDL_SCANCODE_L: return VK_L;293case SDL_SCANCODE_M: return VK_M;294case SDL_SCANCODE_N: return VK_N;295case SDL_SCANCODE_O: return VK_O;296case SDL_SCANCODE_P: return VK_P;297case SDL_SCANCODE_Q: return VK_Q;298case SDL_SCANCODE_R: return VK_R;299case SDL_SCANCODE_S: return VK_S;300case SDL_SCANCODE_T: return VK_T;301case SDL_SCANCODE_U: return VK_U;302case SDL_SCANCODE_V: return VK_V;303case SDL_SCANCODE_W: return VK_W;304case SDL_SCANCODE_X: return VK_X;305case SDL_SCANCODE_Y: return VK_Y;306case SDL_SCANCODE_Z: return VK_Z;307case SDL_SCANCODE_F1: return VK_F1;308case SDL_SCANCODE_F2: return VK_F2;309case SDL_SCANCODE_F3: return VK_F3;310case SDL_SCANCODE_F4: return VK_F4;311case SDL_SCANCODE_F5: return VK_F5;312case SDL_SCANCODE_F6: return VK_F6;313case SDL_SCANCODE_F7: return VK_F7;314case SDL_SCANCODE_F8: return VK_F8;315case SDL_SCANCODE_F9: return VK_F9;316case SDL_SCANCODE_F10: return VK_F10;317case SDL_SCANCODE_F11: return VK_F11;318case SDL_SCANCODE_F12: return VK_F12;319case SDL_SCANCODE_F13: return VK_F13;320case SDL_SCANCODE_F14: return VK_F14;321case SDL_SCANCODE_F15: return VK_F15;322case SDL_SCANCODE_F16: return VK_F16;323case SDL_SCANCODE_F17: return VK_F17;324case SDL_SCANCODE_F18: return VK_F18;325case SDL_SCANCODE_F19: return VK_F19;326case SDL_SCANCODE_F20: return VK_F20;327case SDL_SCANCODE_F21: return VK_F21;328case SDL_SCANCODE_F22: return VK_F22;329case SDL_SCANCODE_F23: return VK_F23;330case SDL_SCANCODE_F24: return VK_F24;331case SDL_SCANCODE_LSHIFT: return VK_LSHIFT;332case SDL_SCANCODE_RSHIFT: return VK_RSHIFT;333case SDL_SCANCODE_LCTRL: return VK_LCONTROL;334case SDL_SCANCODE_RCTRL: return VK_RCONTROL;335case SDL_SCANCODE_LALT: return VK_LMENU;336case SDL_SCANCODE_RALT: return VK_RMENU;337}338}339#elif RETRO_INPUTDEVICE_GLFW340int32 winAPIToGLFWMappings(int32 mapping)341{342switch (mapping) {343default: return GLFW_KEY_UNKNOWN;344case VK_LBUTTON: return GLFW_KEY_UNKNOWN;345case VK_RBUTTON: return GLFW_KEY_UNKNOWN;346case VK_CANCEL: return GLFW_KEY_UNKNOWN;347case VK_MBUTTON: return GLFW_KEY_UNKNOWN;348case VK_XBUTTON1: return GLFW_KEY_UNKNOWN;349case VK_XBUTTON2: return GLFW_KEY_UNKNOWN;350case VK_BACK: return GLFW_KEY_UNKNOWN;351case VK_TAB: return GLFW_KEY_TAB;352case VK_CLEAR: return GLFW_KEY_UNKNOWN;353case VK_RETURN: return GLFW_KEY_ENTER;354case VK_SHIFT: return GLFW_KEY_UNKNOWN;355case VK_CONTROL: return GLFW_KEY_UNKNOWN;356case VK_MENU: return GLFW_KEY_MENU;357case VK_PAUSE: return GLFW_KEY_PAUSE;358case VK_CAPITAL: return GLFW_KEY_CAPS_LOCK;359case VK_KANA: return GLFW_KEY_UNKNOWN;360case VK_JUNJA: return GLFW_KEY_UNKNOWN;361case VK_FINAL: return GLFW_KEY_UNKNOWN;362case VK_HANJA: return GLFW_KEY_UNKNOWN;363case VK_ESCAPE: return GLFW_KEY_ESCAPE;364case VK_CONVERT: return GLFW_KEY_UNKNOWN;365case VK_NONCONVERT: return GLFW_KEY_UNKNOWN;366case VK_ACCEPT: return GLFW_KEY_UNKNOWN;367case VK_MODECHANGE: return GLFW_KEY_UNKNOWN;368case VK_SPACE: return GLFW_KEY_SPACE;369case VK_PRIOR: return GLFW_KEY_PAGE_UP;370case VK_NEXT: return GLFW_KEY_PAGE_DOWN;371case VK_END: return GLFW_KEY_END;372case VK_HOME: return GLFW_KEY_HOME;373case VK_LEFT: return GLFW_KEY_LEFT;374case VK_UP: return GLFW_KEY_UP;375case VK_RIGHT: return GLFW_KEY_RIGHT;376case VK_DOWN: return GLFW_KEY_DOWN;377case VK_SELECT: return GLFW_KEY_UNKNOWN;378case VK_PRINT: return GLFW_KEY_UNKNOWN;379case VK_EXECUTE: return GLFW_KEY_UNKNOWN;380case VK_SNAPSHOT: return GLFW_KEY_PRINT_SCREEN;381case VK_INSERT: return GLFW_KEY_INSERT;382case VK_DELETE: return GLFW_KEY_DELETE;383case VK_HELP: return GLFW_KEY_UNKNOWN;384case VK_0: return GLFW_KEY_0;385case VK_1: return GLFW_KEY_1;386case VK_2: return GLFW_KEY_2;387case VK_3: return GLFW_KEY_3;388case VK_4: return GLFW_KEY_4;389case VK_5: return GLFW_KEY_5;390case VK_6: return GLFW_KEY_6;391case VK_7: return GLFW_KEY_7;392case VK_8: return GLFW_KEY_8;393case VK_9: return GLFW_KEY_9;394case VK_A: return GLFW_KEY_A;395case VK_B: return GLFW_KEY_B;396case VK_C: return GLFW_KEY_C;397case VK_D: return GLFW_KEY_D;398case VK_E: return GLFW_KEY_E;399case VK_F: return GLFW_KEY_F;400case VK_G: return GLFW_KEY_G;401case VK_H: return GLFW_KEY_H;402case VK_I: return GLFW_KEY_I;403case VK_J: return GLFW_KEY_J;404case VK_K: return GLFW_KEY_K;405case VK_L: return GLFW_KEY_L;406case VK_M: return GLFW_KEY_M;407case VK_N: return GLFW_KEY_N;408case VK_O: return GLFW_KEY_O;409case VK_P: return GLFW_KEY_P;410case VK_Q: return GLFW_KEY_Q;411case VK_R: return GLFW_KEY_R;412case VK_S: return GLFW_KEY_S;413case VK_T: return GLFW_KEY_T;414case VK_U: return GLFW_KEY_U;415case VK_V: return GLFW_KEY_V;416case VK_W: return GLFW_KEY_W;417case VK_X: return GLFW_KEY_X;418case VK_Y: return GLFW_KEY_Y;419case VK_Z: return GLFW_KEY_Z;420case VK_LWIN: return GLFW_KEY_UNKNOWN;421case VK_RWIN: return GLFW_KEY_UNKNOWN;422case VK_APPS: return GLFW_KEY_UNKNOWN;423case VK_SLEEP: return GLFW_KEY_UNKNOWN;424case VK_NUMPAD0: return GLFW_KEY_KP_0;425case VK_NUMPAD1: return GLFW_KEY_KP_1;426case VK_NUMPAD2: return GLFW_KEY_KP_2;427case VK_NUMPAD3: return GLFW_KEY_KP_3;428case VK_NUMPAD4: return GLFW_KEY_KP_4;429case VK_NUMPAD5: return GLFW_KEY_KP_5;430case VK_NUMPAD6: return GLFW_KEY_KP_6;431case VK_NUMPAD7: return GLFW_KEY_KP_7;432case VK_NUMPAD8: return GLFW_KEY_KP_8;433case VK_NUMPAD9: return GLFW_KEY_KP_9;434case VK_MULTIPLY: return GLFW_KEY_KP_MULTIPLY;435case VK_ADD: return GLFW_KEY_KP_ADD;436case VK_SEPARATOR: return GLFW_KEY_UNKNOWN;437case VK_SUBTRACT: return GLFW_KEY_KP_SUBTRACT;438case VK_DECIMAL: return GLFW_KEY_KP_DECIMAL;439case VK_DIVIDE: return GLFW_KEY_KP_DIVIDE;440case VK_F1: return GLFW_KEY_F1;441case VK_F2: return GLFW_KEY_F2;442case VK_F3: return GLFW_KEY_F3;443case VK_F4: return GLFW_KEY_F4;444case VK_F5: return GLFW_KEY_F5;445case VK_F6: return GLFW_KEY_F6;446case VK_F7: return GLFW_KEY_F7;447case VK_F8: return GLFW_KEY_F8;448case VK_F9: return GLFW_KEY_F9;449case VK_F10: return GLFW_KEY_F10;450case VK_F11: return GLFW_KEY_F11;451case VK_F12: return GLFW_KEY_F12;452case VK_F13: return GLFW_KEY_F13;453case VK_F14: return GLFW_KEY_F14;454case VK_F15: return GLFW_KEY_F15;455case VK_F16: return GLFW_KEY_F16;456case VK_F17: return GLFW_KEY_F17;457case VK_F18: return GLFW_KEY_F18;458case VK_F19: return GLFW_KEY_F19;459case VK_F20: return GLFW_KEY_F20;460case VK_F21: return GLFW_KEY_F21;461case VK_F22: return GLFW_KEY_F22;462case VK_F23: return GLFW_KEY_F23;463case VK_F24: return GLFW_KEY_F24;464case VK_NAVIGATION_VIEW: return GLFW_KEY_UNKNOWN;465case VK_NAVIGATION_MENU: return GLFW_KEY_UNKNOWN;466case VK_NAVIGATION_UP: return GLFW_KEY_UNKNOWN;467case VK_NAVIGATION_DOWN: return GLFW_KEY_UNKNOWN;468case VK_NAVIGATION_LEFT: return GLFW_KEY_UNKNOWN;469case VK_NAVIGATION_RIGHT: return GLFW_KEY_UNKNOWN;470case VK_NAVIGATION_ACCEPT: return GLFW_KEY_UNKNOWN;471case VK_NAVIGATION_CANCEL: return GLFW_KEY_UNKNOWN;472case VK_NUMLOCK: return GLFW_KEY_NUM_LOCK;473case VK_SCROLL: return GLFW_KEY_SCROLL_LOCK;474case VK_OEM_NEC_EQUAL: return GLFW_KEY_UNKNOWN;475case VK_OEM_FJ_MASSHOU: return GLFW_KEY_UNKNOWN;476case VK_OEM_FJ_TOUROKU: return GLFW_KEY_UNKNOWN;477case VK_OEM_FJ_LOYA: return GLFW_KEY_UNKNOWN;478case VK_OEM_FJ_ROYA: return GLFW_KEY_UNKNOWN;479case VK_LSHIFT: return GLFW_KEY_LEFT_SHIFT;480case VK_RSHIFT: return GLFW_KEY_RIGHT_SHIFT;481case VK_LCONTROL: return GLFW_KEY_LEFT_CONTROL;482case VK_RCONTROL: return GLFW_KEY_RIGHT_CONTROL;483case VK_LMENU: return GLFW_KEY_LEFT_ALT;484case VK_RMENU: return GLFW_KEY_RIGHT_ALT;485case VK_BROWSER_BACK: return GLFW_KEY_UNKNOWN;486case VK_BROWSER_FORWARD: return GLFW_KEY_UNKNOWN;487case VK_BROWSER_REFRESH: return GLFW_KEY_UNKNOWN;488case VK_BROWSER_STOP: return GLFW_KEY_UNKNOWN;489case VK_BROWSER_SEARCH: return GLFW_KEY_UNKNOWN;490case VK_BROWSER_FAVORITES: return GLFW_KEY_UNKNOWN;491case VK_BROWSER_HOME: return GLFW_KEY_UNKNOWN;492case VK_VOLUME_MUTE: return GLFW_KEY_UNKNOWN;493case VK_VOLUME_DOWN: return GLFW_KEY_UNKNOWN;494case VK_VOLUME_UP: return GLFW_KEY_UNKNOWN;495case VK_MEDIA_NEXT_TRACK: return GLFW_KEY_UNKNOWN;496case VK_MEDIA_PREV_TRACK: return GLFW_KEY_UNKNOWN;497case VK_MEDIA_STOP: return GLFW_KEY_UNKNOWN;498case VK_MEDIA_PLAY_PAUSE: return GLFW_KEY_UNKNOWN;499case VK_LAUNCH_MAIL: return GLFW_KEY_UNKNOWN;500case VK_LAUNCH_MEDIA_SELECT: return GLFW_KEY_UNKNOWN;501case VK_LAUNCH_APP1: return GLFW_KEY_UNKNOWN;502case VK_LAUNCH_APP2: return GLFW_KEY_UNKNOWN;503case VK_OEM_1: return GLFW_KEY_UNKNOWN;504case VK_OEM_PLUS: return GLFW_KEY_UNKNOWN;505case VK_OEM_COMMA: return GLFW_KEY_UNKNOWN;506case VK_OEM_MINUS: return GLFW_KEY_UNKNOWN;507case VK_OEM_PERIOD: return GLFW_KEY_UNKNOWN;508case VK_OEM_2: return GLFW_KEY_UNKNOWN;509case VK_OEM_3: return GLFW_KEY_UNKNOWN;510case VK_GAMEPAD_A: return GLFW_KEY_UNKNOWN;511case VK_GAMEPAD_B: return GLFW_KEY_UNKNOWN;512case VK_GAMEPAD_X: return GLFW_KEY_UNKNOWN;513case VK_GAMEPAD_Y: return GLFW_KEY_UNKNOWN;514case VK_GAMEPAD_RIGHT_SHOULDER: return GLFW_KEY_UNKNOWN;515case VK_GAMEPAD_LEFT_SHOULDER: return GLFW_KEY_UNKNOWN;516case VK_GAMEPAD_LEFT_TRIGGER: return GLFW_KEY_UNKNOWN;517case VK_GAMEPAD_RIGHT_TRIGGER: return GLFW_KEY_UNKNOWN;518case VK_GAMEPAD_DPAD_UP: return GLFW_KEY_UNKNOWN;519case VK_GAMEPAD_DPAD_DOWN: return GLFW_KEY_UNKNOWN;520case VK_GAMEPAD_DPAD_LEFT: return GLFW_KEY_UNKNOWN;521case VK_GAMEPAD_DPAD_RIGHT: return GLFW_KEY_UNKNOWN;522case VK_GAMEPAD_MENU: return GLFW_KEY_UNKNOWN;523case VK_GAMEPAD_VIEW: return GLFW_KEY_UNKNOWN;524case VK_GAMEPAD_LEFT_THUMBSTICK_BUTTON: return GLFW_KEY_UNKNOWN;525case VK_GAMEPAD_RIGHT_THUMBSTICK_BUTTON: return GLFW_KEY_UNKNOWN;526case VK_GAMEPAD_LEFT_THUMBSTICK_UP: return GLFW_KEY_UNKNOWN;527case VK_GAMEPAD_LEFT_THUMBSTICK_DOWN: return GLFW_KEY_UNKNOWN;528case VK_GAMEPAD_LEFT_THUMBSTICK_RIGHT: return GLFW_KEY_UNKNOWN;529case VK_GAMEPAD_LEFT_THUMBSTICK_LEFT: return GLFW_KEY_UNKNOWN;530case VK_GAMEPAD_RIGHT_THUMBSTICK_UP: return GLFW_KEY_UNKNOWN;531case VK_GAMEPAD_RIGHT_THUMBSTICK_DOWN: return GLFW_KEY_UNKNOWN;532case VK_GAMEPAD_RIGHT_THUMBSTICK_RIGHT: return GLFW_KEY_UNKNOWN;533case VK_GAMEPAD_RIGHT_THUMBSTICK_LEFT: return GLFW_KEY_UNKNOWN;534case VK_OEM_4: return GLFW_KEY_UNKNOWN;535case VK_OEM_5: return GLFW_KEY_UNKNOWN;536case VK_OEM_6: return GLFW_KEY_UNKNOWN;537case VK_OEM_7: return GLFW_KEY_UNKNOWN;538case VK_OEM_8: return GLFW_KEY_UNKNOWN;539case VK_OEM_AX: return GLFW_KEY_UNKNOWN;540case VK_OEM_102: return GLFW_KEY_UNKNOWN;541case VK_ICO_HELP: return GLFW_KEY_UNKNOWN;542case VK_ICO_00: return GLFW_KEY_UNKNOWN;543case VK_PROCESSKEY: return GLFW_KEY_UNKNOWN;544case VK_ICO_CLEAR: return GLFW_KEY_UNKNOWN;545case VK_PACKET: return GLFW_KEY_UNKNOWN;546case VK_OEM_RESET: return GLFW_KEY_UNKNOWN;547case VK_OEM_JUMP: return GLFW_KEY_UNKNOWN;548case VK_OEM_PA1: return GLFW_KEY_UNKNOWN;549case VK_OEM_PA2: return GLFW_KEY_UNKNOWN;550case VK_OEM_PA3: return GLFW_KEY_UNKNOWN;551case VK_OEM_WSCTRL: return GLFW_KEY_UNKNOWN;552case VK_OEM_CUSEL: return GLFW_KEY_UNKNOWN;553case VK_OEM_ATTN: return GLFW_KEY_UNKNOWN;554case VK_OEM_FINISH: return GLFW_KEY_UNKNOWN;555case VK_OEM_COPY: return GLFW_KEY_UNKNOWN;556case VK_OEM_AUTO: return GLFW_KEY_UNKNOWN;557case VK_OEM_ENLW: return GLFW_KEY_UNKNOWN;558case VK_OEM_BACKTAB: return GLFW_KEY_UNKNOWN;559case VK_ATTN: return GLFW_KEY_UNKNOWN;560case VK_CRSEL: return GLFW_KEY_UNKNOWN;561case VK_EXSEL: return GLFW_KEY_UNKNOWN;562case VK_EREOF: return GLFW_KEY_UNKNOWN;563case VK_PLAY: return GLFW_KEY_UNKNOWN;564case VK_ZOOM: return GLFW_KEY_UNKNOWN;565case VK_NONAME: return GLFW_KEY_UNKNOWN;566case VK_PA1: return GLFW_KEY_UNKNOWN;567case VK_OEM_CLEAR: return GLFW_KEY_UNKNOWN;568}569}570571int32 GLFWToWinAPIMappings(int32 mapping)572{573switch (mapping) {574default: return KEYMAP_NO_MAPPING;575case GLFW_KEY_TAB: return VK_TAB;576case GLFW_KEY_ENTER: return VK_RETURN;577case GLFW_KEY_MENU: return VK_MENU;578case GLFW_KEY_PAUSE: return VK_PAUSE;579case GLFW_KEY_CAPS_LOCK: return VK_CAPITAL;580case GLFW_KEY_ESCAPE: return VK_ESCAPE;581case GLFW_KEY_SPACE: return VK_SPACE;582case GLFW_KEY_PAGE_UP: return VK_PRIOR;583case GLFW_KEY_PAGE_DOWN: return VK_NEXT;584case GLFW_KEY_END: return VK_END;585case GLFW_KEY_HOME: return VK_HOME;586case GLFW_KEY_LEFT: return VK_LEFT;587case GLFW_KEY_UP: return VK_UP;588case GLFW_KEY_RIGHT: return VK_RIGHT;589case GLFW_KEY_DOWN: return VK_DOWN;590case GLFW_KEY_PRINT_SCREEN: return VK_SNAPSHOT;591case GLFW_KEY_INSERT: return VK_INSERT;592case GLFW_KEY_DELETE: return VK_DELETE;593case GLFW_KEY_0: return VK_0;594case GLFW_KEY_1: return VK_1;595case GLFW_KEY_2: return VK_2;596case GLFW_KEY_3: return VK_3;597case GLFW_KEY_4: return VK_4;598case GLFW_KEY_5: return VK_5;599case GLFW_KEY_6: return VK_6;600case GLFW_KEY_7: return VK_7;601case GLFW_KEY_8: return VK_8;602case GLFW_KEY_9: return VK_9;603case GLFW_KEY_A: return VK_A;604case GLFW_KEY_B: return VK_B;605case GLFW_KEY_C: return VK_C;606case GLFW_KEY_D: return VK_D;607case GLFW_KEY_E: return VK_E;608case GLFW_KEY_F: return VK_F;609case GLFW_KEY_G: return VK_G;610case GLFW_KEY_H: return VK_H;611case GLFW_KEY_I: return VK_I;612case GLFW_KEY_J: return VK_J;613case GLFW_KEY_K: return VK_K;614case GLFW_KEY_L: return VK_L;615case GLFW_KEY_M: return VK_M;616case GLFW_KEY_N: return VK_N;617case GLFW_KEY_O: return VK_O;618case GLFW_KEY_P: return VK_P;619case GLFW_KEY_Q: return VK_Q;620case GLFW_KEY_R: return VK_R;621case GLFW_KEY_S: return VK_S;622case GLFW_KEY_T: return VK_T;623case GLFW_KEY_U: return VK_U;624case GLFW_KEY_V: return VK_V;625case GLFW_KEY_W: return VK_W;626case GLFW_KEY_X: return VK_X;627case GLFW_KEY_Y: return VK_Y;628case GLFW_KEY_Z: return VK_Z;629case GLFW_KEY_F1: return VK_F1;630case GLFW_KEY_F2: return VK_F2;631case GLFW_KEY_F3: return VK_F3;632case GLFW_KEY_F4: return VK_F4;633case GLFW_KEY_F5: return VK_F5;634case GLFW_KEY_F6: return VK_F6;635case GLFW_KEY_F7: return VK_F7;636case GLFW_KEY_F8: return VK_F8;637case GLFW_KEY_F9: return VK_F9;638case GLFW_KEY_F10: return VK_F10;639case GLFW_KEY_F11: return VK_F11;640case GLFW_KEY_F12: return VK_F12;641case GLFW_KEY_F13: return VK_F13;642case GLFW_KEY_F14: return VK_F14;643case GLFW_KEY_F15: return VK_F15;644case GLFW_KEY_F16: return VK_F16;645case GLFW_KEY_F17: return VK_F17;646case GLFW_KEY_F18: return VK_F18;647case GLFW_KEY_F19: return VK_F19;648case GLFW_KEY_F20: return VK_F20;649case GLFW_KEY_F21: return VK_F21;650case GLFW_KEY_F22: return VK_F22;651case GLFW_KEY_F23: return VK_F23;652case GLFW_KEY_F24: return VK_F24;653case GLFW_KEY_LEFT_SHIFT: return VK_LSHIFT;654case GLFW_KEY_RIGHT_SHIFT: return VK_RSHIFT;655case GLFW_KEY_LEFT_CONTROL: return VK_LCONTROL;656case GLFW_KEY_RIGHT_CONTROL: return VK_RCONTROL;657case GLFW_KEY_LEFT_ALT: return VK_LMENU;658case GLFW_KEY_RIGHT_ALT: return VK_RMENU;659case GLFW_KEY_NUM_LOCK: return VK_NUMLOCK;660case GLFW_KEY_SCROLL_LOCK: return VK_SCROLL;661case GLFW_KEY_KP_0: return VK_NUMPAD0;662case GLFW_KEY_KP_1: return VK_NUMPAD1;663case GLFW_KEY_KP_2: return VK_NUMPAD2;664case GLFW_KEY_KP_3: return VK_NUMPAD3;665case GLFW_KEY_KP_4: return VK_NUMPAD4;666case GLFW_KEY_KP_5: return VK_NUMPAD5;667case GLFW_KEY_KP_6: return VK_NUMPAD6;668case GLFW_KEY_KP_7: return VK_NUMPAD7;669case GLFW_KEY_KP_8: return VK_NUMPAD8;670case GLFW_KEY_KP_9: return VK_NUMPAD9;671case GLFW_KEY_KP_MULTIPLY: return VK_MULTIPLY;672case GLFW_KEY_KP_ADD: return VK_ADD;673case GLFW_KEY_KP_SUBTRACT: return VK_SUBTRACT;674case GLFW_KEY_KP_DECIMAL: return VK_DECIMAL;675case GLFW_KEY_KP_DIVIDE: return VK_DIVIDE;676}677}678#endif679680RSDK::SKU::InputDeviceKeyboard *RSDK::SKU::InitKeyboardDevice(uint32 id)681{682if (inputDeviceCount == INPUTDEVICE_COUNT)683return NULL;684685if (inputDeviceList[inputDeviceCount] && inputDeviceList[inputDeviceCount]->active)686return NULL;687688if (inputDeviceList[inputDeviceCount])689delete inputDeviceList[inputDeviceCount];690691inputDeviceList[inputDeviceCount] = new InputDeviceKeyboard();692693InputDeviceKeyboard *device = (InputDeviceKeyboard *)inputDeviceList[inputDeviceCount];694device->gamepadType = (DEVICE_API_KEYBOARD << 16) | (DEVICE_TYPE_KEYBOARD << 8) | (DEVICE_KEYBOARD << 0);695device->disabled = false;696device->id = id;697device->active = true;698699for (int32 i = 0; i < PLAYER_COUNT; ++i) {700if (inputSlots[i] == id) {701inputSlotDevices[i] = device;702device->isAssigned = true;703}704}705706inputDeviceCount++;707return device;708}709710void RSDK::SKU::InputDeviceKeyboard::UpdateInput()711{712if (!this->controllerID) {713Vector2 cursorPos{};714715// ORIGINAL CODE: CANNOT BE UNDEFINED716if (RenderDevice::GetCursorPos(&cursorPos)) {717float prevX = touchInfo.x[0];718float prevY = touchInfo.y[0];719720touchInfo.x[0] = (cursorPos.x - videoSettings.viewportX) * videoSettings.viewportW;721touchInfo.y[0] = (cursorPos.y - videoSettings.viewportY) * videoSettings.viewportH;722723if (touchInfo.x[0] == prevX && touchInfo.y[0] == prevY) {724if (this->mouseHideTimer <= 120) {725if (++this->mouseHideTimer == 120) {726RenderDevice::ShowCursor(false);727}728}729}730else if (this->mouseHideTimer >= 120) {731this->mouseHideTimer = 0;732733RenderDevice::ShowCursor(true);734}735}736}737738this->prevButtonMasks = this->buttonMasks;739this->buttonMasks = keyState[this->controllerID];740741int32 changedKeys = ~this->prevButtonMasks & (this->buttonMasks ^ this->prevButtonMasks);742if (changedKeys) {743this->inactiveTimer[0] = 0;744this->anyPress = true;745}746else {747++this->inactiveTimer[0];748this->anyPress = 0;749}750751if ((changedKeys & KEYMASK_A) || (changedKeys & KEYMASK_START))752this->inactiveTimer[1] = 0;753else754++this->inactiveTimer[1];755756this->stateUp = (this->buttonMasks & KEYMASK_UP) != 0;757this->stateDown = (this->buttonMasks & KEYMASK_DOWN) != 0;758this->stateLeft = (this->buttonMasks & KEYMASK_LEFT) != 0;759this->stateRight = (this->buttonMasks & KEYMASK_RIGHT) != 0;760this->stateA = (this->buttonMasks & KEYMASK_A) != 0;761this->stateB = (this->buttonMasks & KEYMASK_B) != 0;762this->stateC = (this->buttonMasks & KEYMASK_C) != 0;763this->stateX = (this->buttonMasks & KEYMASK_X) != 0;764this->stateY = (this->buttonMasks & KEYMASK_Y) != 0;765this->stateZ = (this->buttonMasks & KEYMASK_Z) != 0;766this->stateStart = (this->buttonMasks & KEYMASK_START) != 0;767this->stateSelect = (this->buttonMasks & KEYMASK_SELECT) != 0;768769this->ProcessInput(CONT_ANY);770}771772void RSDK::SKU::InputDeviceKeyboard::ProcessInput(int32 controllerID)773{774ControllerState *cont = &controller[controllerID];775776cont->keyUp.press |= this->stateUp;777cont->keyDown.press |= this->stateDown;778cont->keyLeft.press |= this->stateLeft;779cont->keyRight.press |= this->stateRight;780cont->keyA.press |= this->stateA;781cont->keyB.press |= this->stateB;782cont->keyC.press |= this->stateC;783cont->keyX.press |= this->stateX;784cont->keyY.press |= this->stateY;785cont->keyZ.press |= this->stateZ;786cont->keyStart.press |= this->stateStart;787cont->keySelect.press |= this->stateSelect;788}789790void RSDK::SKU::InitKeyboardInputAPI()791{792char idBuffer[0x10];793for (int32 i = 0; i < PLAYER_COUNT; ++i) {794sprintf_s(idBuffer, sizeof(idBuffer), "KBDevice%d", i);795uint32 id = 0;796GenerateHashCRC(&id, idBuffer);797798InputDeviceKeyboard *device = InitKeyboardDevice(id);799if (device) {800device->controllerID = i;801// add the keyboard "device" id to the type as its lowest byte802device->gamepadType |= i + 1;803}804}805}806807void RSDK::SKU::UpdateKeyState(int32 keyCode)808{809#if RETRO_RENDERDEVICE_SDL2810keyCode = SDLToWinAPIMappings(keyCode);811#elif RETRO_INPUTDEVICE_GLFW812keyCode = GLFWToWinAPIMappings(keyCode);813#endif814815// invalid key816if (keyCode == KEYMAP_NO_MAPPING)817return;818819for (int32 i = 1; i <= PLAYER_COUNT; ++i) {820InputState *buttons[] = {821&controller[i].keyUp, &controller[i].keyDown, &controller[i].keyLeft, &controller[i].keyRight,822&controller[i].keyA, &controller[i].keyB, &controller[i].keyC, &controller[i].keyX,823&controller[i].keyY, &controller[i].keyZ, &controller[i].keyStart, &controller[i].keySelect,824};825826int32 keyMasks[] = {827KEYMASK_UP, KEYMASK_DOWN, KEYMASK_LEFT, KEYMASK_RIGHT, KEYMASK_A, KEYMASK_B,828KEYMASK_C, KEYMASK_X, KEYMASK_Y, KEYMASK_Z, KEYMASK_START, KEYMASK_SELECT,829};830831for (int32 k = 0; k < KEY_MAX; k++) {832if (keyCode == buttons[k]->keyMap)833keyState[i - 1] |= keyMasks[k];834else if (buttons[k]->keyMap == -1)835buttons[k]->keyMap = keyCode;836}837}838}839840void RSDK::SKU::ClearKeyState(int32 keyCode)841{842#if RETRO_RENDERDEVICE_SDL2843keyCode = SDLToWinAPIMappings(keyCode);844#elif RETRO_INPUTDEVICE_GLFW845keyCode = GLFWToWinAPIMappings(keyCode);846#endif847848for (int32 i = 1; i <= PLAYER_COUNT; ++i) {849InputState *buttons[] = {850&controller[i].keyUp, &controller[i].keyDown, &controller[i].keyLeft, &controller[i].keyRight,851&controller[i].keyA, &controller[i].keyB, &controller[i].keyC, &controller[i].keyX,852&controller[i].keyY, &controller[i].keyZ, &controller[i].keyStart, &controller[i].keySelect,853};854855int32 keyMasks[] = {856KEYMASK_UP, KEYMASK_DOWN, KEYMASK_LEFT, KEYMASK_RIGHT, KEYMASK_A, KEYMASK_B,857KEYMASK_C, KEYMASK_X, KEYMASK_Y, KEYMASK_Z, KEYMASK_START, KEYMASK_SELECT,858};859860for (int32 k = 0; k < KEY_MAX; k++) {861if (keyCode == buttons[k]->keyMap)862keyState[i - 1] &= ~keyMasks[k];863}864}865}866867#if !RETRO_REV02868void RSDK::SKU::HandleSpecialKeys()869{870if (specialKeyStates[0] || specialKeyStates[3]) {871touchInfo.pausePress = !touchInfo.pauseHold;872touchInfo.pauseHold = true;873}874else {875touchInfo.pausePress = false;876touchInfo.pauseHold = false;877}878879if (buttonDownCount) {880touchInfo.anyKeyHold = true;881touchInfo.anyKeyPress = prevButtonDownCount < buttonDownCount;882}883else {884touchInfo.anyKeyPress = false;885touchInfo.anyKeyHold = false;886}887888prevButtonDownCount = buttonDownCount;889for (int32 k = 0; k < 4; ++k) prevSpecialKeyStates[k] = specialKeyStates[k];890}891#endif892893