Cogs.Core
Mouse.h
1#pragma once
2
3#include "../FoundationBase.h"
4
5#include <glm/vec2.hpp>
6
7#include <variant>
8#include <vector>
9
10namespace Cogs
11{
12 class Window;
13
14 enum MouseButton : int
15 {
16 Left,
17 Right,
18 Middle,
19
20 Count,
21 NoButton
22 };
23
24 class COGSFOUNDATION_API Mouse
25 {
26 public:
27
28 struct State {
29 bool buttonDown[MouseButton::Count] = {};
30 glm::ivec2 position = {-100000, -100000};
31 int wheel = 0;
32 };
33
34 struct Event {
35 enum class Type {
36 Press,
37 Release,
38 Move,
39 Wheel,
40 Reset
41 };
42
43 struct ButtonData {
44 MouseButton button;
45 };
46
47 struct MoveData {
48 glm::ivec2 newPosition;
49 };
50
51 struct WheelData {
52 int offset;
53 };
54
55 Type type;
56 double timestamp_ms;
57 glm::ivec2 currPosition;
58
61 std::variant<ButtonData, MoveData, WheelData> data;
62 };
63
64 void update();
65
66 void submitButtonDown(MouseButton button, double timestamp_ms);
67 void submitButtonUp(MouseButton button, double timestamp_ms);
68 void submitMove(const glm::ivec2& position, double timestamp_ms);
69 void submitWheel(int offset, double timestamp_ms);
70 void submitReset(double timestamp_ms);
71
72 const State& getState() const { return state; }
73 const std::vector<Event>& getEvents() const { return events; }
74
75 private:
76 State state;
77 std::vector<Event> events;
78
79 std::vector<Event> eventQueue;
80 };
81}
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
double timestamp_ms
Timestamp in miliseconds.
Definition: Mouse.h:56
Type type
Event type.
Definition: Mouse.h:55
std::variant< ButtonData, MoveData, WheelData > data
Definition: Mouse.h:61
glm::ivec2 currPosition
Mouse position at the event.
Definition: Mouse.h:57