Big leap for key rebinding and crossplatform-ness.

This commit is contained in:
iProgramInCpp
2023-08-22 17:25:24 +03:00
parent f3fc78e151
commit d3ef629471
10 changed files with 248 additions and 279 deletions

View File

@@ -8,188 +8,7 @@
#pragma once
#if defined(USE_SDL)
#include <SDL2/SDL.h>
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 <xtl.h>
#else
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#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

View File

@@ -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;

View File

@@ -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)

View File

@@ -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)
{

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -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()

View File

@@ -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;

View File

@@ -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;