diff options
author | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-08-05 17:07:10 +0200 |
---|---|---|
committer | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-08-05 17:07:10 +0200 |
commit | c9c78e191dd71bacd769bbeccd58b80e4376184b (patch) | |
tree | 4da1a8500dd73dd6368fc89496dc0f428d318c5b /src/FSM.hpp | |
parent | 2017-08-03 (diff) | |
download | AltCraft-c9c78e191dd71bacd769bbeccd58b80e4376184b.tar AltCraft-c9c78e191dd71bacd769bbeccd58b80e4376184b.tar.gz AltCraft-c9c78e191dd71bacd769bbeccd58b80e4376184b.tar.bz2 AltCraft-c9c78e191dd71bacd769bbeccd58b80e4376184b.tar.lz AltCraft-c9c78e191dd71bacd769bbeccd58b80e4376184b.tar.xz AltCraft-c9c78e191dd71bacd769bbeccd58b80e4376184b.tar.zst AltCraft-c9c78e191dd71bacd769bbeccd58b80e4376184b.zip |
Diffstat (limited to 'src/FSM.hpp')
-rw-r--r-- | src/FSM.hpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/FSM.hpp b/src/FSM.hpp index 9570e26..346d0f0 100644 --- a/src/FSM.hpp +++ b/src/FSM.hpp @@ -6,27 +6,31 @@ template<class T> class FSM { - T previousState; - T &state; - std::map<Transaction, std::function<void()>> handlers; public: using Transaction = std::pair<T, T>; + using Handler = std::function<void(T &)>; - FSM(T &value) : state(value), previousState(value) {} + FSM(T initialState) : state(initialState), previousState(initialState) {} ~FSM() = default; void Update() { - auto handler = handlers[Transaction{previousState, state}]; + auto &handler = handlers[Transaction{previousState, state}]; if (handler) - handler(); + handler(state); + previousState = state; } - void RegisterHandler(T state, std::function<void()> handler) { + void RegisterHandler(T state, Handler handler) { handlers[Transaction{state, state}] = handler; } - void RegisterTransactionHandler(Transaction transaction, std::function<void()> handler) { + void RegisterTransactionHandler(Transaction transaction, Handler handler) { handlers[transaction] = handler; } + +private: + T previousState; + T state; + std::map<Transaction, Handler> handlers; };
\ No newline at end of file |