//新たに状態を追加 public void AddFSMState(FSMState fsmState){ //引数の確認 if(fsmState == null){ Debug.LogError("FSM ERROR: Null reference is not allowed"); } //状態が存在しないときの条件式 if(fsmStates.Count == 0) { fsmStates.Add(fsmState); currentState = fsmState; currentStateID = fsmState.ID; return; } //状態が存在する場合の条件式 foreach(FSMState state in fsmStates) { if(state.ID == fsmState.ID) { Debug.LogError("FSM ERROR: 既に存在する状態をリストに追加しようとしています。"); return; } } //状態をリストに追加する fsmStates.Add (fsmState); }
//このメソッドで遷移させる public void RunTransition(Transition trans) { //引数の確認 if(trans == Transition.None) { Debug.LogError("FSM ERROR: Null遷移は不正です。"); return; } //currentStateが指定の遷移についての状態を持つか FSMStateID id = currentState.GetOutputState (trans); if(id == FSMStateID.None) { Debug.LogError("FSM ERROR: 現在の状態はこの遷移が指定する状態を持ちません。"); return; } //currentStateIDとcurrentStateを更新 currentStateID = id; foreach(FSMState state in fsmStates) { if(state.ID == currentStateID) { currentState = state; break; } } }
[SetUp] public void Init() { fsmState = Substitute.For<FSMState> (); map = new Dictionary<Transition, FSMStateID> (); }