Cogs.Core
Keyboard.cpp
1#include "Keyboard.h"
2
4 // Reset current state
5 state.chars = "";
6
7 // Process events
8 for (const Event& event : eventQueue) {
9 switch (event.type)
10 {
11 case Event::Type::Press: {
12 Key key = std::get<Key>(event.data);
13 state.keysDown[static_cast<size_t>(key)] = true;
14 break;
15 }
16 case Event::Type::Release: {
17 Key key = std::get<Key>(event.data);
18 state.keysDown[static_cast<size_t>(key)] = false;
19 break;
20 }
21 case Event::Type::AddChar: {
22 state.chars += std::get<std::string>(event.data);
23 break;
24 }
25 case Event::Type::Reset: {
26 state = {};
27 break;
28 }
29 default:
30 break;
31 }
32 }
33
34 // Reset events
35 events = std::move(eventQueue);
36 eventQueue = {};
37}
38
39void Cogs::Keyboard::submitKeyDown(Key key, double timestamp) {
40 eventQueue.push_back({Event::Type::Press, timestamp, {key}});
41}
42
43void Cogs::Keyboard::submitKeyUp(Key key, double timestamp) {
44 eventQueue.push_back({Event::Type::Release, timestamp, {key}});
45}
46
47void Cogs::Keyboard::submitChar(std::string ch, double timestamp) {
48 eventQueue.push_back({Event::Type::AddChar, timestamp, {std::move(ch)}});
49}
50
51void Cogs::Keyboard::submitReset(double timestamp) {
52 eventQueue.push_back({Event::Type::Reset, timestamp, {}});
53}
54
55bool Cogs::Keyboard::wasKeyPressed(Key key) const {
56 for (const Event& e : events)
57 if (e.type == Event::Type::Press && std::get<Key>(e.data) == key)
58 return true;
59 return false;
60}
61bool Cogs::Keyboard::wasKeyReleased(Key key) const {
62 for (const Event& e : events)
63 if (e.type == Event::Type::Release && std::get<Key>(e.data) == key)
64 return true;
65 return false;
66}
void submitKeyDown(Key key, double timestamp)
Queue key down event for being processed in the next update.
Definition: Keyboard.cpp:39
void submitReset(double timestamp)
Queue reset event for being processed in the next update.
Definition: Keyboard.cpp:51
void submitKeyUp(Key key, double timestamp)
Queue key up event for being processed in the next update.
Definition: Keyboard.cpp:43
void submitChar(std::string ch, double timestamp)
Queue char event for being processed in the next update.
Definition: Keyboard.cpp:47
bool wasKeyPressed(Key key) const
Return true if the key was pressed in the last frame, false otherwise.
Definition: Keyboard.cpp:55
void update()
Reset the state and events and update them from the eventQueue.
Definition: Keyboard.cpp:3
bool wasKeyReleased(Key key) const
Return true if the key was released in the last frame, false otherwise.
Definition: Keyboard.cpp:61
bool keysDown[static_cast< size_t >(Key::Count)]
State of tracked keys.
Definition: Keyboard.h:51
std::string chars
List of characters generated by the keyboard this frame.
Definition: Keyboard.h:52