diff --git a/compat/AKeyCodes.hpp b/compat/KeyCodes.hpp similarity index 96% rename from compat/AKeyCodes.hpp rename to compat/KeyCodes.hpp index ad84f2b..9f5e60c 100644 --- a/compat/AKeyCodes.hpp +++ b/compat/KeyCodes.hpp @@ -8,6 +8,24 @@ #pragma once +#ifdef USE_SDL +#include + +// because SDL sucks and makes no sense and sets bit 1<<30 for some keycodes for some godamn reason +enum eSDLVirtualKeys +{ + #define CODE(x) SDLVK_ ## x, + #include "SDLKeyCodes.h" + #undef CODE +}; + +#endif + +#ifdef _WIN32 +#define WIN32_LEAN_AND_MEAN +#include +#endif + #ifdef PLATFORM_ANDROID enum diff --git a/compat/SDLKeyCodes.h b/compat/SDLKeyCodes.h new file mode 100644 index 0000000..4beaeaa --- /dev/null +++ b/compat/SDLKeyCodes.h @@ -0,0 +1,244 @@ +CODE(UNKNOWN) +CODE(RETURN) +CODE(ESCAPE) +CODE(BACKSPACE) +CODE(TAB) +CODE(SPACE) +CODE(EXCLAIM) +CODE(QUOTEDBL) +CODE(HASH) +CODE(PERCENT) +CODE(DOLLAR) +CODE(AMPERSAND) +CODE(QUOTE) +CODE(LEFTPAREN) +CODE(RIGHTPAREN) +CODE(ASTERISK) +CODE(PLUS) +CODE(COMMA) +CODE(MINUS) +CODE(PERIOD) +CODE(SLASH) +CODE(0) +CODE(1) +CODE(2) +CODE(3) +CODE(4) +CODE(5) +CODE(6) +CODE(7) +CODE(8) +CODE(9) +CODE(COLON) +CODE(SEMICOLON) +CODE(LESS) +CODE(EQUALS) +CODE(GREATER) +CODE(QUESTION) +CODE(AT) +CODE(LEFTBRACKET) +CODE(BACKSLASH) +CODE(RIGHTBRACKET) +CODE(CARET) +CODE(UNDERSCORE) +CODE(BACKQUOTE) +CODE(a) +CODE(b) +CODE(c) +CODE(d) +CODE(e) +CODE(f) +CODE(g) +CODE(h) +CODE(i) +CODE(j) +CODE(k) +CODE(l) +CODE(m) +CODE(n) +CODE(o) +CODE(p) +CODE(q) +CODE(r) +CODE(s) +CODE(t) +CODE(u) +CODE(v) +CODE(w) +CODE(x) +CODE(y) +CODE(z) +CODE(CAPSLOCK) +CODE(F1) +CODE(F2) +CODE(F3) +CODE(F4) +CODE(F5) +CODE(F6) +CODE(F7) +CODE(F8) +CODE(F9) +CODE(F10) +CODE(F11) +CODE(F12) +CODE(PRINTSCREEN) +CODE(SCROLLLOCK) +CODE(PAUSE) +CODE(INSERT) +CODE(HOME) +CODE(PAGEUP) +CODE(DELETE) +CODE(END) +CODE(PAGEDOWN) +CODE(RIGHT) +CODE(LEFT) +CODE(DOWN) +CODE(UP) +CODE(NUMLOCKCLEAR) +CODE(KP_DIVIDE) +CODE(KP_MULTIPLY) +CODE(KP_MINUS) +CODE(KP_PLUS) +CODE(KP_ENTER) +CODE(KP_1) +CODE(KP_2) +CODE(KP_3) +CODE(KP_4) +CODE(KP_5) +CODE(KP_6) +CODE(KP_7) +CODE(KP_8) +CODE(KP_9) +CODE(KP_0) +CODE(KP_PERIOD) +CODE(APPLICATION) +CODE(POWER) +CODE(KP_EQUALS) +CODE(F13) +CODE(F14) +CODE(F15) +CODE(F16) +CODE(F17) +CODE(F18) +CODE(F19) +CODE(F20) +CODE(F21) +CODE(F22) +CODE(F23) +CODE(F24) +CODE(EXECUTE) +CODE(HELP) +CODE(MENU) +CODE(SELECT) +CODE(STOP) +CODE(AGAIN) +CODE(UNDO) +CODE(CUT) +CODE(COPY) +CODE(PASTE) +CODE(FIND) +CODE(MUTE) +CODE(VOLUMEUP) +CODE(VOLUMEDOWN) +CODE(KP_COMMA) +CODE(KP_EQUALSAS400) +CODE(ALTERASE) +CODE(SYSREQ) +CODE(CANCEL) +CODE(CLEAR) +CODE(PRIOR) +CODE(RETURN2) +CODE(SEPARATOR) +CODE(OUT) +CODE(OPER) +CODE(CLEARAGAIN) +CODE(CRSEL) +CODE(EXSEL) +CODE(KP_00) +CODE(KP_000) +CODE(THOUSANDSSEPARATOR) +CODE(DECIMALSEPARATOR) +CODE(CURRENCYUNIT) +CODE(CURRENCYSUBUNIT) +CODE(KP_LEFTPAREN) +CODE(KP_RIGHTPAREN) +CODE(KP_LEFTBRACE) +CODE(KP_RIGHTBRACE) +CODE(KP_TAB) +CODE(KP_BACKSPACE) +CODE(KP_A) +CODE(KP_B) +CODE(KP_C) +CODE(KP_D) +CODE(KP_E) +CODE(KP_F) +CODE(KP_XOR) +CODE(KP_POWER) +CODE(KP_PERCENT) +CODE(KP_LESS) +CODE(KP_GREATER) +CODE(KP_AMPERSAND) +CODE(KP_DBLAMPERSAND) +CODE(KP_VERTICALBAR) +CODE(KP_DBLVERTICALBAR) +CODE(KP_COLON) +CODE(KP_HASH) +CODE(KP_SPACE) +CODE(KP_AT) +CODE(KP_EXCLAM) +CODE(KP_MEMSTORE) +CODE(KP_MEMRECALL) +CODE(KP_MEMCLEAR) +CODE(KP_MEMADD) +CODE(KP_MEMSUBTRACT) +CODE(KP_MEMMULTIPLY) +CODE(KP_MEMDIVIDE) +CODE(KP_PLUSMINUS) +CODE(KP_CLEAR) +CODE(KP_CLEARENTRY) +CODE(KP_BINARY) +CODE(KP_OCTAL) +CODE(KP_DECIMAL) +CODE(KP_HEXADECIMAL) +CODE(LCTRL) +CODE(LSHIFT) +CODE(LALT) +CODE(LGUI) +CODE(RCTRL) +CODE(RSHIFT) +CODE(RALT) +CODE(RGUI) +CODE(MODE) +CODE(AUDIONEXT) +CODE(AUDIOPREV) +CODE(AUDIOSTOP) +CODE(AUDIOPLAY) +CODE(AUDIOMUTE) +CODE(MEDIASELECT) +CODE(WWW) +CODE(MAIL) +CODE(CALCULATOR) +CODE(COMPUTER) +CODE(AC_SEARCH) +CODE(AC_HOME) +CODE(AC_BACK) +CODE(AC_FORWARD) +CODE(AC_STOP) +CODE(AC_REFRESH) +CODE(AC_BOOKMARKS) +CODE(BRIGHTNESSDOWN) +CODE(BRIGHTNESSUP) +CODE(DISPLAYSWITCH) +CODE(KBDILLUMTOGGLE) +CODE(KBDILLUMDOWN) +CODE(KBDILLUMUP) +CODE(EJECT) +CODE(SLEEP) +CODE(APP1) +CODE(APP2) +CODE(AUDIOREWIND) +CODE(AUDIOFASTFORWARD) +CODE(SOFTLEFT) +CODE(SOFTRIGHT) +CODE(CALL) +CODE(ENDCALL) \ No newline at end of file diff --git a/platforms/sdl/main.cpp b/platforms/sdl/main.cpp index 39b7261..6c99a61 100644 --- a/platforms/sdl/main.cpp +++ b/platforms/sdl/main.cpp @@ -63,6 +63,16 @@ static void teardown() } } +static int TranslateSDLKeyCodeToVirtual(int sdlCode) +{ + switch (sdlCode) { + #define CODE(x) case SDLK_ ## x: return SDLVK_ ## x; + #include "compat/SDLKeyCodes.h" + #undef CODE + } + return SDLVK_UNKNOWN; +} + // Resize From JS #ifdef __EMSCRIPTEN__ extern "C" void resize_from_js(int new_width, int new_height) @@ -84,6 +94,9 @@ static void handle_events() case SDL_KEYUP: { // TODO: Shouldn't we be handling this in Keyboard? + + // We really should. We didn't add the f2 key anywhere -iProgramInCpp + /* if (event.key.keysym.sym == SDLK_F2) { if (event.key.state == SDL_PRESSED && g_pAppPlatform != nullptr) @@ -92,7 +105,9 @@ static void handle_events() } break; } - Keyboard::feed(AppPlatform_sdlbase::GetKeyState(event), translate_sdl_key_to_mcpe(event.key.keysym.sym)); + */ + + Keyboard::feed(AppPlatform_sdlbase::GetKeyState(event), TranslateSDLKeyCodeToVirtual(event.key.keysym.sym)); if (event.key.keysym.sym == SDLK_LSHIFT || event.key.keysym.sym == SDLK_RSHIFT) { g_pAppPlatform->setShiftPressed(event.key.state == SDL_PRESSED, event.key.keysym.sym == SDLK_LSHIFT); diff --git a/platforms/windows/main.cpp b/platforms/windows/main.cpp index 82dfbd7..b9a68b1 100644 --- a/platforms/windows/main.cpp +++ b/platforms/windows/main.cpp @@ -10,7 +10,7 @@ #include #include "compat/GL.hpp" -#include "compat/AKeyCodes.hpp" +#include "compat/KeyCodes.hpp" #include "App.hpp" #include "AppPlatform_windows.hpp" diff --git a/platforms/windows/projects/minecraftcpp.vcxproj b/platforms/windows/projects/minecraftcpp.vcxproj index 53b153d..1acdd30 100644 --- a/platforms/windows/projects/minecraftcpp.vcxproj +++ b/platforms/windows/projects/minecraftcpp.vcxproj @@ -27,7 +27,6 @@ - @@ -382,6 +381,7 @@ + diff --git a/platforms/windows/projects/minecraftcpp.vcxproj.filters b/platforms/windows/projects/minecraftcpp.vcxproj.filters index 9d1c05e..6d05f44 100644 --- a/platforms/windows/projects/minecraftcpp.vcxproj.filters +++ b/platforms/windows/projects/minecraftcpp.vcxproj.filters @@ -1167,7 +1167,7 @@ source\platforms\windows - + thirdparty diff --git a/source/client/gui/Gui.cpp b/source/client/gui/Gui.cpp index 4ec1a60..45e2c1f 100644 --- a/source/client/gui/Gui.cpp +++ b/source/client/gui/Gui.cpp @@ -417,7 +417,7 @@ void Gui::handleKeyPressed(int keyCode) #elif defined(_WIN32) #define AKEYCODE_SLASH VK_OEM_2 #elif defined(USE_SDL) -#define AKEYCODE_SLASH SDLK_SLASH +#define AKEYCODE_SLASH SDLVK_SLASH #else #error "Define the slash key here!" #endif diff --git a/source/client/gui/components/TextInputBox.cpp b/source/client/gui/components/TextInputBox.cpp index 69ce493..10844f2 100644 --- a/source/client/gui/components/TextInputBox.cpp +++ b/source/client/gui/components/TextInputBox.cpp @@ -117,10 +117,10 @@ void TextInputBox::keyPressed(Minecraft* minecraft, int key) #define AKEYCODE_ARROW_RIGHT VK_RIGHT #define AKEYCODE_DEL VK_BACK #elif defined(USE_SDL) -#define AKEYCODE_FORWARD_DEL SDLK_DELETE -#define AKEYCODE_ARROW_LEFT SDLK_LEFT -#define AKEYCODE_ARROW_RIGHT SDLK_RIGHT -#define AKEYCODE_DEL SDLK_BACKSPACE +#define AKEYCODE_FORWARD_DEL SDLVK_DELETE +#define AKEYCODE_ARROW_LEFT SDLVK_LEFT +#define AKEYCODE_ARROW_RIGHT SDLVK_RIGHT +#define AKEYCODE_DEL SDLVK_BACKSPACE #endif switch (key) diff --git a/source/client/player/input/Keyboard.hpp b/source/client/player/input/Keyboard.hpp index 3497c86..fe2e223 100644 --- a/source/client/player/input/Keyboard.hpp +++ b/source/client/player/input/Keyboard.hpp @@ -14,7 +14,7 @@ #include #include -#define KEYBOARD_STATES_SIZE 256 +#define KEYBOARD_STATES_SIZE (256) struct KeyboardAction; diff --git a/source/common/Options.cpp b/source/common/Options.cpp index a8723bc..7d7812e 100644 --- a/source/common/Options.cpp +++ b/source/common/Options.cpp @@ -8,7 +8,7 @@ #include "Options.hpp" #include "Util.hpp" -#include "compat/AKeyCodes.hpp" +#include "compat/KeyCodes.hpp" #include "Minecraft.hpp" Options::Option @@ -102,39 +102,40 @@ void Options::initDefaultValues() #define KM(idx,code) m_keyMappings[idx].value = code #ifdef USE_SDL - KM(KM_FORWARD, SDLK_w); - KM(KM_LEFT, SDLK_a); - KM(KM_BACKWARD, SDLK_s); - KM(KM_RIGHT, SDLK_d); - KM(KM_JUMP, SDLK_SPACE); - KM(KM_DESTROY, SDLK_x); - KM(KM_PLACE, SDLK_c); - KM(KM_MENU_NEXT, SDLK_DPAD_DOWN); - KM(KM_MENU_PREVIOUS, SDLK_DPAD_UP); - KM(KM_MENU_OK, SDLK_ENTER); - KM(KM_MENU_CANCEL, SDLK_ESCAPE); - KM(KM_DROP, SDLK_q); - KM(KM_CHAT, SDLK_t); - KM(KM_FOG, SDLK_f); - KM(KM_SNEAK, SDLK_SHIFT_LEFT); - KM(KM_SLOT_1, SDLK_1); - KM(KM_SLOT_2, SDLK_2); - KM(KM_SLOT_3, SDLK_3); - KM(KM_SLOT_4, SDLK_4); - KM(KM_SLOT_5, SDLK_5); - KM(KM_SLOT_6, SDLK_6); - KM(KM_SLOT_7, SDLK_7); - KM(KM_SLOT_8, SDLK_8); - KM(KM_SLOT_9, SDLK_9); - KM(KM_TOGGLEGUI, SDLK_F1); - KM(KM_SCREENSHOT, SDLK_F2); - KM(KM_TOGGLEDEBUG, SDLK_F3); - KM(KM_TOGGLEAO, SDLK_F4); - KM(KM_TOGGLE3RD, SDLK_F5); - KM(KM_SLOT_L, SDLK_y); - KM(KM_SLOT_R, SDLK_u); - KM(KM_FLY_UP, SDLK_c); - KM(KM_FLY_DOWN, SDLK_x); + KM(KM_FORWARD, SDLVK_w); + KM(KM_LEFT, SDLVK_a); + KM(KM_BACKWARD, SDLVK_s); + KM(KM_RIGHT, SDLVK_d); + KM(KM_JUMP, SDLVK_SPACE); + KM(KM_DESTROY, SDLVK_x); + KM(KM_PLACE, SDLVK_c); + KM(KM_MENU_NEXT, SDLVK_DOWN); + KM(KM_MENU_PREVIOUS, SDLVK_UP); + KM(KM_MENU_OK, SDLVK_RETURN); + KM(KM_MENU_CANCEL, SDLVK_ESCAPE); + KM(KM_DROP, SDLVK_q); + KM(KM_CHAT, SDLVK_t); + KM(KM_FOG, SDLVK_f); + KM(KM_INVENTORY, SDLVK_e); + KM(KM_SNEAK, SDLVK_LSHIFT); + KM(KM_SLOT_1, SDLVK_1); + KM(KM_SLOT_2, SDLVK_2); + KM(KM_SLOT_3, SDLVK_3); + KM(KM_SLOT_4, SDLVK_4); + KM(KM_SLOT_5, SDLVK_5); + KM(KM_SLOT_6, SDLVK_6); + KM(KM_SLOT_7, SDLVK_7); + KM(KM_SLOT_8, SDLVK_8); + KM(KM_SLOT_9, SDLVK_9); + KM(KM_TOGGLEGUI, SDLVK_F1); + KM(KM_SCREENSHOT, SDLVK_F2); + KM(KM_TOGGLEDEBUG, SDLVK_F3); + KM(KM_TOGGLEAO, SDLVK_F4); + KM(KM_TOGGLE3RD, SDLVK_F5); + KM(KM_SLOT_L, SDLVK_y); + KM(KM_SLOT_R, SDLVK_u); + KM(KM_FLY_UP, SDLVK_c); + KM(KM_FLY_DOWN, SDLVK_x); #endif #ifdef PLATFORM_ANDROID // -- Original xperia play controls diff --git a/source/common/Utils.hpp b/source/common/Utils.hpp index 310042f..8cf5ffe 100644 --- a/source/common/Utils.hpp +++ b/source/common/Utils.hpp @@ -80,7 +80,7 @@ void closedir(DIR* dir); #endif -#include "compat/AKeyCodes.hpp" +#include "compat/KeyCodes.hpp" // options: #include "GameMods.hpp"