/// <summary> /// Instantiates a new proxy bindable, assuming a bool for type T. /// </summary> private ProxyBindable <bool> InitBoolBindable(string propertyName, bool defaultValue) { var bindable = new ProxyBindable <bool>( () => storage == null ? defaultValue : storage.GetBool(propertyName, defaultValue), (value) => storage.SetBool(propertyName, value) ); allSettings.Add(bindable); return(bindable); }
/// <summary> /// Instantiates a new proxy bindable, assuming a string for type T. /// </summary> private ProxyBindable <string> InitStringBindable(string propertyName, string defaultValue) { var bindable = new ProxyBindable <string>( () => storage == null ? defaultValue : storage.GetString(propertyName, defaultValue), (value) => storage.SetString(propertyName, value) ); allSettings.Add(bindable); return(bindable); }
/// <summary> /// Instantiates a new proxy bindable, assuming an enum for type T. /// </summary> private ProxyBindable <T> InitEnumBindable <T>(string propertyName, T defaultValue) where T : struct { var bindable = new ProxyBindable <T>( () => storage == null ? defaultValue : storage.GetEnum <T>(propertyName, defaultValue), (value) => storage.SetEnum(propertyName, value) ); allSettings.Add(bindable); return(bindable); }
public GameConfiguration() { Settings = new SettingsData(); RulesetMode = InitEnumBindable(nameof(RulesetMode), GameModeType.BeatsStandard); MapsetSort = InitEnumBindable(nameof(MapsetSort), MapsetSortType.Title); RankDisplay = InitEnumBindable(nameof(RankDisplay), RankDisplayType.Local); Username = InitStringBindable(nameof(Username), ""); Password = InitStringBindable(nameof(Password), ""); SaveCredentials = InitBoolBindable(nameof(SaveCredentials), false); LastLoginApi = InitEnumBindable(nameof(LastLoginApi), ApiProviderType.Osu); // General settings SettingsTab generalTab = Settings.AddTabData(new SettingsTab("General", "icon-settings")); { generalTab.AddEntry(new SettingsEntryBool("Prefer unicode", PreferUnicode = InitBoolBindable(nameof(PreferUnicode), false))); generalTab.AddEntry(new SettingsEntryBool("Show messages", DisplayMessages = InitBoolBindable(nameof(DisplayMessages), true))); DisplayMessages.OnNewValue += (display) => { // Automatically disable messages in game if message displaying is false. if (!display) { DisplayMessagesInGame.Value = false; } }; generalTab.AddEntry(new SettingsEntryBool("Show messages in game", DisplayMessagesInGame = InitBoolBindable(nameof(DisplayMessagesInGame), false))); DisplayMessagesInGame.OnNewValue += (display) => { // Turn off this configuration when toggled on but display message itself is turned off. if (display && !DisplayMessages.Value) { DisplayMessagesInGame.Value = false; } }; generalTab.AddEntry(new SettingsEntryBool("Use parallax", UseParallax = InitBoolBindable(nameof(UseParallax), true))); } // Performance settings SettingsTab performanceTab = Settings.AddTabData(new SettingsTab("Performance", "icon-performance")); { performanceTab.AddEntry(new SettingsEntryBool("Show FPS", ShowFps = InitBoolBindable(nameof(ShowFps), false))); performanceTab.AddEntry(new SettingsEntryBool("Use Blur", UseBlurShader = InitBoolBindable(nameof(UseBlurShader), false))); performanceTab.AddEntry(new SettingsEntryEnum <ResolutionType>("Resolution Quality", ResolutionQuality = InitEnumBindable(nameof(ResolutionQuality), ResolutionType.Best))); performanceTab.AddEntry(new SettingsEntryEnum <FramerateType>("Framerate", Framerate = InitEnumBindable(nameof(Framerate), FramerateType._60fps))); } // Gameplay settings SettingsTab gameplayTab = Settings.AddTabData(new SettingsTab("Gameplay", "icon-game")); { gameplayTab.AddEntry(new SettingsEntryBool("Use Storyboard", ShowStoryboard = InitBoolBindable(nameof(ShowStoryboard), false))); gameplayTab.AddEntry(new SettingsEntryBool("Use Video", ShowVideo = InitBoolBindable(nameof(ShowVideo), false))); gameplayTab.AddEntry(new SettingsEntryBool("Use Map Skins", UseBeatmapSkins = InitBoolBindable(nameof(UseBeatmapSkins), false))); gameplayTab.AddEntry(new SettingsEntryFloat("Background Dim", BackgroundDim = InitFloatBindable(nameof(BackgroundDim), 0.5f, 0f, 1f)) { Formatter = "P0" }); } // Sound settings SettingsTab soundTab = Settings.AddTabData(new SettingsTab("Sound", "icon-sound")); { soundTab.AddEntry(new SettingsEntryFloat("Master Volume", MasterVolume = InitFloatBindable(nameof(MasterVolume), 1f, 0f, 1f)) { Formatter = "P0" }); soundTab.AddEntry(new SettingsEntryFloat("Music Volume", MusicVolume = InitFloatBindable(nameof(MusicVolume), 1f, 0f, 1f)) { Formatter = "P0" }); soundTab.AddEntry(new SettingsEntryFloat("Hitsound Volume", HitsoundVolume = InitFloatBindable(nameof(HitsoundVolume), 1f, 0f, 1f)) { Formatter = "P0" }); soundTab.AddEntry(new SettingsEntryFloat("Effect Volume", EffectVolume = InitFloatBindable(nameof(EffectVolume), 1f, 0f, 1f)) { Formatter = "P0" }); soundTab.AddEntry(new SettingsEntryInt("Global Offset", GlobalOffset = InitIntBindable(nameof(GlobalOffset), 0, -100, 100))); soundTab.AddEntry(new SettingsEntryBool("Use Map Hitsounds", UseBeatmapHitsounds = InitBoolBindable(nameof(UseBeatmapHitsounds), true))); soundTab.AddEntry(new SettingsEntryBool("Button hover sound", UseButtonHoverSound = InitBoolBindable(nameof(UseButtonHoverSound), true))); } // Other settings SettingsTab otherTab = Settings.AddTabData(new SettingsTab("Other", "icon-misc")); { otherTab.AddEntry(new SettingsEntryEnum <NotificationType>("Persistent notification level", PersistNotificationLevel = InitEnumBindable(nameof(NotificationType), NotificationType.Warning))); otherTab.AddEntry(new SettingsEntryEnum <LogType>("Log to notification level", LogToNotificationLevel = InitEnumBindable(nameof(LogType), LogType.Warning))); } // Version settings SettingsTab versionTab = Settings.AddTabData(new SettingsTab("Version", "icon-version")); { versionTab.AddEntry(new SettingsEntryAction($"Game version ({App.GameVersion})", () => { UnityEngine.Application.OpenURL(App.GameRepository); })); versionTab.AddEntry(new SettingsEntryAction($"Framework version ({App.FrameworkVersion})", () => { UnityEngine.Application.OpenURL(App.FrameworkRepository); })); } // Trigger change for all configurations on load. OnLoad += delegate { foreach (var entry in allSettings) { entry.Trigger(); } }; }