public void UpdateGameLogic()
        {
            // might want to add something in here to wait for saves/loads that are requested from menus

            foreach (var button in _activeMenuPage.Buttons)
            {
                button.UpdateOwnLogic();
            }

            if (_activeMenuPage.DialogOpen)
            {
                foreach (var button in _activeMenuPage.CurrentDialog.Buttons)
                {
                    button.UpdateOwnLogic();
                }
            }

            if (_waitForSave)
            {
                return;
            }

            if (_switchPages)
            {
                if (!_activeMenuPage.DoneFading())
                {
                    return;
                }

                if (_activeMenuPage.Name == _switchPageArgs.Page)
                {
                    _switchPages = false;
                    _activeMenuPage.EnterMenu(_switchPageArgs.PreviousPage, DataHelper.PreferenceData);

                    if (_activeMenuPage.Name == MenuPageNames.FileSelect)
                    {
                        if (_switchPageArgs.EnterFromExit != null)
                        {
                            ((FileSelectMenuPage)_activeMenuPage).EnterFromExit(_switchPageArgs.EnterFromExit.Value);
                        }
                    }

                    return;
                }

                _activeMenuPage = _menuPages[_switchPageArgs.Page];

                foreach (var button in _activeMenuPage.Buttons)
                {
                    button.FadeIn();
                }

                return; // i think we want to do this
            }

            if (_inputCounter < INPUT_DELAY)
            {
                _inputCounter++; // only reset this when we actually do something
                return;
            }

            if (_requestKeybindChange)
            {
                // this will update the preference data if a key is redbound
                var changed = _inputHandler.RequestSingleKeyRebind(_functionToChange);

                if (changed)
                {
                    ((OptionsMenuPage)_menuPages[MenuPageNames.Options]).CloseKeybindDialog();
                    ((OptionsMenuPage)_menuPages[MenuPageNames.Options]).UpdateWithPreferenceData(DataHelper.PreferenceData);
                    _requestKeybindChange = false;
                }
            }
            else if (_activeMenuPage.Name == MenuPageNames.Title)
            {
                if (_inputHandler.RequestSingleKeypress())
                {
                    // this should cause the switch page event to go
                    _activeMenuPage.SelectButton();
                }
            }
            else
            {
                if (_inputHandler.IsFunctionReady(ControlFunctions.Confirm))
                {
                    _activeMenuPage.SelectButton();
                    _inputCounter = 0;
                    return;
                }

                if (_inputHandler.IsFunctionReady(ControlFunctions.Back))
                {
                    _activeMenuPage.ReturnToPreviousMenu();
                    _inputCounter = 0;
                    return;
                }

                if (_inputHandler.IsFunctionReady(ControlFunctions.Menu))
                {
                    if (_activeMenuPage == _menuPages[MenuPageNames.ExitMenu])
                    {
                        _activeMenuPage.ReturnToPreviousMenu();
                        _inputCounter = 0;
                    }

                    return;
                }

                var direction = _inputHandler.GetLongestDirection();

                if (direction != null)
                {
                    _activeMenuPage.MoveCursor(direction.Value);
                    _inputCounter = 0;
                }
            }
        }