Skip to main content

LambdaStateListener.ixx File

Lambda-based listener for state transitions. More...

Included Headers

#include <functional> #include <cstdint> #include <utility> #include <helios.engine.state.types> #include <helios.engine.ecs.GameObject> #include <helios.engine.runtime.world.UpdateContext> #include <helios.engine.state.StateTransitionListener>

Namespaces Index

namespacehelios
namespaceengine

Main engine module aggregating core infrastructure and game systems. More...

namespacestate

Generic, template-based state management system. More...

namespacelisteners

State transition listeners. More...

Classes Index

classLambdaStateListener<StateType>

Lambda-based implementation of StateTransitionListener. More...

Description

Lambda-based listener for state transitions.

File Listing

The file content with the documentation metadata removed is:

1/**
2 * @file LambdaStateListener.ixx
3 * @brief Lambda-based listener for state transitions.
4 */
5module;
6
7#include <functional>
8#include <cstdint>
9#include <utility>
10
11export module helios.engine.state.listeners.LambdaStateListener;
12
13import helios.engine.state.StateTransitionListener;
14import helios.engine.runtime.world.UpdateContext;
15
16import helios.engine.state.types;
17
18import helios.engine.ecs.GameObject;
19
20using namespace helios::engine::state::types;
21using namespace helios::engine::ecs;
22
24
25 /**
26 * @brief Lambda-based implementation of StateTransitionListener.
27 *
28 * @details Allows registering callbacks for state transition events
29 * without creating a dedicated listener class. Useful for simple
30 * reactions to state changes.
31 *
32 * @tparam StateType The state enum type.
33 *
34 * @see StateTransitionListener
35 * @see StateManager
36 */
37 template<typename StateType>
38 class LambdaStateListener : public StateTransitionListener<StateType> {
39
40 /**
41 * @brief Callback type for state enter events.
42 */
43 using OnEnterCallback = std::function<void(helios::engine::runtime::world::UpdateContext&, const StateType)>;
44
45 /**
46 * @brief Callback type for state exit events.
47 */
48 using OnExitCallback = std::function<void(helios::engine::runtime::world::UpdateContext&, const StateType)>;
49
50 /**
51 * @brief Callback type for state transition events.
52 */
53 using OnTransitionCallback = std::function<void(helios::engine::runtime::world::UpdateContext&, const StateTransitionContext<StateType>)>;
54
55 /**
56 * @brief Callback invoked when entering a state.
57 */
58 OnEnterCallback onEnterCallback_ = nullptr;
59
60 /**
61 * @brief Callback invoked during state transition.
62 */
63 OnTransitionCallback onTransitionCallback_= nullptr;
64
65 /**
66 * @brief Callback invoked when exiting a state.
67 */
68 OnExitCallback onExitCallback_= nullptr;
69
70
71 public:
72
73 /**
74 * @brief Constructs a lambda state listener.
75 *
76 * @param onExitCallback Called when exiting a state.
77 * @param onTransitionCallback Called during the transition.
78 * @param onEnterCallback Called when entering a state.
79 */
81 OnExitCallback onExitCallback,
82 OnTransitionCallback onTransitionCallback,
83 OnEnterCallback onEnterCallback
84 ) : onExitCallback_(std::move(onExitCallback)),
85 onTransitionCallback_(std::move(onTransitionCallback)),
86 onEnterCallback_(std::move(onEnterCallback)) {}
87
88 /**
89 * @brief Constructs a listener with only an enter callback.
90 *
91 * @param onEnterCallback Called when entering a state.
92 */
94 OnExitCallback onEnterCallback
95 ) : onEnterCallback_(std::move(onEnterCallback)) {}
96
97 /**
98 * @brief Constructs a listener with only a transition callback.
99 *
100 * @param onTransitionCallback Called during the transition.
101 */
103 OnTransitionCallback onTransitionCallback
104 ) : onTransitionCallback_(std::move(onTransitionCallback)) {}
105
106
107
108 /**
109 * @copydoc StateTransitionListener::onStateExit
110 */
113 const StateType from
114 ) noexcept override {
115 if (onExitCallback_) {
116 onExitCallback_(updateContext, from);
117 }
118 }
119
120 /**
121 * @copydoc StateTransitionListener::onStateEnter
122 */
125 const StateType to
126 ) noexcept override {
127 if (onEnterCallback_) {
128 onEnterCallback_(updateContext, to);
129 }
130 }
131
132 /**
133 * @copydoc StateTransitionListener::onStateTransition
134 */
137 const StateTransitionContext<StateType> transitionCtx
138 ) noexcept override {
139 if (onTransitionCallback_) {
140 onTransitionCallback_(updateContext, transitionCtx);
141 }
142 };
143
144
145
146
147 };
148
149}
150

Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.15.0.