/// <summary> /// Order of evaluation: /// - action given to Accept method /// - transition actions /// - state actions /// </summary> /// <param name="input"></param> /// <param name="action"></param> public void Accept(T input, Action action) { if (_state.Transitions.Any()) { foreach (var t in _state.Transitions) { if (t.Evaluate(input)) { _state = t.Target; action(); t.Execute(); _state.Execute(); return; } } } throw new Exception("Can not accept input in state: " + _state.Name); }
/// <summary> /// Order of evaluation: /// - action given to Accept method /// - transition actions /// - state actions /// </summary> /// <param name="input"></param> /// <param name="action"></param> public void Accept(T input, Action action) { if (_state.Transitions.Any()) { foreach (var t in _state.Transitions) { // Allow more spirits in here Thread.Sleep(2000); if (t.Evaluate(input)) { _state = t.Target; action(); t.Execute(); _state.Execute(); return; } } } throw new Exception("Can not accept input in state: " + _state.Name); }
public Transition(Func <T, bool> predicate, State <T> targetState, params Action[] actions) { _p = predicate; _targetState = targetState; _actions.AddRange(actions); }
public Automaton(IAmState <T> startState) { _state = startState; }
public DelayedAutomaton(IAmState <T> startState) { _state = startState; }