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(); // } }
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); }