/// <summary> /// Adds the state machine transition. /// </summary> /// <param name="transition">Transition.</param> public void AddStateMachineTransition(IFSMTransition transition) { if (!mStateMachineTranstion.Contains(transition)) { mStateMachineTranstion.Add(transition); } }
/// <summary> /// Removes the state machine transition. /// </summary> /// <param name="transition">Transition.</param> public void RemoveStateMachineTransition(IFSMTransition transition) { if (mStateMachineTranstion.Contains(transition)) { mStateMachineTranstion.Remove(transition); } }
public IFSMTransition <TState, TTrigger>[] GetTransitionsWithTrigger(TTrigger trigger) { List <IFSMTransition <TState, TTrigger> > list = null; for (int i = 0; i < transitions.Count; i++) { IFSMTransition <TState, TTrigger> current = transitions[i]; if (triggerComparator(current.trigger, trigger)) { if (list == null) { list = new List <IFSMTransition <TState, TTrigger> >(); } list.Add(current); } } if (list == null) { return(null); } else { return(list.ToArray()); } }
/// <summary> /// Update the fsm. /// </summary> public void Update() { if (mActiveState == null) { return; } for (int i = 0; i < mActiveState.stateTransitions.Count; ++i) { IFSMTransition transition = mActiveState.stateTransitions[i]; if (transition == null) { continue; } if (transition.IsValid()) { //1.exit current active state; mActiveState.OnExit(); //2.get next state; mActiveState = transition.targetState; //3.handle tranition logic; transition.OnTransition(); //4.execute new active state. if (mActiveState != null) { mActiveState.OnEnter(); } break; } } mActiveState.OnUpdate(); }
public void MakeTransition(IFSMTransition <TState, TTrigger> transition) { if (ContainsTransition(transition.stateFrom, transition.trigger) == false) { transitions.Add(transition); } }
public virtual void RemoveStateTransition(IFSMTransition transition) { if (!mStateTransitions.Contains(transition)) { return; } mStateTransitions.Remove(transition); }
public virtual void AddStateTransition(IFSMTransition transition) { if (mStateTransitions.Contains(transition)) { return; } mStateTransitions.Add(transition); }
public void BreakAllTransitionRelatedTo(TState state) { for (int i = 0; i < transitions.Count; i++) { IFSMTransition <TState, TTrigger> current = transitions[i]; if (stateComparator(current.stateFrom, state) && stateComparator(current.stateTo, state)) { transitions.RemoveAt(i); i--; } } }
public IFSMTransition <TState, TTrigger> GetTransition(TState stateFrom, TTrigger trigger) { for (int i = 0; i < transitions.Count; i++) { IFSMTransition <TState, TTrigger> current = transitions[i]; if (stateComparator(current.stateFrom, stateFrom) && triggerComparator(current.trigger, trigger)) { return(current); } } return(null); }
public void BreakTransition(TState stateFrom, TTrigger trigger) { IFSMTransition <TState, TTrigger> transition = GetTransition(stateFrom, trigger); transitions.Remove(transition); }
public void BreakTransition(IFSMTransition <TState, TTrigger> transition) { transitions.Remove(transition); }