SleakEngine 1.0.0
C++23 multi-backend game engine
Loading...
Searching...
No Matches
KeyboardEvent.hpp
Go to the documentation of this file.
1#ifndef _KEYBOARDEVENT_H_
2#define _KEYBOARDEVENT_H_
3
4#include <Events/Event.hpp>
5#include <Input/KeyCodes.hpp>
6#include <sstream>
7
8#define if_key_press(key) if (!e.IsRepeat() && e.GetKeyCode() == Sleak::Input::KEY_CODE::key)
9#define if_key_down(key) if (e.GetKeyCode() == Sleak::Input::KEY_CODE::key)
10
11namespace Sleak {
12 namespace Events {
13 namespace Input {
14 /// Common base for keyboard events; carries the key code involved.
15 /// @ingroup events
16 class ENGINE_API KeyEvent : public Event
17 {
18 public:
19 KeyCode GetKeyCode() const { return m_KeyCode; }
20 std::string GetKeyStr() const { return Sleak::Input::Key_toString(m_KeyCode); }
21
23 protected:
24 KeyEvent(const KeyCode keycode)
25 : m_KeyCode(keycode) {}
26
28 };
29
30 /// Fired on key-down; IsRepeat() distinguishes the initial press from OS auto-repeat.
31 /// @ingroup events
32 class ENGINE_API KeyPressedEvent : public KeyEvent
33 {
34 public:
35 KeyPressedEvent(const KeyCode keycode, bool isRepeat = false)
36 : KeyEvent(keycode), m_IsRepeat(isRepeat) {}
37
38 bool IsRepeat() const { return m_IsRepeat; }
39
40 std::string ToString() const override
41 {
42 std::stringstream ss;
43 const char* repeat = m_IsRepeat ? "Repeating" : "";
44 ss << "KeyPressedEvent: " << GetKeyStr() << " " << repeat;
45 return ss.str();
46 }
47
48 EVENT_CLASS_TYPE(KeyPressed)
49 private:
50 bool m_IsRepeat;
51 };
52
53 /// Fired on key-up.
54 /// @ingroup events
55 class ENGINE_API KeyReleasedEvent : public KeyEvent
56 {
57 public:
59 : KeyEvent(keycode) {}
60
61 std::string ToString() const override
62 {
63 std::stringstream ss;
64 ss << "KeyReleasedEvent: " << GetKeyStr();
65 return ss.str();
66 }
67
68 EVENT_CLASS_TYPE(KeyReleased)
69 };
70
71 /// Fired for text input, after IME/layout composition rather than raw key-down.
72 /// @ingroup events
73 class ENGINE_API KeyTypedEvent : public KeyEvent
74 {
75 public:
76 KeyTypedEvent(const KeyCode keycode)
77 : KeyEvent(keycode) {}
78
79 std::string ToString() const override
80 {
81 std::stringstream ss;
82 ss << "KeyTypedEvent: " << GetKeyStr();
83 return ss.str();
84 }
85
87 };
88 }
89 }
90}
91
92#endif
#define EVENT_CLASS_TYPE(type)
Definition Event.hpp:42
#define EVENT_CLASS_CATEGORY(category)
Definition Event.hpp:56
Sleak::Input::KEY_CODE KeyCode
Definition KeyCodes.hpp:591
KeyEvent(const KeyCode keycode)
KeyPressedEvent(const KeyCode keycode, bool isRepeat=false)
std::string ToString() const override
std::string ToString() const override
KeyTypedEvent(const KeyCode keycode)
std::string ToString() const override
Keyboard and mouse event types.
std::string Key_toString(KEY_CODE key)
Human-readable label for key, used in event ToString() output.
Definition KeyCodes.hpp:310
Root namespace for everything the engine exposes.
Definition Camera.hpp:10