public bool SwitchState(BrynhildrState newState) { bool switchSuccess = false; if (states != null && states.ContainsKey(newState)) { if (currentState == null) { currentState = states [newState]; currentState.Start(); switchSuccess = true; } else if (currentState.AllowTransition(newState)) { currentState.End(); currentState = states [newState]; currentState.Start(); switchSuccess = true; } else { Debug.Log(string.Format("{0} does not allow transition to {1}", currentState.State, newState)); } } if (switchSuccess) { // Updating state history #if UNITY_EDITOR if (prevGameState != null) { prevGameState.Add(newState); if (prevGameState.Count > 20) { prevGameState.RemoveAt(0); } } #endif if (this.OnStatePreSwitchEvent != null) { this.OnStatePreSwitchEvent(newState); } } else { Debug.Log("States dictionary not ready for switching to " + newState); } return(switchSuccess); }
public BrynhildrStateMachine(GameManager manager) { states = new Dictionary <BrynhildrState, BrynhildrState_Base <BrynhildrState> > (); Brynhildr_Loading loading = new Brynhildr_Loading(manager); Brynhildr_InGame inGame = new Brynhildr_InGame(manager); Brynhildr_Exit exit = new Brynhildr_Exit(manager); states.Add(loading.State, (BrynhildrState_Base <BrynhildrState>)loading); states.Add(inGame.State, (BrynhildrState_Base <BrynhildrState>)inGame); states.Add(exit.State, (BrynhildrState_Base <BrynhildrState>)exit); currentState = loading; currentState.Start(); prevGameState = new List <BrynhildrState> (); prevGameState.Add(currentState.State); }