From c372f9b8f538cec50a085003b4d2758224fa79fc Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 2 Mar 2026 22:37:19 -0800 Subject: [PATCH 1/4] Standardise display order of playcount / favourites --- .../Drawables/Cards/BeatmapCardExtra.cs | 18 +++++++++--------- .../Drawables/Cards/BeatmapCardNormal.cs | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardExtra.cs b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardExtra.cs index 222acbc039..4c4a063708 100644 --- a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardExtra.cs +++ b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardExtra.cs @@ -296,20 +296,20 @@ namespace osu.Game.Beatmaps.Drawables.Cards return original; } - statisticsContainer.Content[0][0] = withMargin(new FavouritesStatistic(BeatmapSet) - { - Current = FavouriteState, - }); - - statisticsContainer.Content[1][0] = withMargin(new PlayCountStatistic(BeatmapSet)); - var hypesStatistic = HypesStatistic.CreateFor(BeatmapSet); if (hypesStatistic != null) - statisticsContainer.Content[0][1] = withMargin(hypesStatistic); + statisticsContainer.Content[0][0] = withMargin(hypesStatistic); var nominationsStatistic = NominationsStatistic.CreateFor(BeatmapSet); if (nominationsStatistic != null) - statisticsContainer.Content[1][1] = withMargin(nominationsStatistic); + statisticsContainer.Content[1][0] = withMargin(nominationsStatistic); + + statisticsContainer.Content[0][1] = withMargin(new PlayCountStatistic(BeatmapSet)); + + statisticsContainer.Content[1][1] = withMargin(new FavouritesStatistic(BeatmapSet) + { + Current = FavouriteState, + }); var dateStatistic = BeatmapCardDateStatistic.CreateFor(BeatmapSet); if (dateStatistic != null) diff --git a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardNormal.cs b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardNormal.cs index ac9ee94f56..6974cf81ea 100644 --- a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardNormal.cs +++ b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCardNormal.cs @@ -278,8 +278,8 @@ namespace osu.Game.Beatmaps.Drawables.Cards if (nominationsStatistic != null) yield return nominationsStatistic; - yield return new FavouritesStatistic(BeatmapSet) { Current = FavouriteState }; yield return new PlayCountStatistic(BeatmapSet); + yield return new FavouritesStatistic(BeatmapSet) { Current = FavouriteState }; var dateStatistic = BeatmapCardDateStatistic.CreateFor(BeatmapSet); if (dateStatistic != null) From b831bcbcd469459323a3400a17f0aa32c590e8d4 Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 2 Mar 2026 22:40:16 -0800 Subject: [PATCH 2/4] Change beatmap card play count and date icon to solid to match web --- .../Drawables/Cards/Statistics/BeatmapCardDateStatistic.cs | 2 +- .../Beatmaps/Drawables/Cards/Statistics/PlayCountStatistic.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Beatmaps/Drawables/Cards/Statistics/BeatmapCardDateStatistic.cs b/osu.Game/Beatmaps/Drawables/Cards/Statistics/BeatmapCardDateStatistic.cs index 861ec9f027..cb4c548556 100644 --- a/osu.Game/Beatmaps/Drawables/Cards/Statistics/BeatmapCardDateStatistic.cs +++ b/osu.Game/Beatmaps/Drawables/Cards/Statistics/BeatmapCardDateStatistic.cs @@ -17,7 +17,7 @@ namespace osu.Game.Beatmaps.Drawables.Cards.Statistics { this.dateTime = dateTime; - Icon = FontAwesome.Regular.CheckCircle; + Icon = FontAwesome.Solid.CheckCircle; Text = dateTime.ToLocalisedMediumDate(); } diff --git a/osu.Game/Beatmaps/Drawables/Cards/Statistics/PlayCountStatistic.cs b/osu.Game/Beatmaps/Drawables/Cards/Statistics/PlayCountStatistic.cs index 4ce37b8659..8b6e238625 100644 --- a/osu.Game/Beatmaps/Drawables/Cards/Statistics/PlayCountStatistic.cs +++ b/osu.Game/Beatmaps/Drawables/Cards/Statistics/PlayCountStatistic.cs @@ -15,7 +15,7 @@ namespace osu.Game.Beatmaps.Drawables.Cards.Statistics { public PlayCountStatistic(IBeatmapSetOnlineInfo onlineInfo) { - Icon = FontAwesome.Regular.PlayCircle; + Icon = FontAwesome.Solid.PlayCircle; Text = onlineInfo.PlayCount.ToMetric(decimals: 1); TooltipText = BeatmapsStrings.PanelPlaycount(onlineInfo.PlayCount.ToLocalisableString(@"N0")); } From 7dfbab212eab1a48bcaf0ba17f2c664e24041815 Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 2 Mar 2026 22:42:41 -0800 Subject: [PATCH 3/4] Add nominations statistic to beatmap info overlay See https://github.com/ppy/osu-web/blob/2198adfa68bf24709c3b0cc2e6d838e86be5b1d1/resources/js/beatmapsets-show/header.tsx#L116-L123. --- .../Visual/Online/TestSceneBeatmapSetOverlay.cs | 4 ++++ osu.Game/Overlays/BeatmapSet/BeatmapPicker.cs | 12 +++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs b/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs index b164c530cb..227e15ccf7 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs @@ -72,6 +72,10 @@ namespace osu.Game.Tests.Visual.Online Preview = @"https://b.ppy.sh/preview/12345.mp3", PlayCount = 123, FavouriteCount = 456, + NominationStatus = new BeatmapSetNominationStatus + { + Current = 2, + }, Submitted = DateTime.Now, Ranked = DateTime.Now, BPM = 111, diff --git a/osu.Game/Overlays/BeatmapSet/BeatmapPicker.cs b/osu.Game/Overlays/BeatmapSet/BeatmapPicker.cs index f2630caa83..94aa639274 100644 --- a/osu.Game/Overlays/BeatmapSet/BeatmapPicker.cs +++ b/osu.Game/Overlays/BeatmapSet/BeatmapPicker.cs @@ -13,6 +13,7 @@ using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Sprites; using osu.Framework.Input.Events; using osu.Framework.Localisation; +using osu.Game.Beatmaps; using osu.Game.Beatmaps.Drawables; using osu.Game.Extensions; using osu.Game.Graphics; @@ -32,7 +33,7 @@ namespace osu.Game.Overlays.BeatmapSet private const float tile_spacing = 2; private readonly LinkFlowContainer infoContainer; - private readonly Statistic plays, favourites; + private readonly Statistic nominations, plays, favourites; public readonly DifficultiesContainer Difficulties; @@ -107,6 +108,7 @@ namespace osu.Game.Overlays.BeatmapSet Margin = new MarginPadding { Top = 5 }, Children = new[] { + nominations = new Statistic(FontAwesome.Solid.ThumbsUp), plays = new Statistic(FontAwesome.Solid.PlayCircle), favourites = new Statistic(FontAwesome.Solid.Heart), }, @@ -176,6 +178,14 @@ namespace osu.Game.Overlays.BeatmapSet // Else just choose the first available difficulty for now. Beatmap.Value ??= Difficulties.FirstOrDefault()?.Beatmap; + if (beatmapSet?.Status == BeatmapOnlineStatus.Pending && beatmapSet.NominationStatus != null) + { + nominations.Show(); + nominations.Value = beatmapSet.NominationStatus.Current; + } + else + nominations.Hide(); + plays.Value = BeatmapSet?.PlayCount ?? 0; favourites.Value = BeatmapSet?.FavouriteCount ?? 0; From 564b6ebd0c5bf35e830f13dd20dfd65f1e68882f Mon Sep 17 00:00:00 2001 From: Joseph Madamba Date: Mon, 2 Mar 2026 22:53:09 -0800 Subject: [PATCH 4/4] Add tooltips to beatmap info overlay statistics --- osu.Game/Overlays/BeatmapSet/BeatmapPicker.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/osu.Game/Overlays/BeatmapSet/BeatmapPicker.cs b/osu.Game/Overlays/BeatmapSet/BeatmapPicker.cs index 94aa639274..59b0547d4e 100644 --- a/osu.Game/Overlays/BeatmapSet/BeatmapPicker.cs +++ b/osu.Game/Overlays/BeatmapSet/BeatmapPicker.cs @@ -9,6 +9,7 @@ using osu.Framework.Bindables; using osu.Framework.Extensions.LocalisationExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Cursor; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Sprites; using osu.Framework.Input.Events; @@ -108,8 +109,14 @@ namespace osu.Game.Overlays.BeatmapSet Margin = new MarginPadding { Top = 5 }, Children = new[] { - nominations = new Statistic(FontAwesome.Solid.ThumbsUp), - plays = new Statistic(FontAwesome.Solid.PlayCircle), + nominations = new Statistic(FontAwesome.Solid.ThumbsUp) + { + TooltipText = BeatmapsetsStrings.ShowStatsNominations, + }, + plays = new Statistic(FontAwesome.Solid.PlayCircle) + { + TooltipText = BeatmapsetsStrings.ShowStatsPlaycount, + }, favourites = new Statistic(FontAwesome.Solid.Heart), }, }, @@ -188,6 +195,7 @@ namespace osu.Game.Overlays.BeatmapSet plays.Value = BeatmapSet?.PlayCount ?? 0; favourites.Value = BeatmapSet?.FavouriteCount ?? 0; + favourites.TooltipText = BeatmapSet?.FavouriteCount > 0 ? BeatmapsetsStrings.ShowStatsFavourites : BeatmapsetsStrings.ShowStatsNoFavourites; updateDifficultyButtons(); } @@ -377,7 +385,7 @@ namespace osu.Game.Overlays.BeatmapSet } } - private partial class Statistic : FillFlowContainer + private partial class Statistic : FillFlowContainer, IHasTooltip { private readonly OsuSpriteText text; @@ -417,6 +425,8 @@ namespace osu.Game.Overlays.BeatmapSet }, }; } + + public LocalisableString TooltipText { get; set; } } public enum DifficultySelectorState