Пример #1
0
    void ApplySettings(GameSettings oldSettings, GameSettings newSettings, bool closeCurrentMenu)
    {
        if (GameSettings.CompareSettings(oldSettings, newSettings))
        {
            goto END;
        }

        oldSettings.Copy(newSettings);

        // NOTE: Applying Settings
        {
            foreach (SwipeMenu[] swipes in swipeMenus.Values)
            {
                foreach (SwipeMenu swipe in swipes)
                {
                    switch (swipe.type)
                    {
                    case SwipeSetting.Resolution:
                    {
                        swipe.LoopAndSetCurrent(i => GameSettings.CompareResolution(Screen.resolutions[i], newSettings.resolution), true);
                    }
                    break;

                    case SwipeSetting.ScreenMode:
                    {
                        swipe.LoopAndSetCurrent(i => newSettings.mode == (FullScreenMode)i, true);
                    }
                    break;
                    }
                }
            }

            if (vsyncToggle.isOn != newSettings.vsync)
            {
                vsyncToggle.isOn = newSettings.vsync;
            }
        }

END:
        if (closeCurrentMenu)
        {
            CloseCurrentMenu();
        }

        // TODO: Open a "Do you want to discard unsaved changes?" pop-up
        // OpenMenu(MenuType.UnsavedChanges, bool closePrevMenu);
        // if (ClickDiscarded())
        // {
        //     tempSettings.Copy(currentSettings);
        //     ApplySettings(tempSettings);
        //     CloseCurrentMenu();
        //     CloseCurrentMenu();
        // }
        // else if (ClickNo())
        // {
        //     CloseCurrentMenu();
        // }
    }
Пример #2
0
    private void Start()
    {
        menus = new Dictionary <MenuType, GameObject>((int)MenuType.Count)
        {
            [MenuType.None] = null
        };
        foreach (MenuInspector menu in gameMenus)
        {
            menus[menu.type] = menu.menu;
        }
        openedMenus = new Stack <MenuType>((int)MenuType.Count);

        vsyncToggle.isOn = QualitySettings.vSyncCount > 0;
        vsyncToggle.onValueChanged.AddListener(enable =>
        {
            tempSettings.vsync         = enable;
            QualitySettings.vSyncCount = enable ? 1 : 0;
        });

        swipeMenus = new Dictionary <MenuType, SwipeMenu[]>((int)MenuType.Count);
        foreach (MenuType type in menus.Keys)
        {
            if (type == MenuType.None)
            {
                swipeMenus[MenuType.None] = new SwipeMenu[0];
                continue;
            }

            swipeMenus[type] = menus[type].GetComponentsInChildren <SwipeMenu>();
            foreach (SwipeMenu swipe in swipeMenus[type])
            {
                InitSwipeMenu(swipe);
            }

            void InitSwipeMenu(SwipeMenu menu)
            {
                switch (menu.type)
                {
                case SwipeSetting.Resolution:
                {
                    menu.InitSwipeMenu(Screen.resolutions, r => r.ToString().FormatCamelCase(),
                                       i => tempSettings.resolution = Screen.resolutions[i], r => GameSettings.CompareResolution(r, Screen.currentResolution));
                }
                break;

                case SwipeSetting.ScreenMode:
                {
                    menu.InitSwipeMenu <FullScreenMode>(GameSettings.fullScreenModeCount, mode => mode.ToString().FormatCamelCase(),
                                                        i => tempSettings.mode = (FullScreenMode)i, mode => mode == Screen.fullScreenMode);
                }
                break;
                }
            }
        }

        // TODO: Have a way to save the currentSettings and defaultSettings when the game restarts or gets played later
        currentSettings.Copy(tempSettings);
        defaultSettings.Copy(tempSettings);
    }