2020-12-30 13:29:51 +08:00
|
|
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
2019-01-25 18:17:48 +08:00
|
|
|
// See the LICENCE file in the repository root for full licence text.
|
2018-04-13 17:19:50 +08:00
|
|
|
|
2020-11-11 11:19:01 +08:00
|
|
|
using System;
|
2020-11-11 11:54:39 +08:00
|
|
|
using System.Diagnostics;
|
2020-03-05 12:18:42 +08:00
|
|
|
using osu.Framework.Bindables;
|
2018-04-13 17:19:50 +08:00
|
|
|
using osu.Framework.Configuration;
|
2018-05-02 18:37:47 +08:00
|
|
|
using osu.Framework.Configuration.Tracking;
|
2019-01-04 13:18:29 +08:00
|
|
|
using osu.Framework.Extensions;
|
2018-04-13 17:19:50 +08:00
|
|
|
using osu.Framework.Platform;
|
2020-09-04 19:34:26 +08:00
|
|
|
using osu.Framework.Testing;
|
2020-08-16 09:34:28 +08:00
|
|
|
using osu.Game.Input;
|
2020-11-11 11:54:39 +08:00
|
|
|
using osu.Game.Input.Bindings;
|
2018-04-13 17:19:50 +08:00
|
|
|
using osu.Game.Overlays;
|
2018-06-08 02:17:12 +08:00
|
|
|
using osu.Game.Rulesets.Scoring;
|
2018-04-13 17:19:50 +08:00
|
|
|
using osu.Game.Screens.Select;
|
2019-08-23 19:15:38 +08:00
|
|
|
using osu.Game.Screens.Select.Filter;
|
2018-04-13 17:19:50 +08:00
|
|
|
|
|
|
|
namespace osu.Game.Configuration
|
|
|
|
{
|
2020-09-04 19:34:26 +08:00
|
|
|
[ExcludeFromDynamicCompile]
|
2018-04-13 17:19:50 +08:00
|
|
|
public class OsuConfigManager : IniConfigManager<OsuSetting>
|
|
|
|
{
|
|
|
|
protected override void InitialiseDefaults()
|
|
|
|
{
|
|
|
|
// UI/selection defaults
|
|
|
|
Set(OsuSetting.Ruleset, 0, 0, int.MaxValue);
|
2019-08-29 15:38:39 +08:00
|
|
|
Set(OsuSetting.Skin, 0, -1, int.MaxValue);
|
2018-04-13 17:19:50 +08:00
|
|
|
|
2020-02-12 18:52:47 +08:00
|
|
|
Set(OsuSetting.BeatmapDetailTab, PlayBeatmapDetailArea.TabType.Details);
|
2020-09-16 12:33:52 +08:00
|
|
|
Set(OsuSetting.BeatmapDetailModsFilter, false);
|
2018-04-13 17:19:50 +08:00
|
|
|
|
|
|
|
Set(OsuSetting.ShowConvertedBeatmaps, true);
|
|
|
|
Set(OsuSetting.DisplayStarsMinimum, 0.0, 0, 10, 0.1);
|
2020-01-24 18:12:56 +08:00
|
|
|
Set(OsuSetting.DisplayStarsMaximum, 10.1, 0, 10.1, 0.1);
|
2018-04-13 17:19:50 +08:00
|
|
|
|
2019-08-24 16:34:54 +08:00
|
|
|
Set(OsuSetting.SongSelectGroupingMode, GroupMode.All);
|
|
|
|
Set(OsuSetting.SongSelectSortingMode, SortMode.Title);
|
2019-08-23 19:15:38 +08:00
|
|
|
|
2018-04-13 17:19:50 +08:00
|
|
|
Set(OsuSetting.RandomSelectAlgorithm, RandomSelectAlgorithm.RandomPermutation);
|
|
|
|
|
2019-09-03 06:50:52 +08:00
|
|
|
Set(OsuSetting.ChatDisplayHeight, ChatOverlay.DEFAULT_HEIGHT, 0.2f, 1f);
|
2018-04-13 17:19:50 +08:00
|
|
|
|
|
|
|
// Online settings
|
|
|
|
Set(OsuSetting.Username, string.Empty);
|
|
|
|
Set(OsuSetting.Token, string.Empty);
|
|
|
|
|
2020-10-28 18:03:01 +08:00
|
|
|
Set(OsuSetting.AutomaticallyDownloadWhenSpectating, false);
|
|
|
|
|
2019-02-22 16:51:39 +08:00
|
|
|
Set(OsuSetting.SavePassword, false).ValueChanged += enabled =>
|
2018-04-13 17:19:50 +08:00
|
|
|
{
|
2019-02-22 16:51:39 +08:00
|
|
|
if (enabled.NewValue) Set(OsuSetting.SaveUsername, true);
|
2018-04-13 17:19:50 +08:00
|
|
|
};
|
|
|
|
|
2019-02-22 16:51:39 +08:00
|
|
|
Set(OsuSetting.SaveUsername, true).ValueChanged += enabled =>
|
2018-04-13 17:19:50 +08:00
|
|
|
{
|
2019-02-22 16:51:39 +08:00
|
|
|
if (!enabled.NewValue) Set(OsuSetting.SavePassword, false);
|
2018-04-13 17:19:50 +08:00
|
|
|
};
|
|
|
|
|
2018-11-02 04:52:07 +08:00
|
|
|
Set(OsuSetting.ExternalLinkWarning, true);
|
2020-04-11 19:08:16 +08:00
|
|
|
Set(OsuSetting.PreferNoVideo, false);
|
2018-10-23 04:57:37 +08:00
|
|
|
|
2018-04-13 17:19:50 +08:00
|
|
|
// Audio
|
|
|
|
Set(OsuSetting.VolumeInactive, 0.25, 0, 1, 0.01);
|
|
|
|
|
|
|
|
Set(OsuSetting.MenuVoice, true);
|
|
|
|
Set(OsuSetting.MenuMusic, true);
|
|
|
|
|
|
|
|
Set(OsuSetting.AudioOffset, 0, -500.0, 500.0, 1);
|
|
|
|
|
|
|
|
// Input
|
2019-09-03 06:28:51 +08:00
|
|
|
Set(OsuSetting.MenuCursorSize, 1.0f, 0.5f, 2f, 0.01f);
|
|
|
|
Set(OsuSetting.GameplayCursorSize, 1.0f, 0.1f, 2f, 0.01f);
|
2018-04-13 17:19:50 +08:00
|
|
|
Set(OsuSetting.AutoCursorSize, false);
|
|
|
|
|
|
|
|
Set(OsuSetting.MouseDisableButtons, false);
|
|
|
|
Set(OsuSetting.MouseDisableWheel, false);
|
2020-10-06 20:09:35 +08:00
|
|
|
Set(OsuSetting.ConfineMouseMode, OsuConfineMouseMode.DuringGameplay);
|
2018-04-13 17:19:50 +08:00
|
|
|
|
|
|
|
// Graphics
|
|
|
|
Set(OsuSetting.ShowFpsDisplay, false);
|
|
|
|
|
|
|
|
Set(OsuSetting.ShowStoryboard, true);
|
2018-04-25 15:15:23 +08:00
|
|
|
Set(OsuSetting.BeatmapSkins, true);
|
|
|
|
Set(OsuSetting.BeatmapHitsounds, true);
|
|
|
|
|
2018-04-13 17:19:50 +08:00
|
|
|
Set(OsuSetting.CursorRotation, true);
|
|
|
|
|
|
|
|
Set(OsuSetting.MenuParallax, true);
|
|
|
|
|
|
|
|
// Gameplay
|
2020-02-08 13:03:33 +08:00
|
|
|
Set(OsuSetting.DimLevel, 0.8, 0, 1, 0.01);
|
2018-04-13 17:19:50 +08:00
|
|
|
Set(OsuSetting.BlurLevel, 0, 0, 1, 0.01);
|
2019-12-10 20:10:35 +08:00
|
|
|
Set(OsuSetting.LightenDuringBreaks, true);
|
2018-04-13 17:19:50 +08:00
|
|
|
|
2019-09-18 01:16:57 +08:00
|
|
|
Set(OsuSetting.HitLighting, true);
|
2018-04-13 17:19:50 +08:00
|
|
|
|
2020-10-20 13:19:15 +08:00
|
|
|
Set(OsuSetting.HUDVisibilityMode, HUDVisibilityMode.Always);
|
2019-07-05 14:52:44 +08:00
|
|
|
Set(OsuSetting.ShowProgressGraph, true);
|
2019-07-07 04:30:30 +08:00
|
|
|
Set(OsuSetting.ShowHealthDisplayWhenCantFail, true);
|
2020-03-30 18:59:39 +08:00
|
|
|
Set(OsuSetting.FadePlayfieldWhenHealthLow, true);
|
2018-04-13 17:19:50 +08:00
|
|
|
Set(OsuSetting.KeyOverlay, false);
|
2020-04-10 00:12:15 +08:00
|
|
|
Set(OsuSetting.PositionalHitSounds, true);
|
2020-07-14 19:11:54 +08:00
|
|
|
Set(OsuSetting.AlwaysPlayFirstComboBreak, true);
|
2019-08-20 03:04:27 +08:00
|
|
|
Set(OsuSetting.ScoreMeter, ScoreMeterType.HitErrorBoth);
|
2018-04-13 17:19:50 +08:00
|
|
|
|
|
|
|
Set(OsuSetting.FloatingComments, false);
|
|
|
|
|
2018-06-08 02:17:12 +08:00
|
|
|
Set(OsuSetting.ScoreDisplayMode, ScoringMode.Standardised);
|
|
|
|
|
2018-04-25 16:15:53 +08:00
|
|
|
Set(OsuSetting.IncreaseFirstObjectVisibility, true);
|
2020-06-30 19:12:33 +08:00
|
|
|
Set(OsuSetting.GameplayDisableWinKey, true);
|
2018-04-25 16:15:53 +08:00
|
|
|
|
2018-04-13 17:19:50 +08:00
|
|
|
// Update
|
|
|
|
Set(OsuSetting.ReleaseStream, ReleaseStream.Lazer);
|
|
|
|
|
|
|
|
Set(OsuSetting.Version, string.Empty);
|
|
|
|
|
|
|
|
Set(OsuSetting.ScreenshotFormat, ScreenshotFormat.Jpg);
|
2018-04-13 20:13:09 +08:00
|
|
|
Set(OsuSetting.ScreenshotCaptureMenuCursor, false);
|
2018-04-13 18:50:37 +08:00
|
|
|
|
2018-04-18 18:26:54 +08:00
|
|
|
Set(OsuSetting.SongSelectRightMouseScroll, false);
|
2019-01-04 12:29:37 +08:00
|
|
|
|
|
|
|
Set(OsuSetting.Scaling, ScalingMode.Off);
|
|
|
|
|
|
|
|
Set(OsuSetting.ScalingSizeX, 0.8f, 0.2f, 1f);
|
|
|
|
Set(OsuSetting.ScalingSizeY, 0.8f, 0.2f, 1f);
|
|
|
|
|
|
|
|
Set(OsuSetting.ScalingPositionX, 0.5f, 0f, 1f);
|
|
|
|
Set(OsuSetting.ScalingPositionY, 0.5f, 0f, 1f);
|
2019-01-09 18:01:33 +08:00
|
|
|
|
|
|
|
Set(OsuSetting.UIScale, 1f, 0.8f, 1.6f, 0.01f);
|
2019-08-09 19:05:28 +08:00
|
|
|
|
2019-10-02 12:26:46 +08:00
|
|
|
Set(OsuSetting.UIHoldActivationDelay, 200f, 0f, 500f, 50f);
|
2019-09-19 13:04:51 +08:00
|
|
|
|
2019-08-09 19:05:28 +08:00
|
|
|
Set(OsuSetting.IntroSequence, IntroSequence.Triangles);
|
2019-09-24 17:42:06 +08:00
|
|
|
|
2019-11-22 01:38:31 +08:00
|
|
|
Set(OsuSetting.MenuBackgroundSource, BackgroundSource.Skin);
|
2020-10-30 22:54:10 +08:00
|
|
|
Set(OsuSetting.SeasonalBackgroundMode, SeasonalBackgroundMode.Sometimes);
|
2020-11-03 15:01:14 +08:00
|
|
|
|
2021-01-03 17:46:25 +08:00
|
|
|
Set(OsuSetting.DiscordRichPresence, DiscordRichPresenceMode.Full);
|
2020-12-30 13:29:51 +08:00
|
|
|
|
2020-11-03 15:01:14 +08:00
|
|
|
Set(OsuSetting.EditorWaveformOpacity, 1f);
|
2018-04-13 17:19:50 +08:00
|
|
|
}
|
|
|
|
|
2019-01-04 13:18:29 +08:00
|
|
|
public OsuConfigManager(Storage storage)
|
|
|
|
: base(storage)
|
2018-04-13 17:19:50 +08:00
|
|
|
{
|
2020-03-05 12:18:42 +08:00
|
|
|
Migrate();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void Migrate()
|
|
|
|
{
|
|
|
|
// arrives as 2020.123.0
|
|
|
|
var rawVersion = Get<string>(OsuSetting.Version);
|
|
|
|
|
|
|
|
if (rawVersion.Length < 6)
|
|
|
|
return;
|
|
|
|
|
|
|
|
var pieces = rawVersion.Split('.');
|
|
|
|
|
2020-03-05 14:36:36 +08:00
|
|
|
// on a fresh install or when coming from a non-release build, execution will end here.
|
|
|
|
// we don't want to run migrations in such cases.
|
2020-03-05 12:18:42 +08:00
|
|
|
if (!int.TryParse(pieces[0], out int year)) return;
|
|
|
|
if (!int.TryParse(pieces[1], out int monthDay)) return;
|
|
|
|
|
|
|
|
int combined = (year * 10000) + monthDay;
|
|
|
|
|
|
|
|
if (combined < 20200305)
|
|
|
|
{
|
|
|
|
// the maximum value of this setting was changed.
|
|
|
|
// if we don't manually increase this, it causes song select to filter out beatmaps the user expects to see.
|
|
|
|
var maxStars = (BindableDouble)GetOriginalBindable<double>(OsuSetting.DisplayStarsMaximum);
|
|
|
|
|
|
|
|
if (maxStars.Value == 10)
|
|
|
|
maxStars.Value = maxStars.MaxValue;
|
|
|
|
}
|
2018-04-13 17:19:50 +08:00
|
|
|
}
|
2018-05-02 18:37:47 +08:00
|
|
|
|
2020-11-11 11:54:39 +08:00
|
|
|
public override TrackedSettings CreateTrackedSettings()
|
2019-01-04 14:34:32 +08:00
|
|
|
{
|
2020-11-11 11:54:39 +08:00
|
|
|
// these need to be assigned in normal game startup scenarios.
|
|
|
|
Debug.Assert(LookupKeyBindings != null);
|
|
|
|
Debug.Assert(LookupSkinName != null);
|
|
|
|
|
|
|
|
return new TrackedSettings
|
2020-11-11 11:19:01 +08:00
|
|
|
{
|
2020-11-11 11:54:39 +08:00
|
|
|
new TrackedSetting<bool>(OsuSetting.MouseDisableButtons, v => new SettingDescription(!v, "gameplay mouse buttons", v ? "disabled" : "enabled", LookupKeyBindings(GlobalAction.ToggleGameplayMouseButtons))),
|
2020-11-30 09:59:02 +08:00
|
|
|
new TrackedSetting<HUDVisibilityMode>(OsuSetting.HUDVisibilityMode, m => new SettingDescription(m, "HUD Visibility", m.GetDescription(), $"cycle: {LookupKeyBindings(GlobalAction.ToggleInGameInterface)} quick view: {LookupKeyBindings(GlobalAction.HoldForHUD)}")),
|
2020-11-11 11:54:39 +08:00
|
|
|
new TrackedSetting<ScalingMode>(OsuSetting.Scaling, m => new SettingDescription(m, "scaling", m.GetDescription())),
|
|
|
|
new TrackedSetting<int>(OsuSetting.Skin, m =>
|
|
|
|
{
|
|
|
|
string skinName = LookupSkinName(m) ?? string.Empty;
|
2020-11-11 12:05:03 +08:00
|
|
|
return new SettingDescription(skinName, "skin", skinName, $"random: {LookupKeyBindings(GlobalAction.RandomSkin)}");
|
2020-11-11 11:54:39 +08:00
|
|
|
})
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
public Func<int, string> LookupSkinName { private get; set; }
|
2020-11-11 11:19:01 +08:00
|
|
|
|
2020-11-24 12:43:46 +08:00
|
|
|
public Func<GlobalAction, string> LookupKeyBindings { get; set; }
|
2018-04-13 17:19:50 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
public enum OsuSetting
|
|
|
|
{
|
|
|
|
Ruleset,
|
|
|
|
Token,
|
|
|
|
MenuCursorSize,
|
|
|
|
GameplayCursorSize,
|
|
|
|
AutoCursorSize,
|
|
|
|
DimLevel,
|
|
|
|
BlurLevel,
|
2019-12-10 20:10:35 +08:00
|
|
|
LightenDuringBreaks,
|
2018-04-13 17:19:50 +08:00
|
|
|
ShowStoryboard,
|
|
|
|
KeyOverlay,
|
2020-04-10 00:12:15 +08:00
|
|
|
PositionalHitSounds,
|
2020-07-14 19:11:54 +08:00
|
|
|
AlwaysPlayFirstComboBreak,
|
2019-08-18 20:01:04 +08:00
|
|
|
ScoreMeter,
|
2018-04-13 17:19:50 +08:00
|
|
|
FloatingComments,
|
2020-07-22 11:41:06 +08:00
|
|
|
HUDVisibilityMode,
|
2019-07-05 14:52:44 +08:00
|
|
|
ShowProgressGraph,
|
2019-07-07 04:30:30 +08:00
|
|
|
ShowHealthDisplayWhenCantFail,
|
2020-03-30 18:59:39 +08:00
|
|
|
FadePlayfieldWhenHealthLow,
|
2018-04-13 17:19:50 +08:00
|
|
|
MouseDisableButtons,
|
|
|
|
MouseDisableWheel,
|
2020-08-16 09:34:28 +08:00
|
|
|
ConfineMouseMode,
|
2018-04-13 17:19:50 +08:00
|
|
|
AudioOffset,
|
|
|
|
VolumeInactive,
|
|
|
|
MenuMusic,
|
|
|
|
MenuVoice,
|
|
|
|
CursorRotation,
|
|
|
|
MenuParallax,
|
|
|
|
BeatmapDetailTab,
|
2020-09-16 12:33:52 +08:00
|
|
|
BeatmapDetailModsFilter,
|
2018-04-13 17:19:50 +08:00
|
|
|
Username,
|
|
|
|
ReleaseStream,
|
|
|
|
SavePassword,
|
|
|
|
SaveUsername,
|
|
|
|
DisplayStarsMinimum,
|
|
|
|
DisplayStarsMaximum,
|
2019-08-24 16:34:54 +08:00
|
|
|
SongSelectGroupingMode,
|
|
|
|
SongSelectSortingMode,
|
2018-04-13 17:19:50 +08:00
|
|
|
RandomSelectAlgorithm,
|
|
|
|
ShowFpsDisplay,
|
|
|
|
ChatDisplayHeight,
|
|
|
|
Version,
|
|
|
|
ShowConvertedBeatmaps,
|
|
|
|
Skin,
|
2018-04-13 18:50:37 +08:00
|
|
|
ScreenshotFormat,
|
2018-04-18 17:10:40 +08:00
|
|
|
ScreenshotCaptureMenuCursor,
|
2018-04-20 23:17:57 +08:00
|
|
|
SongSelectRightMouseScroll,
|
2018-04-25 15:15:23 +08:00
|
|
|
BeatmapSkins,
|
2018-04-25 16:15:53 +08:00
|
|
|
BeatmapHitsounds,
|
2018-06-08 02:17:12 +08:00
|
|
|
IncreaseFirstObjectVisibility,
|
2018-10-23 04:57:37 +08:00
|
|
|
ScoreDisplayMode,
|
2019-01-04 12:29:37 +08:00
|
|
|
ExternalLinkWarning,
|
2020-04-11 19:08:16 +08:00
|
|
|
PreferNoVideo,
|
2019-01-04 12:29:37 +08:00
|
|
|
Scaling,
|
|
|
|
ScalingPositionX,
|
|
|
|
ScalingPositionY,
|
|
|
|
ScalingSizeX,
|
2019-01-09 18:01:33 +08:00
|
|
|
ScalingSizeY,
|
2019-08-09 19:05:28 +08:00
|
|
|
UIScale,
|
2019-09-19 13:04:51 +08:00
|
|
|
IntroSequence,
|
2019-09-19 19:05:14 +08:00
|
|
|
UIHoldActivationDelay,
|
2019-09-24 17:42:06 +08:00
|
|
|
HitLighting,
|
2020-06-30 19:12:33 +08:00
|
|
|
MenuBackgroundSource,
|
2020-08-02 01:44:30 +08:00
|
|
|
GameplayDisableWinKey,
|
2020-10-31 15:22:49 +08:00
|
|
|
SeasonalBackgroundMode,
|
2020-11-03 15:01:14 +08:00
|
|
|
EditorWaveformOpacity,
|
2020-12-30 13:29:51 +08:00
|
|
|
DiscordRichPresence,
|
2020-10-28 18:03:01 +08:00
|
|
|
AutomaticallyDownloadWhenSpectating,
|
2018-04-13 17:19:50 +08:00
|
|
|
}
|
|
|
|
}
|