Example #1
0
        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;
        }
Example #2
0
        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);
            }
        }
Example #3
0
 private void HandleGameStates()
 {
     fsm = new FSMProcessor <GameState>("Game", new GameState(false, FindObjectOfType <TestSystem>()));
 }
Example #4
0
 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);
 }