-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathState.cpp
49 lines (38 loc) · 859 Bytes
/
State.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "Arduino.h"
#include "State.h"
State::State(String stateName, StateFn f) {
_f = f;
_stateName = stateName;
}
State::~State() {
ClearTransitions();
}
void State::AddTransition(String to, TransitionFn f) {
if(_numTransitions >= MAX_TRANSITIONS) {
return;
}
_transitions[_numTransitions] = new Transition(to, f);
_numTransitions++;
}
void State::ClearTransitions() {
for(int i=0; i<_numTransitions; i++)
delete _transitions[i];
_numTransitions = 0;
}
String State::GetNextState() {
for (int i=0; i<_numTransitions; i++)
{
auto t = _transitions[i];
if(t->ShouldTransition())
return t->To();
}
// if no transitions, next state is the current state
return _stateName;
}
void State::RunState() {
if (_f)
_f();
}
bool State::Is(String stateName){
return _stateName.equals(stateName);
}