ECSTASY
All in the name
Loading...
Searching...
No Matches
EventsManager.cpp
Go to the documentation of this file.
1
11
12#include "EventsManager.hpp"
13#include "ecstasy/config.hpp"
21#include "events/Event.hpp"
22#include "inputs/Gamepads.hpp"
27
28#ifdef ECSTASY_INTEGRATIONS_USER_ACTION
30#endif
31
33{
34 template <typename E>
35 static void callListeners(Registry &registry, const E &event)
36 {
37 for (auto [entity, listener, listeners] :
39 .template where<Or<EventListener<E>, EventListeners<E>>>()) {
40 if (listener)
41 listener.value()(registry, entity, event);
42 if (listeners)
43 listeners.value()(registry, entity, event);
44 }
45 }
46
47 static void callKeyListeners(Registry &registry, const KeyEvent &event)
48 {
49 for (auto [entity, listener, listeners, sequence, combination] :
50 registry
55 if (listener)
56 listener.value()(registry, entity, event);
57 if (listeners)
58 listeners.value()(registry, entity, event);
59 if (sequence && sequence.value().get().update(event))
60 sequence.value()(registry, entity);
61 if (combination && combination.value().get().update(event))
62 combination.value()(registry, entity);
63 }
64 }
65
67 {
68 for (auto [entity, listener, listeners, sequence, combination] :
69 registry
74 if (listener)
75 listener.value()(registry, entity, event);
76 if (listeners)
77 listeners.value()(registry, entity, event);
78 if (sequence && sequence.value().get().update(event))
79 sequence.value()(registry, entity);
80 if (combination && combination.value().get().update(event))
81 combination.value()(registry, entity);
82 }
83 }
84
86 {
87 switch (event.type) {
90 callListeners(registry, event.mouseButton);
91
92 if (registry.hasResource<Mouse>())
93 registry.getResource<Mouse>().get().setButtonState(
94 event.mouseButton.button, event.mouseButton.pressed);
95 break;
96 case Event::Type::MouseWheelScrolled: callListeners(registry, event.mouseWheel); break;
98 callListeners(registry, event.mouseMove);
99
100 if (registry.hasResource<Mouse>()) {
101 RR<Mouse> mouse = registry.getResource<Mouse>();
102 mouse.get().setPosition(
103 event.mouseMove.x + mouse.get().getX(), event.mouseMove.y + mouse.get().getY());
104 }
105 break;
108 callKeyListeners(registry, event.key);
109
110 if (registry.hasResource<Keyboard>())
111 registry.getResource<Keyboard>().get().setKeyState(event.key.key, event.key.pressed);
112 break;
113 case Event::Type::TextEntered: callListeners(registry, event.text); break;
116 callGamepadListeners(registry, event.gamepadButton);
117
118 if (registry.hasResource<Gamepads>())
119 registry.getResource<Gamepads>()
120 .get()
121 .get(event.gamepadButton.id)
122 .setButtonState(event.gamepadButton.button, event.gamepadButton.pressed);
123 break;
126 callListeners(registry, event.gamepadConnected);
127
128 if (registry.hasResource<Gamepads>())
129 registry.getResource<Gamepads>()
130 .get()
131 .get(event.gamepadConnected.id)
132 .setConnected(event.gamepadConnected.connected);
133 break;
135 callListeners(registry, event.gamepadAxis);
136
137 if (registry.hasResource<Gamepads>())
138 registry.getResource<Gamepads>()
139 .get()
140 .get(event.gamepadAxis.id)
141 .setAxisValue(event.gamepadAxis.axis, event.gamepadAxis.value);
142 break;
143 default: break;
144 }
145
146#ifdef ECSTASY_INTEGRATIONS_USER_ACTION
147 if (registry.hasResource<user_action::Users>())
148 registry.getResource<const user_action::Users>().get().handleEvent(registry, event);
149#endif
150 }
151} // namespace ecstasy::integration::event
Definition of the Entities class.
Associative Map to store entity components.
Query components presents in all given queryables.
Registry class definition.
Resource holding all the Registry entities.
Definition Entities.hpp:30
Base of an ECS architecture.
Definition Registry.hpp:82
ResourceReference< const R, Locked > getResource() const
Get the Resource of type R.
Definition Registry.hpp:937
Select< queryable_type_t< C >, queryable_type_t< Cs >... > select()
Starts the creation of a complex query in the registry.
bool hasResource() const
Check whether the registry has the resource of type R.
Definition Registry.hpp:918
static void handleEvent(Registry &registry, const Event &event)
Handle an event in a given registry.
constexpr void setConnected(bool connected) noexcept
Update the connected state of the gamepad.
Definition Gamepad.hpp:161
constexpr void setButtonState(Button button, bool down)
Update a given button state.
Definition Gamepad.hpp:215
constexpr void setAxisValue(Axis axis, float value)
Update an axis value.
Definition Gamepad.hpp:252
Current Gamepads states.
Definition Gamepads.hpp:26
Gamepad & get(std::size_t i)
Fetch a gamepad.
Definition Gamepads.hpp:65
constexpr void setKeyState(Key key, bool down)
Update a given key state.
Definition Keyboard.hpp:219
Current mouse state.
Definition Mouse.hpp:30
constexpr void setButtonState(Button button, bool down)
Update a given button state.
Definition Mouse.hpp:123
constexpr void setPosition(int x, int y) noexcept
Set the mouse position.
Definition Mouse.hpp:209
UserProfile container resource.
Definition Users.hpp:40
void handleEvent(Registry &registry, const event::Event &event) const
Call action listeners associated to the event if any.
Definition Users.cpp:77
Event integration.
Definition Event.hpp:25
static void callListeners(Registry &registry, const E &event)
static void callGamepadListeners(Registry &registry, const GamepadButtonEvent &event)
static void callKeyListeners(Registry &registry, const KeyEvent &event)
ResourceReference< R, AutoLock > RR
ResourceReference alias
Definition Registry.hpp:66
Query modifier which returns a std::optional filled when the data if existing.
Binary query modifier which performs a or between at least two queryables.
Placeholder for Maybe.
Definition Maybe.hpp:31
Placeholder for Or.
Definition Or.hpp:31
@ KeyReleased
One of the keyboard key has been released.
@ MouseButtonPressed
One of the mouse button has been pressed.
@ MouseButtonReleased
One of the mouse button has been released.
@ TextEntered
A character has been entered.
@ MouseWheelScrolled
The mouse wheel was scrolled.
@ GamepadAxis
One of the gamepads axis value changed.
@ KeyPressed
One of the keyboard key has been pressed.
@ GamepadDisconnected
One gamepad has been disconnected.
@ MouseMoved
The mouse cursor moved.
@ GamepadConnected
One gamepad has been connected.
@ GamepadButtonPressed
One of the gamepads button has been pressed.
@ GamepadButtonReleased
One of the gamepads button has been released.
Event describing a gamepad button pressed or released.
Event describing a key pressed or released.
Definition KeyEvent.hpp:25