wren
Vulkan-based game engine
Toggle main menu visibility
Loading...
Searching...
No Matches
event.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <functional>
4
#include <string_view>
5
#include <unordered_map>
6
#include <vector>
7
#include <
wren/utils/enums.hpp
>
8
9
#include "
keycode.hpp
"
10
11
namespace
wren::event
{
12
13
BOOST_DEFINE_ENUM
(Category, WINDOW, KEYBOARD, MOUSE)
14
15
// NOLINTNEXTLINE
16
#define APPEND_EVENT_INFO(name, cat) \
17
inline static const std::string_view debug_name = name; \
18
inline static const Category category = cat;
19
20
struct
WindowClose
{
21
APPEND_EVENT_INFO
(
"WindowClose"
, Category::WINDOW);
22
};
23
24
struct
WindowResized
{
25
WindowResized
() =
default
;
26
explicit
WindowResized
(
const
std::pair<float, float>& size)
27
:
width
(size.first),
height
(size.second) {}
28
29
float
width
= 0;
30
float
height
= 0;
31
32
APPEND_EVENT_INFO
(
"WindowResized"
, Category::WINDOW)
33
};
34
35
struct
MouseMoved
{
36
float
x
= 0;
37
float
y
= 0;
38
bool
relative
=
false
;
39
40
APPEND_EVENT_INFO
(
"MouseMoved"
, Category::MOUSE)
41
};
42
43
struct
MouseWheel
{
44
float
x
= 0;
45
float
y
= 0;
46
47
APPEND_EVENT_INFO
(
"MouseWheel"
, Category::MOUSE)
48
};
49
50
struct
MouseButtonDown
{
51
MouseCode
button
;
52
APPEND_EVENT_INFO
(
"MouseButtonDown"
, Category::MOUSE)
53
};
54
55
struct
MouseButtonUp
{
56
MouseCode
button
;
57
APPEND_EVENT_INFO
(
"MouseButtonUp"
, Category::MOUSE)
58
};
59
60
struct
KeyDown
{
61
KeyCode
key
;
62
APPEND_EVENT_INFO
(
"KeyDown"
, Category::KEYBOARD)
63
};
64
65
struct
KeyUp
{
66
KeyCode
key
;
67
APPEND_EVENT_INFO
(
"KeyUp"
, Category::KEYBOARD)
68
};
69
70
struct
KeyTyped
{
71
std::string_view
text
;
72
APPEND_EVENT_INFO
(
"KeyTyped"
, Category::KEYBOARD);
73
};
74
75
class
Dispatcher
{
76
public
:
77
template
<
typename
T>
78
void
dispatch
(T&& value)
const
;
79
template
<
typename
T>
80
void
on
(std::function<
void
(
const
T& t)> cb);
81
82
private
:
83
std::unordered_map<size_t, std::vector<std::function<void(
void
*)>>>
handlers_
;
84
};
85
86
template
<
typename
Type>
87
// NOLINTNEXTLINE
88
void
Dispatcher::dispatch
(Type&& value)
const
{
89
const
auto
id
=
typeid
(Type{}).hash_code();
90
if
(
handlers_
.contains(
id
)) {
91
for
(
auto
& cb :
handlers_
.at(
id
)) {
92
if
(cb) cb(&value);
93
}
94
}
95
}
96
97
template
<
typename
Type>
98
void
Dispatcher::on
(std::function<
void
(
const
Type&)> func) {
99
const
auto
id
=
typeid
(Type{}).hash_code();
100
handlers_
[id].push_back([func = std::move(func)](
void
* value) {
101
func(*
static_cast<
Type*
>
(value));
102
});
103
}
104
105
}
// namespace wren::event
wren::event::Dispatcher
Definition
event.hpp:75
wren::event::Dispatcher::dispatch
void dispatch(T &&value) const
wren::event::Dispatcher::handlers_
std::unordered_map< size_t, std::vector< std::function< void(void *)> > > handlers_
Definition
event.hpp:83
wren::event::Dispatcher::on
void on(std::function< void(const T &t)> cb)
enums.hpp
APPEND_EVENT_INFO
#define APPEND_EVENT_INFO(name, cat)
Definition
event.hpp:16
keycode.hpp
wren::event
Definition
event.cpp:3
wren::vk::BOOST_DEFINE_ENUM
BOOST_DEFINE_ENUM(ShaderType, Vertex, Fragment)
wren::MouseCode
MouseCode
Definition
keycode.hpp:5
wren::KeyCode
KeyCode
Definition
keycode.hpp:7
wren::event::KeyDown
Definition
event.hpp:60
wren::event::KeyDown::key
KeyCode key
Definition
event.hpp:61
wren::event::KeyTyped
Definition
event.hpp:70
wren::event::KeyTyped::text
std::string_view text
Definition
event.hpp:71
wren::event::KeyTyped::APPEND_EVENT_INFO
APPEND_EVENT_INFO("KeyTyped", Category::KEYBOARD)
wren::event::KeyUp
Definition
event.hpp:65
wren::event::KeyUp::key
KeyCode key
Definition
event.hpp:66
wren::event::MouseButtonDown
Definition
event.hpp:50
wren::event::MouseButtonDown::button
MouseCode button
Definition
event.hpp:51
wren::event::MouseButtonUp
Definition
event.hpp:55
wren::event::MouseButtonUp::button
MouseCode button
Definition
event.hpp:56
wren::event::MouseMoved
Definition
event.hpp:35
wren::event::MouseMoved::x
float x
Definition
event.hpp:36
wren::event::MouseMoved::relative
bool relative
Definition
event.hpp:38
wren::event::MouseMoved::y
float y
Definition
event.hpp:37
wren::event::MouseWheel
Definition
event.hpp:43
wren::event::MouseWheel::y
float y
Definition
event.hpp:45
wren::event::MouseWheel::x
float x
Definition
event.hpp:44
wren::event::WindowClose
Definition
event.hpp:20
wren::event::WindowClose::APPEND_EVENT_INFO
APPEND_EVENT_INFO("WindowClose", Category::WINDOW)
wren::event::WindowResized::WindowResized
WindowResized()=default
wren::event::WindowResized::height
float height
Definition
event.hpp:30
wren::event::WindowResized::WindowResized
WindowResized(const std::pair< float, float > &size)
Definition
event.hpp:26
wren::event::WindowResized::width
float width
Definition
event.hpp:29
wren
include
wren
event.hpp
Generated by
1.17.0