protected void RemoveState(FiniteState state) { if (_allStates.ContainsKey(state.Name)) { _allStates.Remove(state.Name); } }
protected void AddState(FiniteState state, bool bDefault = false) { _allStates[state.Name] = state; state.Owner = this; if (bDefault) { _defaultState = state; } }
public void OnFixUpdate() { if (NextState != null) { ChangeState(NextState); NextState = null; } if (CurrentState != null) { CurrentState.OnFixUpdate(_context); } }
// 发送事件,触发状态迁移 public void SendEvent(string eventName) { Debug.Assert(NextState == null, "Next State already exist!"); foreach (FiniteStateTransition transition in _allTransitions) { FiniteState nextState; if (TryGetNextStateByEventName(eventName, transition, out nextState)) { // ChangeState(nextState); NextState = nextState; break; } } }
// 状态迁移 private void ChangeState(FiniteState newState) { if (newState == CurrentState) { return; } if (CurrentState != null) { CurrentState.OnExit(_context); } CurrentState = newState; if (CurrentState != null) { CurrentState.OnEnter(_context); } }
// 根据事件名称,从状态迁移表中,取出下一个状态 private bool TryGetNextStateByEventName(string eventName, FiniteStateTransition transition, out FiniteState state) { state = null; if (!eventName.Equals(transition.EventName)) { return(false); } if (CurrentState == null || !CurrentState.Name.Equals(transition.LastStateName)) { return(false); } return(_allStates.TryGetValue(transition.NextStateName, out state)); }