SleakEngine 1.0.0
C++23 multi-backend game engine
Loading...
Searching...
No Matches
MouseEvent.hpp
Go to the documentation of this file.
1#ifndef _MOUSEEVENT_H_
2#define _MOUSEEVENT_H_
3
4#include <Events/Event.hpp>
5#include <sstream>
6#include <Input/KeyCodes.hpp>
7
8namespace Sleak {
9 namespace Events {
10 namespace Input {
11 /// Fired when the cursor moves, carrying its new position.
12 /// @ingroup events
13 class ENGINE_API MouseMovedEvent : public Event {
14 public:
15 MouseMovedEvent(const int x, const int y) : mouseX(x), mouseY(y) {}
16
17 int GetX() const { return mouseX; }
18 int GetY() const { return mouseY; }
19
20 std::string ToString() const override
21 {
22 std::stringstream ss;
23 ss << GetName() << " (" << mouseX << ", " << mouseY << ")";
24 return ss.str();
25 }
26
27
28 EVENT_CLASS_TYPE(MouseMoved)
30 private:
31 int mouseX, mouseY;
32 };
33
34 /// Fired on scroll wheel input, carrying the horizontal/vertical scroll offsets.
35 /// @ingroup events
37 {
38 public:
39 MouseScrolledEvent(const float xOffset, const float yOffset)
40 : m_XOffset(xOffset), m_YOffset(yOffset) {}
41
42 float GetXOffset() const { return m_XOffset; }
43 float GetYOffset() const { return m_YOffset; }
44
45 std::string ToString() const override
46 {
47 std::stringstream ss;
48 ss << GetName() << " scroll amount (" << GetXOffset() << ", " << GetYOffset() << ")";
49 return ss.str();
50 }
51
52 EVENT_CLASS_TYPE(MouseScrolled)
54 private:
55 float m_XOffset, m_YOffset;
56 };
57
58 /// Common base for button events; carries the button and cursor position at the time.
59 /// @ingroup events
60 class MouseButtonEvent : public Event
61 {
62 public:
63 MouseCode GetMouseButton() const { return m_Button; }
64 std::string GetButtonStr() const { return Sleak::Input::Button_toString(m_Button); }
65
66 std::string ToString() const override
67 {
68 std::stringstream ss;
69 ss << GetName() << " " << GetButtonStr()
70 << " position (" << mouseX << ", " << mouseY << ")";
71 return ss.str();
72 }
73
75 protected:
76 MouseButtonEvent(const MouseCode button, int x, int y)
77 : m_Button(button), mouseX(x), mouseY(y) {}
78
81 };
82
83 /// Fired on mouse button down.
84 /// @ingroup events
86 {
87 public:
88 MouseButtonPressedEvent(const MouseCode button, int x, int y)
89 : MouseButtonEvent(button, x, y) {}
90
91 EVENT_CLASS_TYPE(MousePressed)
92 };
93
94 /// Fired on mouse button up.
95 /// @ingroup events
97 {
98 public:
99 MouseButtonReleasedEvent(const MouseCode button, int x, int y)
100 : MouseButtonEvent(button,x,y) {}
101
102 EVENT_CLASS_TYPE(MouseReleased)
103 };
104 }
105 }
106}
107
108#endif
#define EVENT_CLASS_TYPE(type)
Definition Event.hpp:42
#define EVENT_CLASS_CATEGORY(category)
Definition Event.hpp:56
Sleak::Input::MOUSE_CODE MouseCode
Definition KeyCodes.hpp:592
virtual const char * GetName() const =0
std::string ToString() const override
MouseButtonEvent(const MouseCode button, int x, int y)
MouseButtonPressedEvent(const MouseCode button, int x, int y)
MouseButtonReleasedEvent(const MouseCode button, int x, int y)
MouseMovedEvent(const int x, const int y)
virtual const char * GetName() const override
std::string ToString() const override
virtual const char * GetName() const override
MouseScrolledEvent(const float xOffset, const float yOffset)
std::string ToString() const override
EventCategory
Definition Event.hpp:33
Keyboard and mouse event types.
Concrete event types dispatched through Sleak::EventDispatcher.
std::string Button_toString(MOUSE_CODE button)
Human-readable label for button, used in event ToString() output.
Definition KeyCodes.hpp:564
Root namespace for everything the engine exposes.
Definition Camera.hpp:10