Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        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();
                }
            };
        }