void ProcessWithGameObjects(FSMProcessor <EGamestate, GameState> fsm) { var setupers = getFromScene ? FindObjectsOfType <GameStateSetuper>() : gameStateSetupers; var systemsDictionary = new Dictionary <Type, GameSystem>(); //Prepare all Gamestates foreach (var setuper in setupers) { var systems = new List <GameSystem>(); for (int i = 0; i < setuper.transform.childCount; i++) { if (setuper.transform.GetChild(i).gameObject.activeSelf) { if (setuper.transform.GetChild(i).TryGetComponent <GameSystem>(out var system)) { systemsDictionary.Add(system.GetType(), system); systems.Add(system); } } } fsm.AddState(setuper.Type, new GameState(setuper.Type, setuper.IsRestarting, setuper.UseAdditionalScreens ? setuper.AdditionalScreens : new EGamestate[0], systems.ToArray()), setuper.AllowedTransitions); } //Handle one's that has additional states foreach (var setuper in setupers.Where(x => x.UseAdditionalStates)) { var state = fsm.GetState(setuper.Type); var first = new List <GameState>(); var last = new List <GameState>(); for (int i = 0; i < setuper.AdditionalStatesInTheBegining.Length; i++) { var additionalState = fsm.GetState(setuper.AdditionalStatesInTheBegining[i]); first.Add(additionalState); } for (int i = 0; i < setuper.AdditionalStatesInTheEnd.Length; i++) { var additionalState = fsm.GetState(setuper.AdditionalStatesInTheEnd[i]); last.Add(additionalState); } state.ContactStates(first, last); } fsm.SetState(useArray ? gameStatesOrder[0] : firstGameState); Bootstrap.gameStates = fsm.GetAllStates(); Bootstrap.systems = systemsDictionary; Bootstrap.currentState = fsm.State; }
private void InitializeFSM(GameStateComponent[] setupers, Dictionary <GameStateID, GameState> statesDictionary) { fsm = new FSMProcessor <GameStateID, GameState>(); foreach (var setuper in setupers) { var state = statesDictionary[setuper.ID]; fsm.AddState(setuper.ID, state); SubscribeStateToEvents(state); } }
private void HandleGameStates() { fsm = new FSMProcessor <GameState>("Game", new GameState(false, FindObjectOfType <TestSystem>())); }
void InstallGameStates(out FSMProcessor <EGamestate, GameState> fsm, out EGamestate[] order) { order = useArray ? gameStatesOrder.Select(x => x).ToArray() : new EGamestate[] { firstGameState }; fsm = new FSMProcessor <EGamestate, GameState>(); ProcessWithGameObjects(fsm); }