Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarInputEvent.hpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-07-02 06:34:43 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-07-02 06:34:43 +1000
commit15b0e9946049946133c9c932ef23d06a665f63fb (patch)
tree019c61db7b31ede553c9daaab8c1e331e32a5c69 /source/core/StarInputEvent.hpp
parent2c43b505311b9c7f2a0ee2b798cf4c39b2b0d2b7 (diff)
Initial setup of input stuff
Diffstat (limited to 'source/core/StarInputEvent.hpp')
-rw-r--r--source/core/StarInputEvent.hpp312
1 files changed, 312 insertions, 0 deletions
diff --git a/source/core/StarInputEvent.hpp b/source/core/StarInputEvent.hpp
new file mode 100644
index 0000000..896b192
--- /dev/null
+++ b/source/core/StarInputEvent.hpp
@@ -0,0 +1,312 @@
+#ifndef STAR_INPUT_EVENT_HPP
+#define STAR_INPUT_EVENT_HPP
+
+#include "StarString.hpp"
+#include "StarBiMap.hpp"
+#include "StarVariant.hpp"
+#include "StarVector.hpp"
+
+namespace Star {
+
+enum class Key : uint16_t {
+ Backspace,
+ Tab,
+ Clear,
+ Return,
+ Escape,
+ Space,
+ Exclaim,
+ QuotedBL,
+ Hash,
+ Dollar,
+ Ampersand,
+ Quote,
+ LeftParen,
+ RightParen,
+ Asterisk,
+ Plus,
+ Comma,
+ Minus,
+ Period,
+ Slash,
+ Zero,
+ One,
+ Two,
+ Three,
+ Four,
+ Five,
+ Six,
+ Seven,
+ Eight,
+ Nine,
+ Colon,
+ Semicolon,
+ Less,
+ Equals,
+ Greater,
+ Question,
+ At,
+ LeftBracket,
+ Backslash,
+ RightBracket,
+ Caret,
+ Underscore,
+ Backquote,
+ A,
+ B,
+ C,
+ D,
+ E,
+ F,
+ G,
+ H,
+ I,
+ J,
+ K,
+ L,
+ M,
+ N,
+ O,
+ P,
+ Q,
+ R,
+ S,
+ T,
+ U,
+ V,
+ W,
+ X,
+ Y,
+ Z,
+ Delete,
+ Kp0,
+ Kp1,
+ Kp2,
+ Kp3,
+ Kp4,
+ Kp5,
+ Kp6,
+ Kp7,
+ Kp8,
+ Kp9,
+ Kp_period,
+ Kp_divide,
+ Kp_multiply,
+ Kp_minus,
+ Kp_plus,
+ Kp_enter,
+ Kp_equals,
+ Up,
+ Down,
+ Right,
+ Left,
+ Insert,
+ Home,
+ End,
+ PageUp,
+ PageDown,
+ F1,
+ F2,
+ F3,
+ F4,
+ F5,
+ F6,
+ F7,
+ F8,
+ F9,
+ F10,
+ F11,
+ F12,
+ F13,
+ F14,
+ F15,
+ NumLock,
+ CapsLock,
+ ScrollLock,
+ RShift,
+ LShift,
+ RCtrl,
+ LCtrl,
+ RAlt,
+ LAlt,
+ RGui,
+ LGui,
+ AltGr,
+ Compose,
+ Help,
+ PrintScreen,
+ SysReq,
+ Pause,
+ Menu,
+ Power
+};
+extern EnumMap<Key> const KeyNames;
+
+enum class KeyMod : uint16_t {
+ NoMod = 0x0000,
+ LShift = 0x0001,
+ RShift = 0x0002,
+ LCtrl = 0x0040,
+ RCtrl = 0x0080,
+ LAlt = 0x0100,
+ RAlt = 0x0200,
+ LGui = 0x0400,
+ RGui = 0x0800,
+ Num = 0x1000,
+ Caps = 0x2000,
+ AltGr = 0x4000,
+ Scroll = 0x8000
+};
+extern EnumMap<KeyMod> const KeyModNames;
+
+KeyMod operator|(KeyMod a, KeyMod b);
+KeyMod operator&(KeyMod a, KeyMod b);
+KeyMod operator~(KeyMod a);
+KeyMod& operator|=(KeyMod& a, KeyMod b);
+KeyMod& operator&=(KeyMod& a, KeyMod b);
+
+enum class MouseButton : uint8_t {
+ Left,
+ Middle,
+ Right,
+ FourthButton,
+ FifthButton
+};
+extern EnumMap<MouseButton> const MouseButtonNames;
+
+enum class MouseWheel : uint8_t {
+ Up,
+ Down
+};
+extern EnumMap<MouseWheel> const MouseWheelNames;
+
+typedef uint32_t ControllerId;
+
+enum class ControllerAxis : uint8_t {
+ LeftX,
+ LeftY,
+ RightX,
+ RightY,
+ TriggerLeft,
+ TriggerRight,
+ Invalid = 255
+};
+extern EnumMap<ControllerAxis> const ControllerAxisNames;
+
+enum class ControllerButton : uint8_t {
+ A,
+ B,
+ X,
+ Y,
+ Back,
+ Guide,
+ Start,
+ LeftStick,
+ RightStick,
+ LeftShoulder,
+ RightShoulder,
+ DPadUp,
+ DPadDown,
+ DPadLeft,
+ DPadRight,
+ Misc1,
+ Paddle1,
+ Paddle2,
+ Paddle3,
+ Paddle4,
+ Touchpad,
+ Invalid = 255
+};
+extern EnumMap<ControllerButton> const ControllerButtonNames;
+
+struct KeyDownEvent {
+ Key key;
+ KeyMod mods;
+};
+
+struct KeyUpEvent {
+ Key key;
+};
+
+struct TextInputEvent {
+ String text;
+};
+
+struct MouseMoveEvent {
+ Vec2I mouseMove;
+ Vec2I mousePosition;
+};
+
+struct MouseButtonDownEvent {
+ MouseButton mouseButton;
+ Vec2I mousePosition;
+};
+
+struct MouseButtonUpEvent {
+ MouseButton mouseButton;
+ Vec2I mousePosition;
+};
+
+struct MouseWheelEvent {
+ MouseWheel mouseWheel;
+ Vec2I mousePosition;
+};
+
+struct ControllerAxisEvent {
+ ControllerId controller;
+ ControllerAxis controllerAxis;
+ float controllerAxisValue;
+};
+
+struct ControllerButtonDownEvent {
+ ControllerId controller;
+ ControllerButton controllerButton;
+};
+
+struct ControllerButtonUpEvent {
+ ControllerId controller;
+ ControllerButton controllerButton;
+};
+
+typedef Variant<
+ KeyDownEvent,
+ KeyUpEvent,
+ TextInputEvent,
+ MouseMoveEvent,
+ MouseButtonDownEvent,
+ MouseButtonUpEvent,
+ MouseWheelEvent,
+ ControllerAxisEvent,
+ ControllerButtonDownEvent,
+ ControllerButtonUpEvent>
+ InputEvent;
+
+inline KeyMod operator|(KeyMod a, KeyMod b) {
+ return (KeyMod)((uint16_t)a | (uint16_t)b);
+}
+
+inline KeyMod operator&(KeyMod a, KeyMod b) {
+ return (KeyMod)((uint16_t)a & (uint16_t)b);
+}
+
+inline KeyMod operator~(KeyMod a) {
+ return (KeyMod) ~(uint16_t)a;
+}
+
+inline KeyMod& operator|=(KeyMod& a, KeyMod b) {
+ uint16_t a_cast = (uint16_t)a;
+ a_cast |= (uint16_t)b;
+ a = (KeyMod)a_cast;
+ return a;
+}
+
+inline KeyMod& operator&=(KeyMod& a, KeyMod b) {
+ uint16_t a_cast = (uint16_t)a;
+ a_cast &= (uint16_t)b;
+ a = (KeyMod)a_cast;
+ return a;
+}
+
+}
+
+#endif