Ejemplo n.º 1
0
        public MainMenuState()
        {
            files = Enumerable.Range(0, 3).Select((i) => new FileSubstate(i)).ToArray();

            _selector = new MenuSelector();
            _selector.Play("enabledRight");

            _lastState = _menuState;

            UpdateEntities = false;

            _state = new StateMachineBuilder()
                     .State("Normal")
                     .Enter((state) =>
            {
                SetLabels();
                StateChanged();
            })
                     .Update((state, t) =>
            {
                if (!_inSubstate && KeyInput.JustPressedRebindableKey(KeyFunctions.Cancel))
                {
                    SoundManager.PlayPitchedSoundEffect("pause_sound", -0.1f);
                    ChangeStateEvent(AnodyneGame.GameState.TitleScreen);
                }
                else if (!_inSubstate)
                {
                    BrowseInput();
                }
                else
                {
                    _substate.HandleInput();
                }

                if (_lastState != _menuState)
                {
                    StateChanged();
                }
            })
                     .Condition(() => _substate.Exit, (state) =>
            {
                if (_substate is FileSubstate s)
                {
                    if (s.LoadedSave)
                    {
                        SoundManager.PlaySoundEffect("menu_select");
                        isNewSave = s.NewSave;
                        _state.ChangeState("FadeOut");

                        return;
                    }
                    else if (s.RefreshSaves)
                    {
                        files = Enumerable.Range(0, 3).Select((i) => new FileSubstate(i)).ToArray();
                    }
                }

                _inSubstate    = false;
                _substate.Exit = false;
                _selector.Play("enabledRight");
            })
                     .End()
                     .State("FadeOut")
                     .Update((state, t) => GlobalState.black_overlay.ChangeAlpha(0.72f))
                     .Condition(() => GlobalState.black_overlay.alpha == 1, (state) => ChangeStateEvent(isNewSave ? AnodyneGame.GameState.Intro : AnodyneGame.GameState.Game))
                     .End()
                     .Build();

            _state.ChangeState("Normal");
        }