From 4d33602ccd0d4422aa3657b97d6d998cc0ab0f87 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 31 May 2025 17:35:55 +0900 Subject: [PATCH] Fix random selection potentially selecting a filtered-away beatmap --- osu.Game/Screens/SelectV2/BeatmapCarousel.cs | 20 +++++++++++-------- .../SelectV2/BeatmapCarouselFilterGrouping.cs | 13 +++++++----- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/osu.Game/Screens/SelectV2/BeatmapCarousel.cs b/osu.Game/Screens/SelectV2/BeatmapCarousel.cs index d14002181c..c2dd4302e6 100644 --- a/osu.Game/Screens/SelectV2/BeatmapCarousel.cs +++ b/osu.Game/Screens/SelectV2/BeatmapCarousel.cs @@ -219,13 +219,7 @@ namespace osu.Game.Screens.SelectV2 return; case BeatmapSetInfo setInfo: - // Selecting a set isn't valid – let's re-select the first visible difficulty. - if (grouping.SetItems.TryGetValue(setInfo, out var items)) - { - var beatmaps = items.Select(i => i.Model).OfType(); - RequestRecommendedSelection(beatmaps); - } - + selectRecommendedDifficultyForBeatmapSet(setInfo); return; case BeatmapInfo beatmapInfo: @@ -284,6 +278,16 @@ namespace osu.Game.Screens.SelectV2 setExpandedGroup(groupForReselection); } + private void selectRecommendedDifficultyForBeatmapSet(BeatmapSetInfo beatmapSet) + { + // Selecting a set isn't valid – let's re-select the first visible difficulty. + if (grouping.SetItems.TryGetValue(beatmapSet, out var items)) + { + var beatmaps = items.Select(i => i.Model).OfType(); + RequestRecommendedSelection(beatmaps); + } + } + /// /// If we don't have a selection and there's a single beatmap set returned, select it for the user. /// @@ -644,7 +648,7 @@ namespace osu.Game.Screens.SelectV2 if (CurrentSelectionItem != null) playSpinSample(distanceBetween(carouselItems.First(i => !ReferenceEquals(i.Model, set)), CurrentSelectionItem), visibleSets.Count); - RequestRecommendedSelection(set.Beatmaps.Where(b => !b.Hidden)); + selectRecommendedDifficultyForBeatmapSet(set); return true; } diff --git a/osu.Game/Screens/SelectV2/BeatmapCarouselFilterGrouping.cs b/osu.Game/Screens/SelectV2/BeatmapCarouselFilterGrouping.cs index 8720378ad6..926349d6cc 100644 --- a/osu.Game/Screens/SelectV2/BeatmapCarouselFilterGrouping.cs +++ b/osu.Game/Screens/SelectV2/BeatmapCarouselFilterGrouping.cs @@ -76,15 +76,18 @@ namespace osu.Game.Screens.SelectV2 { var beatmap = (BeatmapInfo)item.Model; + bool newBeatmapSet = lastBeatmap?.BeatmapSet!.ID != beatmap.BeatmapSet!.ID; + + if (newBeatmapSet) + { + if (!setMap.TryGetValue(beatmap.BeatmapSet!, out currentSetItems)) + setMap[beatmap.BeatmapSet!] = currentSetItems = new HashSet(); + } + if (BeatmapSetsGroupedTogether) { - bool newBeatmapSet = lastBeatmap?.BeatmapSet!.ID != beatmap.BeatmapSet!.ID; - if (newBeatmapSet) { - if (!setMap.TryGetValue(beatmap.BeatmapSet!, out currentSetItems)) - setMap[beatmap.BeatmapSet!] = currentSetItems = new HashSet(); - if (groupItem != null) groupItem.NestedItemCount++;