CPP-TOOLBOX
Loading...
Searching...
No Matches
input_state.hpp
Go to the documentation of this file.
1#ifndef INPUT_STATE
2#define INPUT_STATE
3
4// adding this line fixed the compliation error about
5// /home/ccn/.conan2/p/b/glad37084c3a036d2/p/include/glad/glad.h:27:2: error: #error OpenGL header already included,
6// remove this include, glad already provides it 27 | #error OpenGL header already included, remove this include, glad
7// already provides it
8#include <glad/glad.h>
9#include <GLFW/glfw3.h>
10
11#include <string>
12#include <unordered_map>
13#include <set>
14#include <unordered_set>
16
25
26enum class EKey {
53
80
84
97
110
113
116
121
128
129 // on windows DELETE is a macro in winnt.h so we must dodge this
131
136
145
154
157
163
164 // the dummy is used as the "biggest value" so that we can iterate through this.
166};
167
168class Key {
169 public:
173 std::string string_repr;
178
180 KeyType t,
181 int code,
182 std::string repr,
183 bool requires_mod = true,
184 bool shift = false,
185 EKey shifted = EKey::DUMMY)
186 : key_enum(e),
187 key_type(t),
188 glfw_code(code),
189 string_repr(std::move(repr)),
190 requires_modifer_to_be_typed(requires_mod),
191 shiftable(shift),
193
194 Key() = default; // still allow default construction if needed
195};
196
197// the reason why we have this is so that we can query the entire keyboard and mouse state in a very simple way.
199 public:
200 InputState();
201 ~InputState() = default;
202
203 void glfw_key_callback(int key, int scancode, int action, int mods);
204 void glfw_mouse_button_callback(int button, int action, int mods);
205 void glfw_cursor_pos_callback(double xpos, double ypos);
206
207 // NOTE: temporarily puttings these here for simplicity
211
212 std::tuple<double, double> get_mouse_delta() {
213 std::tuple<double, double> tup = {mouse_delta_x, mouse_delta_y};
214 // reset once read
215 // TODO: a class with data that can only be used once or something.
216 mouse_delta_x = 0;
217 mouse_delta_y = 0;
218 return tup;
219 }
220
221 bool is_just_pressed(EKey key_enum);
222 bool is_pressed(EKey key_enum);
223
224 std::vector<std::string> get_just_pressed_key_strings();
225
226 std::string get_string_state();
227 std::vector<std::string> get_keys_just_pressed_this_tick();
228
229 // TODO: this shouldn't be a member function, it's a static function
230 bool is_valid_key_string(const std::string &key_str) const;
231
232 // TODO: same here.
233 std::vector<Key> all_keys;
234 std::set<int> glfw_keycodes;
235 // pointers to the keys in all_keys
236 std::unordered_map<EKey, Key *> key_enum_to_object;
237 std::unordered_map<int, Key *> glfw_code_to_key;
238 std::unordered_map<std::string, EKey> key_str_to_key_enum;
239};
240
241#endif // INPUT_STATE
double prev_mouse_position_y
Definition input_state.hpp:209
std::vector< Key > all_keys
Definition input_state.hpp:233
std::tuple< double, double > get_mouse_delta()
Definition input_state.hpp:212
std::unordered_map< std::string, EKey > key_str_to_key_enum
Definition input_state.hpp:238
double mouse_delta_y
Definition input_state.hpp:210
bool is_valid_key_string(const std::string &key_str) const
Definition input_state.cpp:386
~InputState()=default
bool is_pressed(EKey key_enum)
Definition input_state.cpp:151
bool is_just_pressed(EKey key_enum)
Definition input_state.cpp:150
double prev_mouse_position_x
Definition input_state.hpp:209
double mouse_position_x
Definition input_state.hpp:208
std::unordered_map< int, Key * > glfw_code_to_key
Definition input_state.hpp:237
std::unordered_map< EKey, Key * > key_enum_to_object
Definition input_state.hpp:236
double mouse_delta_x
Definition input_state.hpp:210
InputState()
Definition input_state.cpp:173
void glfw_cursor_pos_callback(double xpos, double ypos)
Definition input_state.cpp:375
void glfw_mouse_button_callback(int button, int action, int mods)
Definition input_state.cpp:362
void glfw_key_callback(int key, int scancode, int action, int mods)
Definition input_state.cpp:349
double mouse_position_y
Definition input_state.hpp:208
std::vector< std::string > get_keys_just_pressed_this_tick()
Definition input_state.cpp:153
std::vector< std::string > get_just_pressed_key_strings()
Definition input_state.cpp:133
std::set< int > glfw_keycodes
Definition input_state.hpp:234
std::string get_string_state()
Definition input_state.cpp:90
Key()=default
Key(EKey e, KeyType t, int code, std::string repr, bool requires_mod=true, bool shift=false, EKey shifted=EKey::DUMMY)
Definition input_state.hpp:179
bool requires_modifer_to_be_typed
Definition input_state.hpp:174
TemporalBinarySignal pressed_signal
Definition input_state.hpp:177
int glfw_code
Definition input_state.hpp:172
bool shiftable
Definition input_state.hpp:175
std::string string_repr
Definition input_state.hpp:173
KeyType key_type
Definition input_state.hpp:171
EKey key_enum
Definition input_state.hpp:170
EKey key_enum_of_shifted_version
Definition input_state.hpp:176
Definition temporal_binary_signal.hpp:12
KeyType
Definition input_state.hpp:17
@ ALPHA
Definition input_state.hpp:18
@ MOUSE
Definition input_state.hpp:23
@ SYMBOL
Definition input_state.hpp:22
@ NUMERIC
Definition input_state.hpp:19
@ CONTROL
Definition input_state.hpp:21
@ MODIFIER
Definition input_state.hpp:20
EKey
Definition input_state.hpp:26
@ RIGHT_ALT
Definition input_state.hpp:151
@ NUMBER_SIGN
Definition input_state.hpp:100
@ X
Definition input_state.hpp:77
@ s
Definition input_state.hpp:45
@ a
Definition input_state.hpp:27
@ C
Definition input_state.hpp:56
@ TWO
Definition input_state.hpp:86
@ GRAVE_ACCENT
Definition input_state.hpp:82
@ GREATER_THAN
Definition input_state.hpp:120
@ FIVE
Definition input_state.hpp:89
@ RIGHT
Definition input_state.hpp:132
@ Z
Definition input_state.hpp:79
@ h
Definition input_state.hpp:34
@ SCROLL_DOWN
Definition input_state.hpp:162
@ DOLLAR_SIGN
Definition input_state.hpp:101
@ l
Definition input_state.hpp:38
@ FUNCTION_KEY
Definition input_state.hpp:155
@ ENTER
Definition input_state.hpp:124
@ FOUR
Definition input_state.hpp:88
@ j
Definition input_state.hpp:36
@ E
Definition input_state.hpp:58
@ LEFT_ALT
Definition input_state.hpp:150
@ CARET
Definition input_state.hpp:103
@ THREE
Definition input_state.hpp:87
@ y
Definition input_state.hpp:51
@ P
Definition input_state.hpp:69
@ AMPERSAND
Definition input_state.hpp:104
@ SIX
Definition input_state.hpp:90
@ c
Definition input_state.hpp:29
@ r
Definition input_state.hpp:44
@ U
Definition input_state.hpp:74
@ MIDDLE_MOUSE_BUTTON
Definition input_state.hpp:160
@ COMMA
Definition input_state.hpp:117
@ PERCENT_SIGN
Definition input_state.hpp:102
@ V
Definition input_state.hpp:75
@ ZERO
Definition input_state.hpp:94
@ TILDE
Definition input_state.hpp:83
@ Y
Definition input_state.hpp:78
@ S
Definition input_state.hpp:72
@ LEFT_SQUARE_BRACKET
Definition input_state.hpp:111
@ MENU_KEY
Definition input_state.hpp:156
@ W
Definition input_state.hpp:76
@ INSERT
Definition input_state.hpp:127
@ RIGHT_SHIFT
Definition input_state.hpp:147
@ SLASH
Definition input_state.hpp:137
@ SPACE
Definition input_state.hpp:81
@ LEFT
Definition input_state.hpp:133
@ M
Definition input_state.hpp:66
@ SCROLL_UP
Definition input_state.hpp:161
@ PIPE
Definition input_state.hpp:140
@ BACKSPACE
Definition input_state.hpp:126
@ m
Definition input_state.hpp:39
@ QUESTION_MARK
Definition input_state.hpp:138
@ ASTERISK
Definition input_state.hpp:105
@ NINE
Definition input_state.hpp:93
@ RIGHT_CURLY_BRACKET
Definition input_state.hpp:115
@ SINGLE_QUOTE
Definition input_state.hpp:143
@ q
Definition input_state.hpp:43
@ u
Definition input_state.hpp:47
@ n
Definition input_state.hpp:40
@ A
Definition input_state.hpp:54
@ F
Definition input_state.hpp:59
@ RIGHT_CONTROL
Definition input_state.hpp:149
@ d
Definition input_state.hpp:30
@ p
Definition input_state.hpp:42
@ i
Definition input_state.hpp:35
@ RIGHT_SUPER
Definition input_state.hpp:153
@ PLUS
Definition input_state.hpp:109
@ k
Definition input_state.hpp:37
@ N
Definition input_state.hpp:67
@ f
Definition input_state.hpp:32
@ EXCLAMATION_POINT
Definition input_state.hpp:98
@ b
Definition input_state.hpp:28
@ DELETE_
Definition input_state.hpp:130
@ EIGHT
Definition input_state.hpp:92
@ EQUAL
Definition input_state.hpp:96
@ LEFT_MOUSE_BUTTON
Definition input_state.hpp:158
@ B
Definition input_state.hpp:55
@ x
Definition input_state.hpp:50
@ v
Definition input_state.hpp:48
@ UNDERSCORE
Definition input_state.hpp:108
@ LESS_THAN
Definition input_state.hpp:119
@ K
Definition input_state.hpp:64
@ LEFT_CURLY_BRACKET
Definition input_state.hpp:114
@ g
Definition input_state.hpp:33
@ LEFT_SHIFT
Definition input_state.hpp:146
@ RIGHT_MOUSE_BUTTON
Definition input_state.hpp:159
@ T
Definition input_state.hpp:73
@ SEMICOLON
Definition input_state.hpp:142
@ ONE
Definition input_state.hpp:85
@ DUMMY
Definition input_state.hpp:165
@ H
Definition input_state.hpp:61
@ RIGHT_SQUARE_BRACKET
Definition input_state.hpp:112
@ DOWN
Definition input_state.hpp:135
@ L
Definition input_state.hpp:65
@ RIGHT_PARENTHESIS
Definition input_state.hpp:107
@ o
Definition input_state.hpp:41
@ ESCAPE
Definition input_state.hpp:123
@ AT_SIGN
Definition input_state.hpp:99
@ I
Definition input_state.hpp:62
@ LEFT_CONTROL
Definition input_state.hpp:148
@ PERIOD
Definition input_state.hpp:118
@ G
Definition input_state.hpp:60
@ LEFT_PARENTHESIS
Definition input_state.hpp:106
@ e
Definition input_state.hpp:31
@ DOUBLE_QUOTE
Definition input_state.hpp:144
@ R
Definition input_state.hpp:71
@ t
Definition input_state.hpp:46
@ CAPS_LOCK
Definition input_state.hpp:122
@ SEVEN
Definition input_state.hpp:91
@ BACKSLASH
Definition input_state.hpp:139
@ Q
Definition input_state.hpp:70
@ w
Definition input_state.hpp:49
@ O
Definition input_state.hpp:68
@ D
Definition input_state.hpp:57
@ COLON
Definition input_state.hpp:141
@ TAB
Definition input_state.hpp:125
@ z
Definition input_state.hpp:52
@ UP
Definition input_state.hpp:134
@ LEFT_SUPER
Definition input_state.hpp:152
@ J
Definition input_state.hpp:63
@ MINUS
Definition input_state.hpp:95
Definition hashing.hpp:8