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 HandleSharedStates(GameStateComponent[] setupers) { foreach (var setuper in setupers.Where(x => x.UseAdditionalStates)) { var state = fsm.GetState(setuper.ID); 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.JoinStates(first, last); } }