Files
rogue/source/ui/user_input.hpp

171 lines
3.2 KiB
C++

#ifndef USER_INPUT_HPP
#define USER_INPUT_HPP
#include <glm/glm.hpp>
namespace rog::ui {
enum class key_code {
space = 32, // I can't wait to write all of these out
apostrophe = 39,
comma = 44,
minus = 45,
period = 46,
slash = 47,
key_0 = 48,
key_1 = 49,
key_2 = 50,
key_3 = 51,
key_4 = 52,
key_5 = 53,
key_6 = 54,
key_7 = 55,
key_8 = 56,
key_9 = 57, // This is starting to get really annoying
semicolon = 59,
equal = 61,
key_a = 65,
key_b = 66,
key_c = 67,
key_d = 68,
key_e = 69,
key_f = 70,
key_g = 71,
key_h = 72,
key_i = 73,
key_j = 74,
key_k = 75,
key_l = 76,
key_m = 77,
key_n = 78,
key_o = 79,
key_p = 80,
key_q = 81,
key_r = 82,
key_s = 83,
key_t = 84,
key_u = 85,
key_v = 86,
key_w = 87,
key_x = 88,
key_y = 89,
key_z = 90,
key_left_bracket = 91, /* [ */
key_backslash = 92, /* \ */
key_right_bracket = 93, /* ] */
key_grave_accent = 96, /* ` */
key_world_1 = 161, /* non-US #1 */
key_world_2 = 162, /* non-US #2 */
key_escape = 256,
key_enter = 257,
key_tab = 258,
key_backspace = 259,
key_insert = 260,
key_delete = 261,
key_right = 262,
key_left = 263,
key_down = 264,
key_up = 265,
key_page_up = 266,
key_page_down = 267,
key_home = 268,
key_end = 269,
key_caps_lock = 280,
key_scroll_lock = 281,
key_num_lock = 282,
key_print_screen = 283,
key_pause = 284,
key_f1 = 290,
key_f2 = 291,
key_f3 = 292,
key_f4 = 293,
key_f5 = 294,
key_f6 = 295,
key_f7 = 296,
key_f8 = 297,
key_f9 = 298,
key_f10 = 299,
key_f11 = 300,
key_f12 = 301,
key_f13 = 302,
key_f14 = 303,
key_f15 = 304,
key_f16 = 305,
key_f17 = 306,
key_f18 = 307,
key_f19 = 308,
key_f20 = 309,
key_f21 = 310,
key_f22 = 311,
key_f23 = 312,
key_f24 = 313,
key_f25 = 314,
key_kp_0 = 320,
key_kp_1 = 321,
key_kp_2 = 322,
key_kp_3 = 323,
key_kp_4 = 324,
key_kp_5 = 325,
key_kp_6 = 326,
key_kp_7 = 327,
key_kp_8 = 328,
key_kp_9 = 329,
key_kp_decimal = 330,
key_kp_divide = 331,
key_kp_multiply = 332,
key_kp_subtract = 333,
key_kp_add = 334,
key_kp_enter = 335,
key_kp_equal = 336,
key_left_shift = 340,
key_left_control = 341,
key_left_alt = 342,
key_left_super = 343,
key_right_shift = 344,
key_right_control = 345,
key_right_alt = 346,
key_right_super = 347,
key_menu = 348,
max_key = 1024,
};
enum class key_state { none, pressed, held, repeat, released };
enum class button_state { down, up };
enum class mouse_button {
left,
right,
middle,
};
struct input_state {
std::array<key_state, static_cast<int>(key_code::max_key)> keys = {};
std::array<button_state, 3> mouse_buttons = {};
glm::vec2 mouse_pos = {};
};
class user_input {
public:
void set_key_state(key_code key, key_state state);
void set_mouse_pos(glm::vec2 pos);
void set_mouse_button(mouse_button button, button_state state);
[[nodiscard]] bool is_key_down(key_code code) const noexcept;
[[nodiscard]] bool is_key_pressed(key_code code) const noexcept;
[[nodiscard]] glm::vec2 get_mouse_position() const noexcept;
[[nodiscard]] input_state current_state() const noexcept;
private:
input_state state;
};
} // namespace rog::ui
#endif