Olympe Engine 2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
KeyboardManager.cpp
Go to the documentation of this file.
1#include "KeyboardManager.h"
2#include "EventQueue.h"
3#include <iostream>
4#include "system_utils.h"
5#include <cstring>
6
12
14{
15 // Initialize state arrays
16 std::memset(m_keyStates, 0, sizeof(m_keyStates));
17 std::memset(m_keysPressedThisFrame, 0, sizeof(m_keysPressedThisFrame));
18 std::memset(m_keysReleasedThisFrame, 0, sizeof(m_keysReleasedThisFrame));
19 SYSTEM_LOG << "KeyboardManager created and Initialized\n";
20}
21
23{
24 SYSTEM_LOG << "KeyboardManager deleted\n";
25}
26
28{
29 std::lock_guard<std::mutex> lock(m_mutex);
30 // Reset per-frame edge detection arrays
31 std::memset(m_keysPressedThisFrame, 0, sizeof(m_keysPressedThisFrame));
32 std::memset(m_keysReleasedThisFrame, 0, sizeof(m_keysReleasedThisFrame));
33}
34
36{
37 if (sc < 0 || sc >= SDL_SCANCODE_COUNT) return false;
38 std::lock_guard<std::mutex> lock(m_mutex);
39 return m_keyStates[sc];
40}
41
43{
44 if (sc < 0 || sc >= SDL_SCANCODE_COUNT) return false;
45 std::lock_guard<std::mutex> lock(m_mutex);
47}
48
50{
51 if (sc < 0 || sc >= SDL_SCANCODE_COUNT) return false;
52 std::lock_guard<std::mutex> lock(m_mutex);
54}
55
57{
58 switch (ev->type)
59 {
62 {
63 // Update state tracking for pull API
64 SDL_Scancode sc = ev->key.scancode;
65 if (sc >= 0 && sc < SDL_SCANCODE_COUNT)
66 {
67 std::lock_guard<std::mutex> lock(m_mutex);
68 bool wasDown = m_keyStates[sc];
69 bool isDown = ev->key.down;
70
72
73 // Detect edges
74 if (isDown && !wasDown)
76 else if (!isDown && wasDown)
78 }
79
80 PostKeyEvent(ev->key);
81 break;
82 }
83 default:
84 break;
85 }
86}
87
89{
93 -1, // -1 is keyboard
94 static_cast<int>(ke.scancode)
95 );
96 msg.state = ke.down ? 1 : 0;
97 msg.param1 = 0.0f;
98
100}
ComponentTypeID GetComponentTypeID_Static()
Definition ECS_Entity.h:56
void Push(const Message &msg)
Definition EventQueue.h:37
static EventQueue & Get()
Definition EventQueue.h:34
void PostKeyEvent(SDL_KeyboardEvent const &ke)
bool m_keysPressedThisFrame[SDL_SCANCODE_COUNT]
bool m_keyStates[SDL_SCANCODE_COUNT]
bool IsKeyHeld(SDL_Scancode sc)
bool m_keysReleasedThisFrame[SDL_SCANCODE_COUNT]
static KeyboardManager & GetInstance()
bool IsKeyPressed(SDL_Scancode sc)
bool IsKeyReleased(SDL_Scancode sc)
void HandleEvent(const SDL_Event *ev)
static Message Create(EventType _ev_t, EventDomain _domain, int _d_id=-1, int _c_id=-1, uint64_t _t_uid=0)
Definition message.h:28
@ Olympe_EventType_Keyboard_KeyDown
@ Olympe_EventType_Keyboard_KeyUp
#define SYSTEM_LOG