6#include <brenta/input.hpp>
7#include <brenta/logger.hpp>
15std::unordered_map<brenta::Key, Input::KeyboardCallback> Input::keyboard_callbacks;
16std::unordered_map<Input::MouseCallbackId, Input::MouseCallback>
17 Input::mouse_callbacks;
18const std::string Input::subsystem_name =
"input";
19bool Input::initialized =
false;
25std::expected<void, Subsystem::Error> Input::initialize()
27 if (this->is_initialized())
return {};
29 Input::initialized =
true;
30 INFO(
"{} initialized", Input::subsystem_name);
34std::expected<void, Subsystem::Error> Input::terminate()
36 if (!this->is_initialized())
return {};
38 Input::initialized =
false;
39 INFO(
"{}: terminated", Input::subsystem_name);
43std::string Input::name()
45 return Input::subsystem_name;
48bool Input::is_initialized()
50 return Input::initialized;
57Input &Input::instance()
63void Input::add_keyboard_callback(Key key, KeyboardCallback callback)
65 Input::keyboard_callbacks[key] = callback;
66 DEBUG(
"{}: aded callback for key: {}",
67 Input::subsystem_name, (
int) key);
71void Input::remove_keyboard_callback(Key key)
73 if (Input::keyboard_callbacks.find(key) == Input::keyboard_callbacks.end())
75 ERROR(
"{}: no callback found for key: {}", Input::subsystem_name, (
int) key);
79 Input::keyboard_callbacks.erase(key);
80 DEBUG(
"{}: removed callback for key: {}", Input::subsystem_name, (
int) key);
84void Input::key_callback(Key key, KeyAction action,
87 EVENT(Logger::Event::Callback,
"{}: received key callback",
88 Input::subsystem_name);
90 if (action == KeyAction::Press)
92 if (Input::keyboard_callbacks.find(key) != Input::keyboard_callbacks.end())
94 Input::keyboard_callbacks.at(key)();
100void Input::add_mouse_callback(MouseCallbackId callback_name,
101 MouseCallback callback)
103 Input::mouse_callbacks[callback_name] = callback;
104 DEBUG(
"{}: added callback for mouse: {}",
105 Input::subsystem_name, callback_name);
109void Input::remove_mouse_callback(MouseCallbackId callback_name)
111 if (Input::mouse_callbacks.find(callback_name)
112 == Input::mouse_callbacks.end())
114 ERROR(
"{}: no callback found for mouse: {}",
115 Input::subsystem_name, callback_name);
119 Input::mouse_callbacks.erase(callback_name);
120 DEBUG(
"{}: removed callback for mouse: {}",
121 Input::subsystem_name, callback_name);
125void Input::mouse_callback(
double xpos,
128 for (
auto &callback :
Input::mouse_callbacks)
130 callback.second(xpos, ypos);
141 return Input::instance();