diff --git a/compat/AKeyCodes.hpp b/compat/AKeyCodes.hpp index f9ec0a4..ad84f2b 100644 --- a/compat/AKeyCodes.hpp +++ b/compat/AKeyCodes.hpp @@ -8,188 +8,7 @@ #pragma once -#if defined(USE_SDL) - -#include - -enum -{ - AKEYCODE_UNKNOWN = 0, - AKEYCODE_MENU, - AKEYCODE_SEARCH, - AKEYCODE_BACK, - AKEYCODE_BUTTON_X, - AKEYCODE_BUTTON_Y, - AKEYCODE_DPAD_UP, - AKEYCODE_DPAD_DOWN, - AKEYCODE_DPAD_LEFT, - AKEYCODE_DPAD_RIGHT, - AKEYCODE_DPAD_CENTER, - AKEYCODE_BUTTON_L1, - AKEYCODE_BUTTON_R1, - AKEYCODE_SHIFT_LEFT, - AKEYCODE_SHIFT_RIGHT, - AKEYCODE_DEL, - AKEYCODE_FORWARD_DEL, - AKEYCODE_COMMA, - AKEYCODE_PERIOD, - AKEYCODE_PLUS, - AKEYCODE_MINUS, - AKEYCODE_SEMICOLON, - AKEYCODE_SLASH, - AKEYCODE_GRAVE, - AKEYCODE_LEFT_BRACKET, - AKEYCODE_BACKSLASH, - AKEYCODE_RIGHT_BRACKET, - AKEYCODE_APOSTROPHE, - AKEYCODE_SPACE, - AKEYCODE_0, - AKEYCODE_1, - AKEYCODE_2, - AKEYCODE_3, - AKEYCODE_4, - AKEYCODE_5, - AKEYCODE_6, - AKEYCODE_7, - AKEYCODE_8, - AKEYCODE_9, - AKEYCODE_A, - AKEYCODE_Q, - AKEYCODE_T, - AKEYCODE_Z, - AKEYCODE_F3, - AKEYCODE_F4, - AKEYCODE_ARROW_LEFT, - AKEYCODE_ARROW_RIGHT, - AKEYCODE_ENTER, -}; - -static inline int translate_sdl_key_to_mcpe(int key) { - switch (key) { - case SDLK_ESCAPE: return AKEYCODE_MENU; - case SDLK_F3: return AKEYCODE_F3; - case SDLK_F4: return AKEYCODE_F4; - case SDLK_F5: return AKEYCODE_SEARCH; - case SDLK_y: return AKEYCODE_BACK; - case SDLK_u: return AKEYCODE_BUTTON_X; - case SDLK_e: return AKEYCODE_BUTTON_Y; - case SDLK_w: return AKEYCODE_DPAD_UP; - case SDLK_s: return AKEYCODE_DPAD_DOWN; - case SDLK_a: return AKEYCODE_DPAD_LEFT; - case SDLK_d: return AKEYCODE_DPAD_RIGHT; - case SDLK_SPACE: return AKEYCODE_DPAD_CENTER; - case SDLK_x: return AKEYCODE_BUTTON_L1; - case SDLK_c: return AKEYCODE_BUTTON_R1; - case SDLK_LSHIFT: return AKEYCODE_SHIFT_LEFT; - case SDLK_RSHIFT: return AKEYCODE_SHIFT_RIGHT; - case SDLK_BACKSPACE: return AKEYCODE_DEL; - case SDLK_DELETE: return AKEYCODE_FORWARD_DEL; - case SDLK_COMMA: return AKEYCODE_COMMA; - case SDLK_PERIOD: return AKEYCODE_PERIOD; - case SDLK_PLUS: return AKEYCODE_PLUS; - case SDLK_MINUS: return AKEYCODE_MINUS; - case SDLK_SEMICOLON: return AKEYCODE_SEMICOLON; - case SDLK_SLASH: return AKEYCODE_SLASH; - case SDLK_BACKQUOTE: return AKEYCODE_GRAVE; - case SDLK_LEFTBRACKET: return AKEYCODE_LEFT_BRACKET; - case SDLK_BACKSLASH: return AKEYCODE_BACKSLASH; - case SDLK_RIGHTBRACKET: return AKEYCODE_RIGHT_BRACKET; - case SDLK_QUOTE: return AKEYCODE_APOSTROPHE; - case SDLK_1: return AKEYCODE_1; - case SDLK_2: return AKEYCODE_2; - case SDLK_3: return AKEYCODE_3; - case SDLK_4: return AKEYCODE_4; - case SDLK_5: return AKEYCODE_5; - case SDLK_6: return AKEYCODE_6; - case SDLK_7: return AKEYCODE_7; - case SDLK_8: return AKEYCODE_8; - case SDLK_0: return AKEYCODE_0; - case SDLK_9: return AKEYCODE_9; - case SDLK_q: return AKEYCODE_Q; - case SDLK_t: return AKEYCODE_T; - case SDLK_z: return AKEYCODE_Z; - case SDLK_LEFT: return AKEYCODE_ARROW_LEFT; - case SDLK_RIGHT: return AKEYCODE_ARROW_RIGHT; - case SDLK_RETURN: return AKEYCODE_ENTER; - default: return AKEYCODE_UNKNOWN; - } -} - -#elif defined(_WIN32) - -#define NOMINMAX -#ifdef _XBOX -#include -#else -#define WIN32_LEAN_AND_MEAN -#include -#endif - -enum -{ - //fake keycodes for windows - AKEYCODE_UNKNOWN = 0, - - AKEYCODE_MENU = VK_ESCAPE, // pause screen - AKEYCODE_SEARCH = VK_F5, // toggle third person mode - - AKEYCODE_BACK = 'Y', // used to go left 1 slot - AKEYCODE_BUTTON_X = 'U', // used to go right 1 slot - AKEYCODE_BUTTON_Y = 'E', // show inventory - - AKEYCODE_DPAD_UP = 'W', - AKEYCODE_DPAD_DOWN = 'S', - AKEYCODE_DPAD_LEFT = 'A', - AKEYCODE_DPAD_RIGHT = 'D', - AKEYCODE_DPAD_CENTER = ' ', - - AKEYCODE_BUTTON_L1 = 'X', - AKEYCODE_BUTTON_R1 = 'C', - - AKEYCODE_SHIFT_LEFT = VK_SHIFT, - AKEYCODE_SHIFT_RIGHT = VK_SHIFT, - - AKEYCODE_DEL = VK_BACK, - AKEYCODE_FORWARD_DEL = VK_DELETE, - - AKEYCODE_COMMA = VK_OEM_COMMA, // ',<' - AKEYCODE_PERIOD = VK_OEM_PERIOD,// '.>' - AKEYCODE_PLUS = VK_OEM_PLUS, // '=+' - AKEYCODE_MINUS = VK_OEM_MINUS, // '-_' - AKEYCODE_SEMICOLON = VK_OEM_1, // ';:' - AKEYCODE_SLASH = VK_OEM_2, // '/?' - AKEYCODE_GRAVE = VK_OEM_3, // '`~' - AKEYCODE_LEFT_BRACKET = VK_OEM_4, // '[{' - AKEYCODE_BACKSLASH = VK_OEM_5, // '\|' - AKEYCODE_RIGHT_BRACKET = VK_OEM_6,// ']}' - AKEYCODE_APOSTROPHE = VK_OEM_7, // ''"' - AKEYCODE_SPACE = VK_SPACE, - - AKEYCODE_F1 = VK_F1, - AKEYCODE_F3 = VK_F3, - AKEYCODE_F4 = VK_F4, - - AKEYCODE_0 = '0', - AKEYCODE_1 = '1', - //... - AKEYCODE_9 = '9', - - AKEYCODE_ENTER = VK_RETURN, - - // note: You have to add these here instead of using the - // characters themselves, otherwise android won't pick it up - AKEYCODE_A = 'A', - AKEYCODE_Q = 'Q', - AKEYCODE_T = 'T', - AKEYCODE_Z = 'Z', - -}; - -// this sucks -#define AKEYCODE_ARROW_LEFT VK_LEFT -#define AKEYCODE_ARROW_RIGHT VK_RIGHT - -#elif defined(PLATFORM_ANDROID) +#ifdef PLATFORM_ANDROID enum { @@ -489,8 +308,4 @@ enum #define AKEYCODE_ARROW_LEFT AKEYCODE_DPAD_LEFT #define AKEYCODE_ARROW_RIGHT AKEYCODE_DPAD_RIGHT -#else - -#error "Provide key codes for your platform!" - #endif diff --git a/source/Minecraft.cpp b/source/Minecraft.cpp index e2d6750..afbded1 100644 --- a/source/Minecraft.cpp +++ b/source/Minecraft.cpp @@ -452,20 +452,21 @@ void Minecraft::tickInput() { m_gui.handleKeyPressed(keyCode); - int index = keyCode - AKEYCODE_1; - if (index <= 8 && index >= 0) + for (int i = 0; i < 9; i++) { - m_pLocalPlayer->m_pInventory->selectSlot(index); + if (m_options.isKey(eKeyMappingIndex(KM_SLOT_1 + i), keyCode)) + m_pLocalPlayer->m_pInventory->selectSlot(i); } - else if (keyCode == AKEYCODE_SEARCH) + + if (m_options.isKey(KM_TOGGLE3RD, keyCode)) { m_options.m_bThirdPerson = !m_options.m_bThirdPerson; } - else if (keyCode == AKEYCODE_MENU) + else if (m_options.isKey(KM_MENU_CANCEL, keyCode)) { pauseGame(); } - else if (keyCode == AKEYCODE_Q) + else if (m_options.isKey(KM_DROP, keyCode)) { int itemID = m_pLocalPlayer->m_pInventory->getSelectedItemId(); if (itemID > 0) @@ -474,16 +475,16 @@ void Minecraft::tickInput() m_pLocalPlayer->drop(&inst); } } - else if (keyCode == AKEYCODE_F1) + else if (m_options.isKey(KM_TOGGLEGUI, keyCode)) { m_options.m_bDontRenderGui = !m_options.m_bDontRenderGui; } - else if (keyCode == AKEYCODE_F3) + else if (m_options.isKey(KM_TOGGLEDEBUG, keyCode)) { m_options.m_bDebugText = !m_options.m_bDebugText; } #ifdef ENH_ALLOW_AO - else if (keyCode == AKEYCODE_F4) + else if (m_options.isKey(KM_TOGGLEAO, keyCode)) { // Toggle ambient occlusion. m_options.m_bAmbientOcclusion = !m_options.m_bAmbientOcclusion; diff --git a/source/client/gui/Gui.cpp b/source/client/gui/Gui.cpp index 3771cd3..4ec1a60 100644 --- a/source/client/gui/Gui.cpp +++ b/source/client/gui/Gui.cpp @@ -382,50 +382,58 @@ void Gui::handleClick(int clickID, int mouseX, int mouseY) void Gui::handleKeyPressed(int keyCode) { - switch (keyCode) + if (m_pMinecraft->m_options.isKey(KM_INVENTORY, keyCode)) { - case AKEYCODE_BUTTON_Y: - { - m_pMinecraft->setScreen(new IngameBlockSelectionScreen); - break; - } - - case AKEYCODE_BACK: - { - int* slot = &m_pMinecraft->m_pLocalPlayer->m_pInventory->m_SelectedHotbarSlot; + m_pMinecraft->setScreen(new IngameBlockSelectionScreen); + return; + } + if (m_pMinecraft->m_options.isKey(KM_SLOT_R, keyCode)) + { + int* slot = &m_pMinecraft->m_pLocalPlayer->m_pInventory->m_SelectedHotbarSlot; #ifdef ENH_ENABLE_9TH_SLOT #define MAX_ITEMS (C_MAX_HOTBAR_ITEMS - 2) #else #define MAX_ITEMS (C_MAX_HOTBAR_ITEMS - 3) #endif - //@HUH: for whatever reason, it ignores the 7th item - if (*slot <= MAX_ITEMS) - (*slot)++; + //@HUH: for whatever reason, it ignores the 7th item + if (*slot <= MAX_ITEMS) + (*slot)++; - break; - } - - case AKEYCODE_BUTTON_X: - { - int* slot = &m_pMinecraft->m_pLocalPlayer->m_pInventory->m_SelectedHotbarSlot; - - if (*slot > 0) - (*slot)--; - - break; - } - - case AKEYCODE_T: - case AKEYCODE_SLASH: - { - if (m_pMinecraft->m_pScreen) - break; - - m_pMinecraft->setScreen(new ChatScreen(keyCode == AKEYCODE_SLASH)); - break; - } + return; } + if (m_pMinecraft->m_options.isKey(KM_SLOT_L, keyCode)) + { + int* slot = &m_pMinecraft->m_pLocalPlayer->m_pInventory->m_SelectedHotbarSlot; + + if (*slot > 0) + (*slot)--; + + return; + } + +#ifdef PLATFORM_ANDROID +// Android already has this defined +#elif defined(_WIN32) +#define AKEYCODE_SLASH VK_OEM_2 +#elif defined(USE_SDL) +#define AKEYCODE_SLASH SDLK_SLASH +#else +#error "Define the slash key here!" +#endif + + if (keyCode == AKEYCODE_SLASH || m_pMinecraft->m_options.isKey(KM_CHAT, keyCode)) + { + if (m_pMinecraft->m_pScreen) + return; + + m_pMinecraft->setScreen(new ChatScreen(keyCode == AKEYCODE_SLASH)); + return; + } + +#ifdef AKEYCODE_SLASH +#undef AKEYCODE_SLASH +#endif } void Gui::renderMessages(bool bShowAll) diff --git a/source/client/gui/Screen.cpp b/source/client/gui/Screen.cpp index 4014337..234d4ee 100644 --- a/source/client/gui/Screen.cpp +++ b/source/client/gui/Screen.cpp @@ -70,7 +70,7 @@ bool Screen::isInGameScreen() void Screen::keyPressed(int key) { - if (key == AKEYCODE_MENU)//escape + if (m_pMinecraft->m_options.isKey(KM_MENU_CANCEL, key)) { m_pMinecraft->setScreen(nullptr); } @@ -78,19 +78,19 @@ void Screen::keyPressed(int key) if (m_buttonTabList.size()) { #ifndef ENH_HIGHLIGHT_BY_HOVER - if (m_pMinecraft->m_options.m_keyBinds[Options::MENU_NEXT].value == key) + if (m_pMinecraft->m_options.isKey(MENU_NEXT, key)) { m_tabButtonIndex++; if (m_tabButtonIndex == int(m_buttonTabList.size())) m_tabButtonIndex = 0; } - if (m_pMinecraft->m_options.m_keyBinds[Options::MENU_PREVIOUS].value == key) + if (m_pMinecraft->m_options.isKey(MENU_PREVIOUS, key)) { m_tabButtonIndex--; if (m_tabButtonIndex == -1) m_tabButtonIndex = int(m_buttonTabList.size() - 1); } - if (m_pMinecraft->m_options.m_keyBinds[Options::MENU_OK].value == key) + if (m_pMinecraft->m_options.isKey(MENU_OK, key)) { if (m_buttonTabList[m_tabButtonIndex]->m_bEnabled) { diff --git a/source/client/gui/components/TextInputBox.cpp b/source/client/gui/components/TextInputBox.cpp index f593e27..69ce493 100644 --- a/source/client/gui/components/TextInputBox.cpp +++ b/source/client/gui/components/TextInputBox.cpp @@ -107,7 +107,22 @@ void TextInputBox::keyPressed(Minecraft* minecraft, int key) break; } #else + char chr = '\0'; + + // here we'll just use the raw key codes... +#ifdef _WIN32 +#define AKEYCODE_FORWARD_DEL VK_DELETE +#define AKEYCODE_ARROW_LEFT VK_LEFT +#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 +#endif + switch (key) { case AKEYCODE_FORWARD_DEL: @@ -127,6 +142,15 @@ void TextInputBox::keyPressed(Minecraft* minecraft, int key) } #endif +#ifdef AKEYCODE_FORWARD_DEL +#undef AKEYCODE_FORWARD_DEL +#undef AKEYCODE_ARROW_LEFT +#undef AKEYCODE_ARROW_RIGHT +#endif +#ifdef AKEYCODE_DEL +#undef AKEYCODE_DEL +#endif + if (chr) charPressed(chr); } diff --git a/source/client/gui/screens/ChatScreen.cpp b/source/client/gui/screens/ChatScreen.cpp index 9cf3d50..125415d 100644 --- a/source/client/gui/screens/ChatScreen.cpp +++ b/source/client/gui/screens/ChatScreen.cpp @@ -60,7 +60,7 @@ void ChatScreen::render(int mouseX, int mouseY, float f) void ChatScreen::keyPressed(int keyCode) { - if (keyCode == AKEYCODE_ENTER) + if (m_pMinecraft->m_options.isKey(KM_MENU_OK, keyCode)) sendMessageAndExit(); Screen::keyPressed(keyCode); diff --git a/source/client/player/input/KeyboardInput.cpp b/source/client/player/input/KeyboardInput.cpp index 6c25b04..3c9c0f5 100644 --- a/source/client/player/input/KeyboardInput.cpp +++ b/source/client/player/input/KeyboardInput.cpp @@ -32,12 +32,12 @@ void KeyboardInput::setKey(int keyCode, bool b) { int index = -1; - if (m_pOptions->getKey(KM_FORWARD) == keyCode) index = 0; - if (m_pOptions->getKey(KM_BACK) == keyCode) index = 1; - if (m_pOptions->getKey(KM_LEFT) == keyCode) index = 2; - if (m_pOptions->getKey(KM_RIGHT) == keyCode) index = 3; - if (m_pOptions->getKey(KM_JUMP) == keyCode) index = 4; - if (m_pOptions->getKey(KM_SNEAK) == keyCode) index = 5; + if (m_pOptions->getKey(KM_FORWARD) == keyCode) index = 0; + if (m_pOptions->getKey(KM_BACKWARD) == keyCode) index = 1; + if (m_pOptions->getKey(KM_LEFT) == keyCode) index = 2; + if (m_pOptions->getKey(KM_RIGHT) == keyCode) index = 3; + if (m_pOptions->getKey(KM_JUMP) == keyCode) index = 4; + if (m_pOptions->getKey(KM_SNEAK) == keyCode) index = 5; if (index == -1) return; diff --git a/source/common/Options.cpp b/source/common/Options.cpp index 72921c6..a8723bc 100644 --- a/source/common/Options.cpp +++ b/source/common/Options.cpp @@ -54,46 +54,145 @@ void Options::initDefaultValues() m_bServerVisibleDefault = true; m_bDebugText = false; - m_keyMappings[0] = KeyMapping("key.forward", 'W'); - m_keyMappings[1] = KeyMapping("key.left", 'A'); - m_keyMappings[2] = KeyMapping("key.back", 'S'); - m_keyMappings[3] = KeyMapping("key.right", 'D'); - m_keyMappings[4] = KeyMapping("key.jump", ' '); - m_keyMappings[5] = KeyMapping("key.inventory", 'E'); - m_keyMappings[6] = KeyMapping("key.drop", 'Q'); - m_keyMappings[7] = KeyMapping("key.chat", 'T'); - m_keyMappings[8] = KeyMapping("key.fog", 'F'); - m_keyMappings[9] = KeyMapping("key.sneak", '\n'); - m_keyMappings[10] = KeyMapping("key.destroy", 'X'); - m_keyMappings[11] = KeyMapping("key.place", 'C'); - m_keyMappings[12] = KeyMapping("key.menu.next", '('); - m_keyMappings[13] = KeyMapping("key.menu.previous", '&'); - m_keyMappings[14] = KeyMapping("key.menu.ok", '\r'); - m_keyMappings[15] = KeyMapping("key.menu.cancel", '\b'); + // Win32 key codes are being used by default +#define KM(idx, name, code) m_keyMappings[idx] = KeyMapping(name, code) + KM(KM_FORWARD, "key.forward", 'W'); + KM(KM_LEFT, "key.left", 'A'); + KM(KM_BACKWARD, "key.back", 'S'); + KM(KM_RIGHT, "key.right", 'D'); + KM(KM_JUMP, "key.jump", ' '); + KM(KM_INVENTORY, "key.inventory", 'E'); + KM(KM_DROP, "key.drop", 'Q'); + KM(KM_CHAT, "key.chat", 'T'); + KM(KM_FOG, "key.fog", 'F'); + KM(KM_SNEAK, "key.sneak", 0x10); // VK_SHIFT. In original, it's 10 (misspelling?) + KM(KM_DESTROY, "key.destroy", 'K'); // was 'X' + KM(KM_PLACE, "key.place", 'L'); // was 'C' + KM(KM_MENU_NEXT, "key.menu.next", 0x28); // VK_DOWN + KM(KM_MENU_PREVIOUS,"key.menu.previous", 0x26); // VK_UP + KM(KM_MENU_OK, "key.menu.ok", 0x0D); // VK_RETURN + KM(KM_MENU_CANCEL, "key.menu.cancel", 0x1B); // VK_ESCAPE, was 0x08 = VK_BACK + KM(KM_SLOT_1, "key.slot.1", '1'); + KM(KM_SLOT_2, "key.slot.2", '2'); + KM(KM_SLOT_3, "key.slot.3", '3'); + KM(KM_SLOT_4, "key.slot.4", '4'); + KM(KM_SLOT_5, "key.slot.5", '5'); + KM(KM_SLOT_6, "key.slot.6", '6'); + KM(KM_SLOT_7, "key.slot.7", '7'); + KM(KM_SLOT_8, "key.slot.8", '8'); + KM(KM_SLOT_9, "key.slot.9", '9'); + KM(KM_SLOT_L, "key.slot.left", 'Y'); + KM(KM_SLOT_R, "key.slot.right", 'U'); + KM(KM_TOGGLEGUI, "key.fn.gui", 0x70); // VK_F1 + KM(KM_SCREENSHOT, "key.fn.screenshot", 0x71); // VK_F2 + KM(KM_TOGGLEDEBUG, "key.fn.debug", 0x72); // VK_F3 + KM(KM_TOGGLEAO, "key.fn.ao", 0x73); // VK_F4 + KM(KM_TOGGLE3RD, "key.fn.3rd", 0x74); // VK_F5 + KM(KM_FLY_UP, "key.fly.up", 'X'); + KM(KM_FLY_DOWN, "key.fly.down", 'C'); +#undef KM #ifdef ORIGINAL_CODE - m_rotY = 2; - field_23D = 0; + m_iViewDistance = 2; + m_bThirdPerson = 0; field_19 = 0; #endif - m_bFancyGraphics = 1; - // keybind now reprograms some the keybinds. - // For the restoration, we don't actually need them - m_keyMappings[0].value = AKEYCODE_DPAD_UP; - m_keyMappings[1].value = AKEYCODE_DPAD_LEFT; - m_keyMappings[2].value = AKEYCODE_DPAD_DOWN; - m_keyMappings[3].value = AKEYCODE_DPAD_RIGHT; - m_keyMappings[4].value = AKEYCODE_DPAD_CENTER; // lmao, how stupid. - m_keyMappings[10].value = AKEYCODE_BUTTON_L1; - m_keyMappings[11].value = AKEYCODE_BUTTON_R1; - m_keyMappings[12].value = AKEYCODE_DPAD_DOWN; - m_keyMappings[13].value = AKEYCODE_DPAD_UP; - m_keyMappings[14].value = AKEYCODE_DPAD_CENTER; - m_keyMappings[15].value = AKEYCODE_BACK; -#ifndef ORIGINAL_CODE - m_keyMappings[9].value = AKEYCODE_SHIFT_LEFT; + m_bFancyGraphics = 1; + +#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); #endif +#ifdef PLATFORM_ANDROID + // -- Original xperia play controls + //KM(KM_FORWARD, AKEYCODE_DPAD_UP); + //KM(KM_LEFT, AKEYCODE_DPAD_LEFT); + //KM(KM_BACKWARD, AKEYCODE_DPAD_DOWN); + //KM(KM_RIGHT, AKEYCODE_DPAD_RIGHT); + //KM(KM_JUMP, AKEYCODE_DPAD_CENTER); + //KM(KM_DESTROY, AKEYCODE_BUTTON_L1); + //KM(KM_PLACE, AKEYCODE_BUTTON_R1); + //KM(KM_MENU_NEXT, AKEYCODE_DPAD_DOWN); + //KM(KM_MENU_PREVIOUS, AKEYCODE_DPAD_UP); + //KM(KM_MENU_OK, AKEYCODE_DPAD_CENTER); + //KM(KM_MENU_CANCEL, AKEYCODE_BACK); + //custom + //KM(KM_INVENTORY, AKEYCODE_BUTTON_Y); + //KM(KM_SLOT_R, AKEYCODE_BACK); + //KM(KM_SLOT_L, AKEYCODE_BUTTON_X); + //KM(KM_FLY_UP, AKEYCODE_BUTTON_R1); + //KM(KM_FLY_DOWN, AKEYCODE_BUTTON_L1); + + KM(KM_FORWARD, AKEYCODE_W); + KM(KM_LEFT, AKEYCODE_A); + KM(KM_BACKWARD, AKEYCODE_S); + KM(KM_RIGHT, AKEYCODE_D); + KM(KM_JUMP, AKEYCODE_SPACE); + KM(KM_DESTROY, AKEYCODE_X); + KM(KM_PLACE, AKEYCODE_C); + KM(KM_MENU_NEXT, AKEYCODE_DPAD_DOWN); + KM(KM_MENU_PREVIOUS, AKEYCODE_DPAD_UP); + KM(KM_MENU_OK, AKEYCODE_ENTER); + KM(KM_MENU_CANCEL, AKEYCODE_ESCAPE); + // custom + KM(KM_SLOT_L, AKEYCODE_Y); + KM(KM_SLOT_R, AKEYCODE_U); + KM(KM_DROP, AKEYCODE_Q); + KM(KM_CHAT, AKEYCODE_T); + KM(KM_FOG, AKEYCODE_F); + KM(KM_INVENTORY, AKEYCODE_F); + KM(KM_SNEAK, AKEYCODE_SHIFT_LEFT); + KM(KM_SLOT_1, AKEYCODE_1); + KM(KM_SLOT_2, AKEYCODE_2); + KM(KM_SLOT_3, AKEYCODE_3); + KM(KM_SLOT_4, AKEYCODE_4); + KM(KM_SLOT_5, AKEYCODE_5); + KM(KM_SLOT_6, AKEYCODE_6); + KM(KM_SLOT_7, AKEYCODE_7); + KM(KM_SLOT_8, AKEYCODE_8); + KM(KM_SLOT_9, AKEYCODE_9); + KM(KM_TOGGLEGUI, AKEYCODE_F1); + KM(KM_SCREENSHOT, AKEYCODE_F2); + KM(KM_TOGGLEDEBUG, AKEYCODE_F3); + KM(KM_TOGGLEAO, AKEYCODE_F4); + KM(KM_TOGGLE3RD, AKEYCODE_F5); + KM(KM_FLY_UP, AKEYCODE_C); + KM(KM_FLY_DOWN, AKEYCODE_X); +#endif +#undef KM } Options::Options() diff --git a/source/common/Options.hpp b/source/common/Options.hpp index 261018c..cd672eb 100644 --- a/source/common/Options.hpp +++ b/source/common/Options.hpp @@ -17,7 +17,7 @@ enum eKeyMappingIndex { KM_FORWARD, KM_LEFT, - KM_BACK, + KM_BACKWARD, KM_RIGHT, KM_JUMP, KM_INVENTORY, @@ -30,7 +30,25 @@ enum eKeyMappingIndex KM_MENU_NEXT, KM_MENU_PREVIOUS, KM_MENU_OK, - KM_MENU_CANCEL, + KM_MENU_CANCEL, KM_BACK = KM_MENU_CANCEL, + KM_SLOT_1, + KM_SLOT_2, + KM_SLOT_3, + KM_SLOT_4, + KM_SLOT_5, + KM_SLOT_6, + KM_SLOT_7, + KM_SLOT_8, + KM_SLOT_9, + KM_SLOT_L, + KM_SLOT_R, + KM_TOGGLEGUI, + KM_SCREENSHOT, + KM_TOGGLEDEBUG, + KM_TOGGLEAO, + KM_TOGGLE3RD, + KM_FLY_UP, + KM_FLY_DOWN, KM_COUNT, }; @@ -91,6 +109,10 @@ public: { return m_keyMappings[idx].value; } + bool isKey(eKeyMappingIndex idx, int keyCode) + { + return getKey(idx) == keyCode; + } public: float field_0; diff --git a/source/world/entity/LocalPlayer.cpp b/source/world/entity/LocalPlayer.cpp index 695ed64..d06794e 100644 --- a/source/world/entity/LocalPlayer.cpp +++ b/source/world/entity/LocalPlayer.cpp @@ -73,9 +73,9 @@ void LocalPlayer::calculateFlight(float x, float y, float z) float z1 = f1 * z; float y1 = 0.0f; - if (Keyboard::isKeyDown(AKEYCODE_BUTTON_R1)) + if (Keyboard::isKeyDown(m_pMinecraft->m_options.getKey(KM_FLY_UP))) y1 = f1 * 0.2f; - if (Keyboard::isKeyDown(AKEYCODE_BUTTON_L1)) + if (Keyboard::isKeyDown(m_pMinecraft->m_options.getKey(KM_FLY_DOWN))) y1 = f1 * -0.2f; field_BFC += x1;