From bf8b6754dc3f54d205af30dc12ccc0aba9593e21 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 30 Jun 2025 16:09:34 +0900 Subject: [PATCH] Play error sound when random selection fails --- osu.Game/Screens/SelectV2/BeatmapCarousel.cs | 10 ++++++---- osu.Game/Screens/SelectV2/SongSelect.cs | 20 +++++++++++++++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/osu.Game/Screens/SelectV2/BeatmapCarousel.cs b/osu.Game/Screens/SelectV2/BeatmapCarousel.cs index d33d5dbd87..d343bd9e12 100644 --- a/osu.Game/Screens/SelectV2/BeatmapCarousel.cs +++ b/osu.Game/Screens/SelectV2/BeatmapCarousel.cs @@ -771,12 +771,12 @@ namespace osu.Game.Screens.SelectV2 return true; } - public void PreviousRandom() + public bool PreviousRandom() { var carouselItems = GetCarouselItems(); if (carouselItems?.Any() != true) - return; + return false; while (randomHistory.Any()) { @@ -786,7 +786,7 @@ namespace osu.Game.Screens.SelectV2 var previousBeatmapItem = carouselItems.FirstOrDefault(i => i.Model is BeatmapInfo b && b.Equals(previousBeatmap)); if (previousBeatmapItem == null) - return; + return false; if (CurrentSelection is BeatmapInfo beatmapInfo) { @@ -800,8 +800,10 @@ namespace osu.Game.Screens.SelectV2 } RequestSelection(previousBeatmap); - break; + return true; } + + return false; } private double distanceBetween(CarouselItem item1, CarouselItem item2) => Math.Ceiling(Math.Abs(item1.CarouselYPosition - item2.CarouselYPosition) / PanelBeatmapSet.HEIGHT); diff --git a/osu.Game/Screens/SelectV2/SongSelect.cs b/osu.Game/Screens/SelectV2/SongSelect.cs index 4c30662bd4..e26c72575a 100644 --- a/osu.Game/Screens/SelectV2/SongSelect.cs +++ b/osu.Game/Screens/SelectV2/SongSelect.cs @@ -6,6 +6,8 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; using osu.Framework.Audio.Track; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; @@ -103,6 +105,8 @@ namespace osu.Game.Screens.SelectV2 public override bool ShowFooter => true; + private Sample? errorSample; + [Resolved] private OsuGameBase? game { get; set; } @@ -128,8 +132,10 @@ namespace osu.Game.Screens.SelectV2 private IDialogOverlay? dialogOverlay { get; set; } [BackgroundDependencyLoader] - private void load() + private void load(AudioManager audio) { + errorSample = audio.Samples.Get(@"UI/generic-error"); + AddRangeInternal(new Drawable[] { new GlobalScrollAdjustsVolume(), @@ -286,8 +292,16 @@ namespace osu.Game.Screens.SelectV2 }, new FooterButtonRandom { - NextRandom = () => carousel.NextRandom(), - PreviousRandom = () => carousel.PreviousRandom() + NextRandom = () => + { + if (!carousel.NextRandom()) + errorSample?.Play(); + }, + PreviousRandom = () => + { + if (!carousel.PreviousRandom()) + errorSample?.Play(); + } }, new FooterButtonOptions {