public void Remove(StandardState <TTrigger> state) { if (states.Contains(state)) { states.Remove(state); state.SetParent(null); } }
public void Add(StandardState <TTrigger> state) { if (!states.Contains(state)) { states.Add(state); state.SetParent(this); } }
public StandardStateMachine(StandardState <TTrigger> startState) { Debug.Assert(startState != null); this.startState = startState; activeState = null; Add(startState); }
public void Reboot() { if (activeState == null) { return; } activeState.StopState(); activeState = null; }
public void Step() { Debug.Assert(startState != null); if (activeState == null) { activeState = startState; activeState.StartState(); } using (ProfilingScope.Open(activeState)) { //Find the first triggered transition and consume it var transitions = activeState.Transitions; foreach (var transition in transitions) { if (!transition.IsUsable || !transition.HasTriggered) { continue; } var targetState = transition.TryConsumingTrigger(); if (targetState == null) { continue; } //Stop the last state, and start the next one activeState.StopState(); activeState = targetState; activeState.StartState(); break; } //Execute the current active state activeState.Execute(); } }
protected ProfilingScope(StandardState <TTrigger> state) : base(state.Name) { }
public void Kill() { activeState = null; }