diff --git a/osu.Game/Screens/Select/PlaySongSelect.cs b/osu.Game/Screens/Select/PlaySongSelect.cs
index 179aab54a3..21ddc5685d 100644
--- a/osu.Game/Screens/Select/PlaySongSelect.cs
+++ b/osu.Game/Screens/Select/PlaySongSelect.cs
@@ -7,6 +7,7 @@
using osu.Framework.Input.Events;
using osu.Framework.Screens;
using osu.Game.Graphics;
+using osu.Game.Scoring;
using osu.Game.Screens.Play;
using osu.Game.Screens.Ranking;
using osu.Game.Users;
@@ -32,9 +33,12 @@ private void load(OsuColour colours)
Edit();
}, Key.Number4);
- ((PlayBeatmapDetailArea)BeatmapDetails).Leaderboard.ScoreSelected += score => this.Push(new ResultsScreen(score));
+ ((PlayBeatmapDetailArea)BeatmapDetails).Leaderboard.ScoreSelected += PresentScore;
}
+ protected void PresentScore(ScoreInfo score) =>
+ FinaliseSelection(score.Beatmap, score.Ruleset, () => this.Push(new ResultsScreen(score)));
+
protected override BeatmapDetailArea CreateBeatmapDetailArea() => new PlayBeatmapDetailArea();
public override void OnResuming(IScreen last)
diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs
index a7e27c27ba..2b373ab7e0 100644
--- a/osu.Game/Screens/Select/SongSelect.cs
+++ b/osu.Game/Screens/Select/SongSelect.cs
@@ -342,13 +342,17 @@ public void Edit(BeatmapInfo beatmap = null)
/// Call to make a selection and perform the default action for this SongSelect.
///
/// An optional beatmap to override the current carousel selection.
- /// Whether to trigger .
- public void FinaliseSelection(BeatmapInfo beatmap = null, bool performStartAction = true)
+ /// An optional ruleset to override the current carousel selection.
+ /// An optional custom action to perform instead of .
+ public void FinaliseSelection(BeatmapInfo beatmap = null, RulesetInfo ruleset = null, Action customStartAction = null)
{
// This is very important as we have not yet bound to screen-level bindables before the carousel load is completed.
if (!Carousel.BeatmapSetsLoaded)
return;
+ if (ruleset != null)
+ Ruleset.Value = ruleset;
+
transferRulesetValue();
// while transferRulesetValue will flush, it only does so if the ruleset changes.
@@ -369,7 +373,12 @@ public void FinaliseSelection(BeatmapInfo beatmap = null, bool performStartActio
selectionChangedDebounce = null;
}
- if (performStartAction && OnStart())
+ if (customStartAction != null)
+ {
+ customStartAction();
+ Carousel.AllowSelection = false;
+ }
+ else if (OnStart())
Carousel.AllowSelection = false;
}