Esempio n. 1
0
        static MetaGame()
        {
            var mainMenuState = new MainMenuState(StateMachine, MainGame.Instance);

            StateMachine.States.Add(mainMenuState);

            var mainGameState = new MainGameState(StateMachine, MainGame.Instance);

            StateMachine.States.Add(mainGameState);

            if (Program.SkipIntro)
            {
                StateMachine.AddTransition(new Transition <GameState>("start", null, mainMenuState));
            }
            else
            {
                var borneGamesLogoState = new BorneGamesLogoState(StateMachine, MainGame.Instance);
                var titleState          = new TitleState(StateMachine, MainGame.Instance);
                StateMachine.States.Add(borneGamesLogoState);
                StateMachine.States.Add(titleState);

                StateMachine.AddTransition(new Transition <GameState>("start", null, borneGamesLogoState));
                StateMachine.AddTransition(new Transition <GameState>("next", borneGamesLogoState, titleState,
                                                                      Mode.PushPop));
                StateMachine.AddTransition(new Transition <GameState>("next", titleState, mainMenuState, Mode.PushPop));
            }

            StateMachine.AddTransition(new Transition <GameState>("start", mainMenuState, mainGameState, Mode.PushPop));

            StateMachine.AddTransition(new Transition <GameState>("exit", mainMenuState, null));
        }
Esempio n. 2
0
        // Start is called before the first frame update
        private void Start()
        {
            m_gameStateMachine = new GameStateMachine();

            var splash   = new SplashState(this, UIController.Instance.SplashPanel);
            var mainMenu = new MainMenuState(this, UIController.Instance.MainMenuPanel,
                                             UIController.Instance.MainMenuPlayButton);
            var tutorial = new TutorialState(this, UIController.Instance.TutorialPanel,
                                             UIController.Instance.TutorialDoneButton);
            var gameplay = new GamePlayState(this, UIController.Instance.GamePlayPanel);
            var win      = new WinState(this, UIController.Instance.LevelCompletePanel,
                                        UIController.Instance.WinContinueButton);
            var fail = new FailState(this, UIController.Instance.LevelFailPanel,
                                     UIController.Instance.FailContinueButton);

            //Adding Transitions
            At(splash, mainMenu, CanShowMainMenu());
            At(mainMenu, tutorial, CanPlayTutorial());
            At(mainMenu, gameplay, CanPlayGame());
            At(tutorial, gameplay, () => tutorial.HasTutorialFinished);
            At(gameplay, win, GameToWin());
            At(gameplay, fail, GameToFail());
            At(win, mainMenu, WinToMainMenu());



            void At(IState from, IState to, Func <bool> condition) =>
            m_gameStateMachine.AddTransition(from, to, condition);


            //Adding Conditions for Transitions
            Func <bool> CanShowMainMenu() => () =>
            splash.HasSplashEnded;
            Func <bool> CanPlayGame() => () =>
            mainMenu.HasPressedPlay && PlayerPrefs.GetInt(GameConstants.TutorialCompleted, 0) == 1;
            Func <bool> CanPlayTutorial() => () =>
            mainMenu.HasPressedPlay && PlayerPrefs.GetInt(GameConstants.TutorialCompleted, 0) == 0;
            Func <bool> GameToWin() => () => gameplay.HasWon;
            Func <bool> GameToFail() => () => gameplay.HasLost;
            Func <bool> WinToMainMenu() => () => win.HasPressedContinue;


            //SetDefaultState
            m_gameStateMachine.SetState(splash);
        }