Brenta Engine 1.2
Loading...
Searching...
No Matches
input.hpp
1// SPDX-License-Identifier: MIT
2// Author: Giovanni Santini
3// Mail: giovanni.santini@proton.me
4// Github: @San7o
5
6#pragma once
7
8#include <brenta/subsystem.hpp>
9
10#include <GLFW/glfw3.h>
11#include <functional>
12#include <string>
13#include <unordered_map>
14#include <vector>
15#include <expected>
16
17namespace brenta
18{
19
20namespace types
21{
22
23typedef std::string mouse_callback_name_t;
24
25} // namespace types
26
34class input : public subsystem
35{
36public:
37
38 class builder;
39
40 static const std::string subsystem_name;
41
42 // Subsystem interface
49 std::expected<void, subsystem::error> initialize() override;
53 std::expected<void, subsystem::error> terminate() override;
54 std::string name() override;
55 bool is_initialized() override;
56
57 // Constructors / destructors
58 input() = default;
59 ~input() = default;
60
61 // Member functions
62
63 static input &instance();
64
76 static void add_keyboard_callback(int key, std::function<void()> callback);
85 static void remove_keyboard_callback(int key);
98 static void key_callback(GLFWwindow *window, int key, int scancode,
99 int action, int mods);
111 static void
112 add_mouse_pos_callback(types::mouse_callback_name_t name,
113 std::function<void(double, double)> callback);
122 static void
123 remove_mouse_pos_callback(types::mouse_callback_name_t callback_name);
134 static void mouse_pos_callback(GLFWwindow *window, double xpos, double ypos);
135
136private:
137
138 static std::unordered_map<int, std::function<void()>> keyboard_callbacks;
139 static std::unordered_map<std::string, std::function<void(double, double)>>
140 mouse_callbacks;
141 static bool initialized;
142
143};
144
146{
147public:
148
149 builder() = default;
150 ~builder() = default;
151
152 brenta::subsystem &build() override;
153};
154
155} // namespace brenta
Input subsystem.
Definition input.hpp:35
bool is_initialized() override
Returns true if the subsystem is initialized.
Definition input.cpp:52
std::expected< void, subsystem::error > initialize() override
Initialize the input system.
Definition input.cpp:26
std::string name() override
Returns the name of the sybsystem.
Definition input.cpp:47
static void remove_keyboard_callback(int key)
Remove a keyboard callback.
Definition input.cpp:74
static void remove_mouse_pos_callback(types::mouse_callback_name_t callback_name)
Remove a mouse position callback.
Definition input.cpp:108
static void mouse_pos_callback(GLFWwindow *window, double xpos, double ypos)
Mouse position callback.
Definition input.cpp:123
static void add_mouse_pos_callback(types::mouse_callback_name_t name, std::function< void(double, double)> callback)
Add a mouse position callback.
Definition input.cpp:100
std::expected< void, subsystem::error > terminate() override
Cleans up resources.
Definition input.cpp:38
static void key_callback(GLFWwindow *window, int key, int scancode, int action, int mods)
Keyboard callback.
Definition input.cpp:86
static void add_keyboard_callback(int key, std::function< void()> callback)
Add a keyboard callback.
Definition input.cpp:67
Builder interface.
Definition subsystem.hpp:49
Subsystem interface.
Definition subsystem.hpp:22
Window subsystem.
Definition window.hpp:29