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