AireEngine
A 3D Open-World Game Engine
Loading...
Searching...
No Matches
stateMachine.h
1#pragma once
2#include<string>
3#include<unordered_map>
4
5namespace Aire {
9 struct State {
10 public:
11 std::string name;
12 std::unordered_map<std::string, State*> linkedStates;
13
16 State(const std::string& name) : name(name) {}
17
20 virtual void onActive()=0;
21
27 void linkStateAsDst(State* dstState) {
28 if (dstState) {
29 linkedStates.insert({ dstState->name, dstState });
30 }
31 }
32
33 virtual ~State() {}
34 };
35
37 struct StateMachine {
39
40 StateMachine() : currentState(nullptr) {}
42
46 void transitionTo(std::string dstState) {
47 if (currentState) {
48 auto it = currentState->linkedStates.find(dstState);
49 if (it != currentState->linkedStates.end()) {
50 currentState = it->second;
52 }
53 }
54 }
55 };
56}
Definition stateMachine.h:9
void linkStateAsDst(State *dstState)
Definition stateMachine.h:27
virtual void onActive()=0
State(const std::string &name)
Definition stateMachine.h:16
A state machine that controls transition between states.
Definition stateMachine.h:37
State * currentState
The current state that the state machine is in.
Definition stateMachine.h:38
void transitionTo(std::string dstState)
Definition stateMachine.h:46