MayaFlux 0.3.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ signal()

void MayaFlux::Vruta::EventSource::signal ( Core::WindowEvent  event)

Signals that an event occurred.

Parameters
eventThe event data

Called by GLFW callbacks. Queues event and resumes waiting coroutines.

Definition at line 7 of file EventSource.cpp.

8{
9 if (auto* key_data = std::get_if<Core::WindowEvent::KeyData>(&event.data)) {
10 if (event.type == Core::WindowEventType::KEY_PRESSED) {
11 m_key_states[key_data->key] = true;
12 } else if (event.type == Core::WindowEventType::KEY_RELEASED) {
13 m_key_states[key_data->key] = false;
14 }
15 }
16
17 if (auto* button_data = std::get_if<Core::WindowEvent::MouseButtonData>(&event.data)) {
19 m_button_states[button_data->button] = true;
20 } else if (event.type == Core::WindowEventType::MOUSE_BUTTON_RELEASED) {
21 m_button_states[button_data->button] = false;
22 }
23 }
24
25 if (auto* pos_data = std::get_if<Core::WindowEvent::MousePosData>(&event.data)) {
26 m_mouse_x = pos_data->x;
27 m_mouse_y = pos_data->y;
28 }
29
30 m_pending_events.push(event);
31
32 auto waiters = m_waiters;
33 for (auto* awaiter : waiters) {
34 awaiter->try_resume();
35 }
36}
std::unordered_map< int, bool > m_button_states
std::vector< Kriya::EventAwaiter * > m_waiters
std::queue< Core::WindowEvent > m_pending_events
std::unordered_map< int16_t, bool > m_key_states

References MayaFlux::Core::WindowEvent::data, MayaFlux::Core::KEY_PRESSED, MayaFlux::Core::KEY_RELEASED, m_button_states, m_key_states, m_mouse_x, m_mouse_y, m_pending_events, m_waiters, MayaFlux::Core::MOUSE_BUTTON_PRESSED, MayaFlux::Core::MOUSE_BUTTON_RELEASED, and MayaFlux::Core::WindowEvent::type.