diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneArgonJudgementCounter.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneArgonJudgementCounter.cs index e5886aa607..3c7396edb4 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneArgonJudgementCounter.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneArgonJudgementCounter.cs @@ -91,7 +91,7 @@ namespace osu.Game.Tests.Visual.Gameplay AddRepeatStep("Add judgement", () => applyOneJudgement(HitResult.LargeTickHit), 2); AddAssert("Check value added whilst hidden", () => hiddenCount() == 2); - AddStep("Show all judgements", () => counterDisplay.Mode.Value = ArgonJudgementCounterDisplay.DisplayMode.All); + AddStep("Show all judgements", () => counterDisplay.Mode.Value = JudgementCounterDisplay.DisplayMode.All); } [Test] @@ -156,7 +156,7 @@ namespace osu.Game.Tests.Visual.Gameplay AddStep("create counter", () => Child = counterDisplay = new TestArgonJudgementCounterDisplay()); AddStep("Set max judgement to hide itself", () => counterDisplay.ShowMaxJudgement.Value = false); - AddStep("Show all judgements", () => counterDisplay.Mode.Value = ArgonJudgementCounterDisplay.DisplayMode.All); + AddStep("Show all judgements", () => counterDisplay.Mode.Value = JudgementCounterDisplay.DisplayMode.All); AddWaitStep("wait some", 2); AddAssert("Assert max judgement hidden", () => counterDisplay.CounterFlow.ChildrenOfType().First().Alpha == 0); } @@ -165,7 +165,7 @@ namespace osu.Game.Tests.Visual.Gameplay public void TestNoDuplicates() { AddStep("create counter", () => Child = counterDisplay = new TestArgonJudgementCounterDisplay()); - AddStep("Show all judgements", () => counterDisplay.Mode.Value = ArgonJudgementCounterDisplay.DisplayMode.All); + AddStep("Show all judgements", () => counterDisplay.Mode.Value = JudgementCounterDisplay.DisplayMode.All); AddAssert("Check no duplicates", () => counterDisplay.CounterFlow.ChildrenOfType().Count(), () => Is.EqualTo(counterDisplay.CounterFlow.ChildrenOfType().Select(c => c.Result.DisplayName).Distinct().Count())); @@ -176,11 +176,11 @@ namespace osu.Game.Tests.Visual.Gameplay { AddStep("create counter", () => Child = counterDisplay = new TestArgonJudgementCounterDisplay()); - AddStep("Show basic judgements", () => counterDisplay.Mode.Value = ArgonJudgementCounterDisplay.DisplayMode.Simple); + AddStep("Show basic judgements", () => counterDisplay.Mode.Value = JudgementCounterDisplay.DisplayMode.Simple); AddWaitStep("wait some", 2); AddAssert("Check only basic", () => counterDisplay.CounterFlow.ChildrenOfType().Last().Alpha == 0); - AddStep("Show normal judgements", () => counterDisplay.Mode.Value = ArgonJudgementCounterDisplay.DisplayMode.Normal); - AddStep("Show all judgements", () => counterDisplay.Mode.Value = ArgonJudgementCounterDisplay.DisplayMode.All); + AddStep("Show normal judgements", () => counterDisplay.Mode.Value = JudgementCounterDisplay.DisplayMode.Normal); + AddStep("Show all judgements", () => counterDisplay.Mode.Value = JudgementCounterDisplay.DisplayMode.All); AddWaitStep("wait some", 2); AddAssert("Check all visible", () => counterDisplay.CounterFlow.ChildrenOfType().Last().Alpha == 1); AddToggleStep("toggle wireframe display", t => counterDisplay.WireframeOpacity.Value = t ? 0.3f : 0); diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneJudgementCounter.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneJudgementCounter.cs index 894f08e5b2..18713459cf 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneJudgementCounter.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneJudgementCounter.cs @@ -73,6 +73,15 @@ namespace osu.Game.Tests.Visual.Gameplay iteration++; } + [Test] + public void TestDisplayModes() + { + AddStep("create counter", () => Child = counterDisplay = new TestJudgementCounterDisplay()); + + foreach (JudgementCounterDisplay.DisplayMode mode in Enum.GetValues()) + AddStep($"Change mode to {mode}", () => counterDisplay.Mode.Value = mode); + } + [Test] public void TestAddJudgementsToCounters() { diff --git a/osu.Game/Localisation/HUD/JudgementCounterDisplayStrings.cs b/osu.Game/Localisation/HUD/JudgementCounterDisplayStrings.cs index b1c756e48e..6e2e877cc4 100644 --- a/osu.Game/Localisation/HUD/JudgementCounterDisplayStrings.cs +++ b/osu.Game/Localisation/HUD/JudgementCounterDisplayStrings.cs @@ -12,38 +12,43 @@ namespace osu.Game.Localisation.HUD /// /// "Display mode" /// - public static LocalisableString JudgementDisplayMode => new TranslatableString(getKey(@"judgement_display_mode"), "Display mode"); + public static LocalisableString JudgementDisplayMode => new TranslatableString(getKey(@"judgement_display_mode"), @"Display mode"); /// /// "Counter direction" /// - public static LocalisableString FlowDirection => new TranslatableString(getKey(@"flow_direction"), "Counter direction"); + public static LocalisableString FlowDirection => new TranslatableString(getKey(@"flow_direction"), @"Counter direction"); /// /// "Show judgement names" /// - public static LocalisableString ShowJudgementNames => new TranslatableString(getKey(@"show_judgement_names"), "Show judgement names"); + public static LocalisableString ShowJudgementNames => new TranslatableString(getKey(@"show_judgement_names"), @"Show judgement names"); /// /// "Show max judgement" /// - public static LocalisableString ShowMaxJudgement => new TranslatableString(getKey(@"show_max_judgement"), "Show max judgement"); + public static LocalisableString ShowMaxJudgement => new TranslatableString(getKey(@"show_max_judgement"), @"Show max judgement"); /// /// "Simple" /// - public static LocalisableString JudgementDisplayModeSimple => new TranslatableString(getKey(@"judgement_display_mode_simple"), "Simple"); + public static LocalisableString JudgementDisplayModeSimple => new TranslatableString(getKey(@"judgement_display_mode_simple"), @"Simple"); + + /// + /// "Misses only" + /// + public static LocalisableString JudgementDisplayModeMissesOnly => new TranslatableString(getKey(@"judgement_display_mode_misses_only"), @"Misses only"); /// /// "Normal" /// - public static LocalisableString JudgementDisplayModeNormal => new TranslatableString(getKey(@"judgement_display_mode_normal"), "Normal"); + public static LocalisableString JudgementDisplayModeNormal => new TranslatableString(getKey(@"judgement_display_mode_normal"), @"Normal"); /// /// "All" /// - public static LocalisableString JudgementDisplayModeAll => new TranslatableString(getKey(@"judgement_display_mode_all"), "All"); + public static LocalisableString JudgementDisplayModeAll => new TranslatableString(getKey(@"judgement_display_mode_all"), @"All"); - private static string getKey(string key) => $"{prefix}:{key}"; + private static string getKey(string key) => $@"{prefix}:{key}"; } } diff --git a/osu.Game/Screens/Play/HUD/JudgementCounter/JudgementCounterDisplay.cs b/osu.Game/Screens/Play/HUD/JudgementCounter/JudgementCounterDisplay.cs index bc953435b7..ff58aa7ab5 100644 --- a/osu.Game/Screens/Play/HUD/JudgementCounter/JudgementCounterDisplay.cs +++ b/osu.Game/Screens/Play/HUD/JudgementCounter/JudgementCounterDisplay.cs @@ -91,13 +91,13 @@ namespace osu.Game.Screens.Play.HUD.JudgementCounter var hitResult = counter.Result.Types.First(); - if (hitResult.IsBasic()) - return true; - switch (Mode.Value) { + case DisplayMode.MissesOnly: + return hitResult.IsMiss(); + case DisplayMode.Simple: - return false; + return hitResult.IsBasic(); case DisplayMode.Normal: return !hitResult.IsBonus(); @@ -106,7 +106,7 @@ namespace osu.Game.Screens.Play.HUD.JudgementCounter return true; default: - throw new ArgumentOutOfRangeException(); + throw new ArgumentOutOfRangeException(nameof(Mode), Mode.Value, null); } } } @@ -142,7 +142,10 @@ namespace osu.Game.Screens.Play.HUD.JudgementCounter Normal, [LocalisableDescription(typeof(JudgementCounterDisplayStrings), nameof(JudgementCounterDisplayStrings.JudgementDisplayModeAll))] - All + All, + + [LocalisableDescription(typeof(JudgementCounterDisplayStrings), nameof(JudgementCounterDisplayStrings.JudgementDisplayModeMissesOnly))] + MissesOnly, } } } diff --git a/osu.Game/Skinning/Components/ArgonJudgementCounterDisplay.cs b/osu.Game/Skinning/Components/ArgonJudgementCounterDisplay.cs index 885b3922f2..99c88fad8a 100644 --- a/osu.Game/Skinning/Components/ArgonJudgementCounterDisplay.cs +++ b/osu.Game/Skinning/Components/ArgonJudgementCounterDisplay.cs @@ -8,7 +8,6 @@ using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Framework.Localisation; using osu.Game.Configuration; using osu.Game.Localisation.HUD; using osu.Game.Localisation.SkinComponents; @@ -39,7 +38,7 @@ namespace osu.Game.Skinning.Components public BindableBool ShowMaxJudgement { get; } = new BindableBool(true); [SettingSource(typeof(JudgementCounterDisplayStrings), nameof(JudgementCounterDisplayStrings.JudgementDisplayMode))] - public Bindable Mode { get; } = new Bindable(); + public Bindable Mode { get; } = new Bindable(); [SettingSource(typeof(JudgementCounterDisplayStrings), nameof(JudgementCounterDisplayStrings.FlowDirection))] public Bindable FlowDirection { get; } = new Bindable(); @@ -119,18 +118,19 @@ namespace osu.Game.Skinning.Components return false; var hitResult = counter.Result.Types.First(); - if (hitResult.IsBasic()) - return true; switch (Mode.Value) { - case DisplayMode.Simple: - return false; + case JudgementCounterDisplay.DisplayMode.MissesOnly: + return hitResult.IsMiss(); - case DisplayMode.Normal: + case JudgementCounterDisplay.DisplayMode.Simple: + return hitResult.IsBasic(); + + case JudgementCounterDisplay.DisplayMode.Normal: return !hitResult.IsBonus(); - case DisplayMode.All: + case JudgementCounterDisplay.DisplayMode.All: return true; default: @@ -153,18 +153,6 @@ namespace osu.Game.Skinning.Components } } - public enum DisplayMode - { - [LocalisableDescription(typeof(JudgementCounterDisplayStrings), nameof(JudgementCounterDisplayStrings.JudgementDisplayModeSimple))] - Simple, - - [LocalisableDescription(typeof(JudgementCounterDisplayStrings), nameof(JudgementCounterDisplayStrings.JudgementDisplayModeNormal))] - Normal, - - [LocalisableDescription(typeof(JudgementCounterDisplayStrings), nameof(JudgementCounterDisplayStrings.JudgementDisplayModeAll))] - All - } - public bool UsesFixedAnchor { get; set; } } }