protected void ChangeState (AiState state, System.Action initFunc) { List<AiState> can; if (transitable.TryGetValue (currentState, out can) == false) { throw new UnityException ("cannot find transitable list"); } if (can.FindIndex (s => s == state) != -1) { if (currentState != state) { System.Action stateEndFunc; if (stateEnd.TryGetValue (currentState, out stateEndFunc) == false) { stateEndFunc = null; } if (stateEndFunc != null) { stateEndFunc (); } if (initFunc != null) initFunc (); System.Action stateStartFunc; if (stateStart.TryGetValue (state, out stateStartFunc) == false) { stateStartFunc = null; } if (stateStartFunc != null) { stateStartFunc (); } if (stateMachine.TryGetValue (state, out currentStateAction) == false) { currentStateAction = null; } } else { if (initFunc != null) initFunc (); } currentState = state; nextState = null; } }
protected void RequestChangeState (AiState state, System.Action initFunc = null) { nextState = state; nextStateInitAction = initFunc; }