From 883df07ff6d5fd8880c4fea079f8939a6996c103 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 23 Apr 2025 16:23:37 +0900 Subject: [PATCH] Adjust tests and transitions --- .../TestSceneBeatmapMetadataWedge.cs | 22 ++++++- .../Screens/SelectV2/BeatmapMetadataWedge.cs | 64 ++++++++++++------- 2 files changed, 61 insertions(+), 25 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapMetadataWedge.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapMetadataWedge.cs index 769188eb71..be2e6eb9bf 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapMetadataWedge.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapMetadataWedge.cs @@ -18,6 +18,8 @@ namespace osu.Game.Tests.Visual.SongSelectV2 { private APIBeatmapSet? currentOnlineSet; + private BeatmapMetadataWedge wedge = null!; + protected override void LoadComplete() { base.LoadComplete(); @@ -40,22 +42,36 @@ namespace osu.Game.Tests.Visual.SongSelectV2 } }; - Child = new BeatmapMetadataWedge + Child = wedge = new BeatmapMetadataWedge { State = { Value = Visibility.Visible }, }; } [Test] - public void TestDisplay() + public void TestShowHide() { - AddStep("null beatmap", () => Beatmap.SetDefault()); AddStep("all metrics", () => { var (working, onlineSet) = createTestBeatmap(); currentOnlineSet = onlineSet; Beatmap.Value = working; }); + + AddStep("hide wedge", () => wedge.Hide()); + AddStep("show wedge", () => wedge.Show()); + } + + [Test] + public void TestVariousMetrics() + { + AddStep("all metrics", () => + { + var (working, onlineSet) = createTestBeatmap(); + currentOnlineSet = onlineSet; + Beatmap.Value = working; + }); + AddStep("null beatmap", () => Beatmap.SetDefault()); AddStep("no source", () => { var (working, onlineSet) = createTestBeatmap(); diff --git a/osu.Game/Screens/SelectV2/BeatmapMetadataWedge.cs b/osu.Game/Screens/SelectV2/BeatmapMetadataWedge.cs index a83ec51b11..816dfc3f95 100644 --- a/osu.Game/Screens/SelectV2/BeatmapMetadataWedge.cs +++ b/osu.Game/Screens/SelectV2/BeatmapMetadataWedge.cs @@ -35,6 +35,8 @@ namespace osu.Game.Screens.SelectV2 private Drawable failRetryWedge = null!; private FailRetryDisplay failRetryDisplay = null!; + protected override bool StartHidden => true; + [Resolved] private IBindable beatmap { get; set; } = null!; @@ -225,16 +227,47 @@ namespace osu.Game.Screens.SelectV2 apiState.BindValueChanged(_ => Scheduler.AddOnce(updateDisplay), true); } + private const double transition_duration = 300; + protected override void PopIn() { - this.FadeIn(300, Easing.OutQuint) - .MoveToX(0, 300, Easing.OutQuint); + this.FadeIn(transition_duration, Easing.OutQuint) + .MoveToX(0, transition_duration, Easing.OutQuint); + + updateSubWedgeVisibility(); } protected override void PopOut() { - this.FadeOut(300, Easing.OutQuint) - .MoveToX(-100, 300, Easing.OutQuint); + this.FadeOut(transition_duration, Easing.OutQuint) + .MoveToX(-100, transition_duration, Easing.OutQuint); + + updateSubWedgeVisibility(); + } + + private void updateSubWedgeVisibility() + { + // We could consider hiding individual wedges based on zero data in the future. + // Needs some experimentation on what looks good. + + if (State.Value == Visibility.Visible && currentOnlineBeatmapSet != null) + { + ratingsWedge.FadeIn(transition_duration, Easing.OutQuint) + .MoveToX(0, transition_duration, Easing.OutQuint); + + failRetryWedge.Delay(100) + .FadeIn(transition_duration, Easing.OutQuint) + .MoveToX(0, transition_duration, Easing.OutQuint); + } + else + { + ratingsWedge.FadeOut(transition_duration, Easing.OutQuint) + .MoveToX(-50, transition_duration, Easing.OutQuint); + + failRetryWedge.Delay(100) + .FadeOut(transition_duration, Easing.OutQuint) + .MoveToX(-50, transition_duration, Easing.OutQuint); + } } private void updateDisplay() @@ -291,16 +324,13 @@ namespace osu.Game.Screens.SelectV2 { genre.Data = null; language.Data = null; + return; } - else if (currentOnlineBeatmapSet == null) + + if (currentOnlineBeatmapSet == null) { genre.Data = ("-", null); language.Data = ("-", null); - - ratingsWedge.FadeOut(300, Easing.OutQuint); - ratingsWedge.MoveToX(-50, 300, Easing.OutQuint); - failRetryWedge.FadeOut(300, Easing.OutQuint); - failRetryWedge.MoveToX(-50, 300, Easing.OutQuint); } else { @@ -314,24 +344,14 @@ namespace osu.Game.Screens.SelectV2 if (onlineBeatmap != null) { - ratingsWedge.FadeIn(300, Easing.OutQuint); - ratingsWedge.MoveToX(0, 300, Easing.OutQuint); - failRetryWedge.FadeIn(300, Easing.OutQuint); - failRetryWedge.MoveToX(0, 300, Easing.OutQuint); - userRatingDisplay.Data = onlineBeatmapSet.Ratings; ratingSpreadDisplay.Data = onlineBeatmapSet.Ratings; successRateDisplay.Data = (onlineBeatmap.PassCount, onlineBeatmap.PlayCount); failRetryDisplay.Data = onlineBeatmap.FailTimes ?? new APIFailTimes(); } - else - { - ratingsWedge.FadeOut(300, Easing.OutQuint); - ratingsWedge.MoveToX(-50, 300, Easing.OutQuint); - failRetryWedge.FadeOut(300, Easing.OutQuint); - failRetryWedge.MoveToX(-50, 300, Easing.OutQuint); - } } + + updateSubWedgeVisibility(); } } }