Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
Input.cpp
Go to the documentation of this file.
1
2
3#include "Headers/Input.h"
4
5#include <SDL2/SDL_keycode.h>
6
7namespace Divide {
8namespace Input {
9 struct KeyMapEntry {
10 SDL_Keycode _sdlKCode;
12 };
13
14 constexpr KeyMapEntry KeyCodeSDLMap[] = {
15 {SDLK_ESCAPE, KeyCode::KC_ESCAPE},
16 {SDLK_1, KeyCode::KC_1},
17 {SDLK_2, KeyCode::KC_2},
18 {SDLK_3, KeyCode::KC_3},
19 {SDLK_4, KeyCode::KC_4},
20 {SDLK_5, KeyCode::KC_5},
21 {SDLK_6, KeyCode::KC_6},
22 {SDLK_7, KeyCode::KC_7},
23 {SDLK_8, KeyCode::KC_8},
24 {SDLK_9, KeyCode::KC_9},
25 {SDLK_0, KeyCode::KC_0},
26 {SDLK_MINUS, KeyCode::KC_MINUS},
27 {SDLK_EQUALS, KeyCode::KC_EQUALS},
28 {SDLK_BACKSPACE, KeyCode::KC_BACK},
29 {SDLK_TAB, KeyCode::KC_TAB},
30 {SDLK_q, KeyCode::KC_Q},
31 {SDLK_w, KeyCode::KC_W},
32 {SDLK_e, KeyCode::KC_E},
33 {SDLK_r, KeyCode::KC_R},
34 {SDLK_t, KeyCode::KC_T},
35 {SDLK_y, KeyCode::KC_Y},
36 {SDLK_u, KeyCode::KC_U},
37 {SDLK_i, KeyCode::KC_I},
38 {SDLK_o, KeyCode::KC_O},
39 {SDLK_p, KeyCode::KC_P},
40 {SDLK_RETURN, KeyCode::KC_RETURN},
41 {SDLK_LCTRL, KeyCode::KC_LCONTROL},
42 {SDLK_RCTRL, KeyCode::KC_RCONTROL},
43 {SDLK_a, KeyCode::KC_A},
44 {SDLK_s, KeyCode::KC_S},
45 {SDLK_d, KeyCode::KC_D},
46 {SDLK_f, KeyCode::KC_F},
47 {SDLK_g, KeyCode::KC_G},
48 {SDLK_h, KeyCode::KC_H},
49 {SDLK_j, KeyCode::KC_J},
50 {SDLK_k, KeyCode::KC_K},
51 {SDLK_l, KeyCode::KC_L},
52 {SDLK_SEMICOLON, KeyCode::KC_SEMICOLON},
53 {SDLK_COLON, KeyCode::KC_COLON},
54 {SDLK_QUOTE, KeyCode::KC_APOSTROPHE},
55 {SDLK_BACKQUOTE, KeyCode::KC_GRAVE},
56 {SDLK_LSHIFT, KeyCode::KC_LSHIFT},
57 {SDLK_BACKSLASH, KeyCode::KC_BACKSLASH},
58 {SDLK_SLASH, KeyCode::KC_SLASH},
59 {SDLK_z, KeyCode::KC_Z},
60 {SDLK_x, KeyCode::KC_X},
61 {SDLK_c, KeyCode::KC_C},
62 {SDLK_v, KeyCode::KC_V},
63 {SDLK_b, KeyCode::KC_B},
64 {SDLK_n, KeyCode::KC_N},
65 {SDLK_m, KeyCode::KC_M},
66 {SDLK_COMMA, KeyCode::KC_COMMA},
67 {SDLK_PERIOD, KeyCode::KC_PERIOD},
68 {SDLK_RSHIFT, KeyCode::KC_RSHIFT},
69 {SDLK_KP_MULTIPLY, KeyCode::KC_MULTIPLY},
70 {SDLK_LALT, KeyCode::KC_LMENU},
71 {SDLK_SPACE, KeyCode::KC_SPACE},
72 {SDLK_CAPSLOCK, KeyCode::KC_CAPITAL},
73 {SDLK_F1, KeyCode::KC_F1},
74 {SDLK_F2, KeyCode::KC_F2},
75 {SDLK_F3, KeyCode::KC_F3},
76 {SDLK_F4, KeyCode::KC_F4},
77 {SDLK_F5, KeyCode::KC_F5},
78 {SDLK_F6, KeyCode::KC_F6},
79 {SDLK_F7, KeyCode::KC_F7},
80 {SDLK_F8, KeyCode::KC_F8},
81 {SDLK_F9, KeyCode::KC_F9},
82 {SDLK_F10, KeyCode::KC_F10},
83 {SDLK_NUMLOCKCLEAR, KeyCode::KC_NUMLOCK},
84 {SDLK_SCROLLLOCK, KeyCode::KC_SCROLL},
85 {SDLK_KP_7, KeyCode::KC_NUMPAD7},
86 {SDLK_KP_8, KeyCode::KC_NUMPAD8},
87 {SDLK_KP_9, KeyCode::KC_NUMPAD9},
88 {SDLK_KP_MINUS, KeyCode::KC_SUBTRACT},
89 {SDLK_KP_4, KeyCode::KC_NUMPAD4},
90 {SDLK_KP_5, KeyCode::KC_NUMPAD5},
91 {SDLK_KP_6, KeyCode::KC_NUMPAD6},
92 {SDLK_KP_PLUS, KeyCode::KC_ADD},
93 {SDLK_KP_1, KeyCode::KC_NUMPAD1},
94 {SDLK_KP_2, KeyCode::KC_NUMPAD2},
95 {SDLK_KP_3, KeyCode::KC_NUMPAD3},
96 {SDLK_KP_0, KeyCode::KC_NUMPAD0},
97 {SDLK_KP_PERIOD, KeyCode::KC_DECIMAL},
98 {SDLK_PLUS, KeyCode::KC_ADD},
99 {SDLK_MINUS, KeyCode::KC_MINUS},
100 {SDLK_KP_ENTER, KeyCode::KC_NUMPADENTER},
101 {SDLK_F11, KeyCode::KC_F11},
102 {SDLK_F12, KeyCode::KC_F12},
103 {SDLK_F13, KeyCode::KC_F13},
104 {SDLK_F14, KeyCode::KC_F14},
105 {SDLK_F15, KeyCode::KC_F15},
106 {SDLK_KP_EQUALS, KeyCode::KC_NUMPADEQUALS},
107 {SDLK_KP_DIVIDE, KeyCode::KC_DIVIDE},
108 {SDLK_SYSREQ, KeyCode::KC_SYSRQ},
109 {SDLK_RALT, KeyCode::KC_RMENU},
110 {SDLK_HOME, KeyCode::KC_HOME},
111 {SDLK_UP, KeyCode::KC_UP},
112 {SDLK_PAGEUP, KeyCode::KC_PGUP},
113 {SDLK_LEFT, KeyCode::KC_LEFT},
114 {SDLK_RIGHT, KeyCode::KC_RIGHT},
115 {SDLK_END, KeyCode::KC_END},
116 {SDLK_DOWN, KeyCode::KC_DOWN},
117 {SDLK_PAGEDOWN, KeyCode::KC_PGDOWN},
118 {SDLK_INSERT, KeyCode::KC_INSERT},
119 {SDLK_DELETE, KeyCode::KC_DELETE},
120 {SDLK_LGUI, KeyCode::KC_LWIN},
121 {SDLK_RGUI, KeyCode::KC_RWIN},
122 {SDLK_PRINTSCREEN, KeyCode::KC_PRINTSCREEN},
123 {SDLK_APPLICATION, KeyCode::KC_APPS},
124 };
125
126 SDL_Keycode SDLKeyCodeFromKey(const KeyCode code) noexcept {
127 for (const KeyMapEntry& entry : KeyCodeSDLMap) {
128 if (entry._kCode == code) {
129 return entry._sdlKCode;
130 }
131 }
132
133 return SDLK_UNKNOWN;
134 }
135
136 KeyCode KeyCodeFromSDLKey(const SDL_Keycode code) noexcept {
137 for (const KeyMapEntry& entry : KeyCodeSDLMap) {
138 if (entry._sdlKCode == code) {
139 return entry._kCode;
140 }
141 }
142
144 }
145
146 KeyCode KeyCodeByName(const char* keyName) noexcept {
147 return KeyCodeFromSDLKey(SDL_GetKeyFromName(keyName));
148 }
149
150 InputState GetKeyState([[maybe_unused]] const U8 deviceIndex, const KeyCode key) noexcept
151 {
152 const Uint8 *state = SDL_GetKeyboardState(nullptr);
153
154 return state[SDL_GetScancodeFromKey(SDLKeyCodeFromKey(key))] ? InputState::PRESSED : InputState::RELEASED;
155 }
156
157 InputState GetMouseButtonState([[maybe_unused]] const U8 deviceIndex, const MouseButton button) noexcept {
158 I32 x = -1, y = -1;
159 const U32 state = SDL_GetMouseState(&x, &y);
160
161 U32 sdlButton = 0u;
162 switch (button) {
164 sdlButton = SDL_BUTTON_LEFT;
165 break;
167 sdlButton = SDL_BUTTON_RIGHT;
168 break;
170 sdlButton = SDL_BUTTON_MIDDLE;
171 break;
173 sdlButton = SDL_BUTTON_X1;
174 break;
176 sdlButton = SDL_BUTTON_X2;
177 break;
183 }
184
185 return (state & SDL_BUTTON(sdlButton)) != 0 ? InputState::PRESSED : InputState::RELEASED;
186 }
187
188 InputState GetJoystickElementState([[maybe_unused]] Joystick deviceIndex, [[maybe_unused]] JoystickElement element) noexcept {
189 assert(false && "implement me!");
190
192 }
193}; //namespace Input
194}; //namespace Divide
SDL_Keycode SDLKeyCodeFromKey(KeyCode code) noexcept
Definition: Input.cpp:126
InputState GetJoystickElementState(Joystick deviceIndex, JoystickElement element) noexcept
Definition: Input.cpp:188
Joystick
Points to the position of said joystick in the vector.
Definition: Input.h:39
InputState GetKeyState(U8 deviceIndex, KeyCode key) noexcept
Definition: Input.cpp:150
KeyCode KeyCodeFromSDLKey(SDL_Keycode code) noexcept
Definition: Input.cpp:136
constexpr KeyMapEntry KeyCodeSDLMap[]
Definition: Input.cpp:14
InputState GetMouseButtonState(U8 deviceIndex, MouseButton button) noexcept
Definition: Input.cpp:157
KeyCode KeyCodeByName(const char *keyName) noexcept
Definition: Input.cpp:146
Handle console commands that start with a forward slash.
Definition: AIProcessor.cpp:7
int32_t I32
uint8_t U8
uint32_t U32
Project const SceneEntry & entry
Definition: DefaultScene.h:41
Definition: Input.cpp:9
KeyCode _kCode
Definition: Input.cpp:11
SDL_Keycode _sdlKCode
Definition: Input.cpp:10