#pragma once enum class kKey : uint8_t { Unknown, AndroidVolumeUp, AndroidVolumeDown, AndroidHome, AndroidBack, KeySpacebar, KeyE, }; enum class kEventResult : uint8_t { Consumed, Available, }; enum class kEventCategory : uint8_t { MouseEvent, KeyEvent, ButtonEvent, GestureEvent, }; enum class kEventType : uint8_t { MouseDownL, MouseDownR, MouseMove, MouseUpL, MouseUpR, MouseEnter, MouseLeave, MouseScroll, MouseCancel, GestureStart, GestureMove, GestureEnd, KeyDown, KeyUp, KeyChar, ButtonDown, ButtonUp, }; class Event { public: kEventCategory m_cat; kEventType m_type; }; class MouseEvent : public Event { public: MouseEvent() { m_cat = kEventCategory::MouseEvent; } glm::vec2 m_pos; float m_pressure; float m_scroll_delta; }; class KeyEvent : public Event { public: KeyEvent() { m_cat = kEventCategory::KeyEvent; } kKey m_key; char m_char; }; class GestureEvent : public Event { public: GestureEvent() { m_cat = kEventCategory::GestureEvent; } float m_distance; float m_distance_delta; float m_angle; float m_angle_delta; glm::vec2 m_pos; glm::vec2 m_pos_delta; };