Extra2D/Extra2D/include/extra2d/platform/keys.h

196 lines
4.7 KiB
C++

#pragma once
#include <SDL.h>
namespace extra2d {
/**
* @brief 键盘按键码(跨平台统一)
*
* 使用 SDL Scancode 作为底层实现,确保跨平台一致性。
* Scancode 是物理按键位置,不依赖于键盘布局。
*/
enum class Key : int {
None = 0,
// 字母键
A = SDL_SCANCODE_A,
B = SDL_SCANCODE_B,
C = SDL_SCANCODE_C,
D = SDL_SCANCODE_D,
E = SDL_SCANCODE_E,
F = SDL_SCANCODE_F,
G = SDL_SCANCODE_G,
H = SDL_SCANCODE_H,
I = SDL_SCANCODE_I,
J = SDL_SCANCODE_J,
K = SDL_SCANCODE_K,
L = SDL_SCANCODE_L,
M = SDL_SCANCODE_M,
N = SDL_SCANCODE_N,
O = SDL_SCANCODE_O,
P = SDL_SCANCODE_P,
Q = SDL_SCANCODE_Q,
R = SDL_SCANCODE_R,
S = SDL_SCANCODE_S,
T = SDL_SCANCODE_T,
U = SDL_SCANCODE_U,
V = SDL_SCANCODE_V,
W = SDL_SCANCODE_W,
X = SDL_SCANCODE_X,
Y = SDL_SCANCODE_Y,
Z = SDL_SCANCODE_Z,
// 数字键(主键盘)
Num0 = SDL_SCANCODE_0,
Num1 = SDL_SCANCODE_1,
Num2 = SDL_SCANCODE_2,
Num3 = SDL_SCANCODE_3,
Num4 = SDL_SCANCODE_4,
Num5 = SDL_SCANCODE_5,
Num6 = SDL_SCANCODE_6,
Num7 = SDL_SCANCODE_7,
Num8 = SDL_SCANCODE_8,
Num9 = SDL_SCANCODE_9,
// 功能键
F1 = SDL_SCANCODE_F1,
F2 = SDL_SCANCODE_F2,
F3 = SDL_SCANCODE_F3,
F4 = SDL_SCANCODE_F4,
F5 = SDL_SCANCODE_F5,
F6 = SDL_SCANCODE_F6,
F7 = SDL_SCANCODE_F7,
F8 = SDL_SCANCODE_F8,
F9 = SDL_SCANCODE_F9,
F10 = SDL_SCANCODE_F10,
F11 = SDL_SCANCODE_F11,
F12 = SDL_SCANCODE_F12,
// 特殊键
Space = SDL_SCANCODE_SPACE,
Enter = SDL_SCANCODE_RETURN,
Escape = SDL_SCANCODE_ESCAPE,
Tab = SDL_SCANCODE_TAB,
Backspace = SDL_SCANCODE_BACKSPACE,
Insert = SDL_SCANCODE_INSERT,
Delete = SDL_SCANCODE_DELETE,
Home = SDL_SCANCODE_HOME,
End = SDL_SCANCODE_END,
PageUp = SDL_SCANCODE_PAGEUP,
PageDown = SDL_SCANCODE_PAGEDOWN,
// 方向键
Up = SDL_SCANCODE_UP,
Down = SDL_SCANCODE_DOWN,
Left = SDL_SCANCODE_LEFT,
Right = SDL_SCANCODE_RIGHT,
// 修饰键
LShift = SDL_SCANCODE_LSHIFT,
RShift = SDL_SCANCODE_RSHIFT,
LCtrl = SDL_SCANCODE_LCTRL,
RCtrl = SDL_SCANCODE_RCTRL,
LAlt = SDL_SCANCODE_LALT,
RAlt = SDL_SCANCODE_RALT,
// 锁定键
CapsLock = SDL_SCANCODE_CAPSLOCK,
NumLock = SDL_SCANCODE_NUMLOCKCLEAR,
ScrollLock = SDL_SCANCODE_SCROLLLOCK,
// 小键盘
KP0 = SDL_SCANCODE_KP_0,
KP1 = SDL_SCANCODE_KP_1,
KP2 = SDL_SCANCODE_KP_2,
KP3 = SDL_SCANCODE_KP_3,
KP4 = SDL_SCANCODE_KP_4,
KP5 = SDL_SCANCODE_KP_5,
KP6 = SDL_SCANCODE_KP_6,
KP7 = SDL_SCANCODE_KP_7,
KP8 = SDL_SCANCODE_KP_8,
KP9 = SDL_SCANCODE_KP_9,
KPPlus = SDL_SCANCODE_KP_PLUS,
KPMinus = SDL_SCANCODE_KP_MINUS,
KPMultiply = SDL_SCANCODE_KP_MULTIPLY,
KPDivide = SDL_SCANCODE_KP_DIVIDE,
KPEnter = SDL_SCANCODE_KP_ENTER,
KPPeriod = SDL_SCANCODE_KP_PERIOD,
// 符号键
Minus = SDL_SCANCODE_MINUS,
Equals = SDL_SCANCODE_EQUALS,
LeftBracket = SDL_SCANCODE_LEFTBRACKET,
RightBracket = SDL_SCANCODE_RIGHTBRACKET,
Backslash = SDL_SCANCODE_BACKSLASH,
Semicolon = SDL_SCANCODE_SEMICOLON,
Apostrophe = SDL_SCANCODE_APOSTROPHE,
Grave = SDL_SCANCODE_GRAVE,
Comma = SDL_SCANCODE_COMMA,
Period = SDL_SCANCODE_PERIOD,
Slash = SDL_SCANCODE_SLASH,
// 其他
PrintScreen = SDL_SCANCODE_PRINTSCREEN,
Pause = SDL_SCANCODE_PAUSE,
Count = SDL_NUM_SCANCODES
};
/**
* @brief 鼠标按钮(跨平台统一)
*
* 使用 SDL 鼠标按钮定义
*/
enum class Mouse : int {
Left = SDL_BUTTON_LEFT,
Middle = SDL_BUTTON_MIDDLE,
Right = SDL_BUTTON_RIGHT,
X1 = SDL_BUTTON_X1,
X2 = SDL_BUTTON_X2,
Count
};
/**
* @brief 游戏手柄按钮(跨平台统一)
*
* 使用 SDL GameController 按钮定义
*/
enum class Gamepad : int {
A = SDL_CONTROLLER_BUTTON_A,
B = SDL_CONTROLLER_BUTTON_B,
X = SDL_CONTROLLER_BUTTON_X,
Y = SDL_CONTROLLER_BUTTON_Y,
Back = SDL_CONTROLLER_BUTTON_BACK,
Guide = SDL_CONTROLLER_BUTTON_GUIDE,
Start = SDL_CONTROLLER_BUTTON_START,
LStick = SDL_CONTROLLER_BUTTON_LEFTSTICK,
RStick = SDL_CONTROLLER_BUTTON_RIGHTSTICK,
LB = SDL_CONTROLLER_BUTTON_LEFTSHOULDER,
RB = SDL_CONTROLLER_BUTTON_RIGHTSHOULDER,
DUp = SDL_CONTROLLER_BUTTON_DPAD_UP,
DDown = SDL_CONTROLLER_BUTTON_DPAD_DOWN,
DLeft = SDL_CONTROLLER_BUTTON_DPAD_LEFT,
DRight = SDL_CONTROLLER_BUTTON_DPAD_RIGHT,
LT = SDL_CONTROLLER_BUTTON_MAX, // 轴映射
RT, // 轴映射
Count
};
/**
* @brief 手柄轴(跨平台统一)
*
* 使用 SDL GameController 轴定义
*/
enum class GamepadAxis : int {
LeftX = SDL_CONTROLLER_AXIS_LEFTX,
LeftY = SDL_CONTROLLER_AXIS_LEFTY,
RightX = SDL_CONTROLLER_AXIS_RIGHTX,
RightY = SDL_CONTROLLER_AXIS_RIGHTY,
LeftTrigger = SDL_CONTROLLER_AXIS_TRIGGERLEFT,
RightTrigger = SDL_CONTROLLER_AXIS_TRIGGERRIGHT,
Count
};
} // namespace extra2d