diff --git a/osu.Desktop.VisualTests/Tests/TestCasePlayer.cs b/osu.Desktop.VisualTests/Tests/TestCasePlayer.cs index 2dd6c00da2..009680a978 100644 --- a/osu.Desktop.VisualTests/Tests/TestCasePlayer.cs +++ b/osu.Desktop.VisualTests/Tests/TestCasePlayer.cs @@ -97,7 +97,6 @@ namespace osu.Desktop.VisualTests.Tests { return new Player { - PreferredPlayMode = PlayMode.Osu, Beatmap = beatmap }; } diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index 9393c2b0e9..0ee45d871b 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -8,6 +8,7 @@ using osu.Framework.Graphics.Textures; using osu.Game.Beatmaps.Formats; using osu.Game.Beatmaps.IO; using osu.Game.Database; +using osu.Game.Modes; namespace osu.Game.Beatmaps { @@ -17,6 +18,14 @@ namespace osu.Game.Beatmaps public readonly BeatmapSetInfo BeatmapSetInfo; + /// + /// A play mode that is preferred for this beatmap. This allows for conversion between game modes where feasible, + /// but does not gurantee an outcome. + /// + public PlayMode PreferredPlayMode; + + public PlayMode PlayMode => beatmap?.BeatmapInfo?.Mode > PlayMode.Osu ? beatmap.BeatmapInfo.Mode : PreferredPlayMode; + public readonly bool WithStoryboard; protected abstract ArchiveReader GetReader(); diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 51f8781fd6..4cd919874e 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -42,8 +42,6 @@ namespace osu.Game.Screens.Play public BeatmapInfo BeatmapInfo; - public PlayMode PreferredPlayMode; - private bool isPaused; public bool IsPaused { @@ -121,9 +119,7 @@ namespace osu.Game.Screens.Play return; } - PlayMode usablePlayMode = beatmap.BeatmapInfo?.Mode > PlayMode.Osu ? beatmap.BeatmapInfo.Mode : PreferredPlayMode; - - ruleset = Ruleset.GetRuleset(usablePlayMode); + ruleset = Ruleset.GetRuleset(Beatmap.PlayMode); scoreOverlay = ruleset.CreateScoreOverlay(); scoreOverlay.BindProcessor(scoreProcessor = ruleset.CreateScoreProcessor(beatmap.HitObjects.Count)); diff --git a/osu.Game/Screens/Select/PlaySongSelect.cs b/osu.Game/Screens/Select/PlaySongSelect.cs index 316cc50dae..f35f39a452 100644 --- a/osu.Game/Screens/Select/PlaySongSelect.cs +++ b/osu.Game/Screens/Select/PlaySongSelect.cs @@ -159,10 +159,11 @@ namespace osu.Game.Screens.Select if (player != null || Beatmap == null) return; + Beatmap.PreferredPlayMode = playMode.Value; + (player = new PlayerLoader(new Player { - BeatmapInfo = carousel.SelectedGroup.SelectedPanel.Beatmap, - PreferredPlayMode = playMode.Value + Beatmap = Beatmap, //eagerly set this so it's prsent before push. })).LoadAsync(Game, l => Push(player)); } },