public void AddState(IFiniteState state, bool isDefaultState = false) { if (state == null || state.GetName() == null) { return; } m_States[state.GetName()] = state; if (isDefaultState || string.IsNullOrEmpty(m_DefaultState)) { m_DefaultState = state.GetName(); } m_StateCount = m_States.Count; }
void ChangeState(Transition trans) { string toState = trans.m_ToState; bool push = true; if (string.IsNullOrEmpty(toState)) { if (m_StateStack.Count > 0) { toState = m_StateStack[m_StateStack.Count - 1]; m_StateStack.RemoveAt(m_StateStack.Count - 1); push = false; } else { return; } } if (toState == m_CurrentStateName) { return; } m_PrevState = m_CurrentState; m_CurrentState = null; m_CurrentStateName = toState; if (m_PrevState != null) { m_PrevState.OnEnd(); // 入栈 if (m_StackSize > 0 && push && m_PrevState.KeepInStack() && StateStackPeek != m_PrevState.GetName()) { int del = m_StateStack.Count + 1 - m_StackSize; if (del > 0) { m_StateStack.RemoveRange(0, del); } m_StateStack.Add(m_PrevState.GetName()); } } UpdateTransitions(); }