Allow beatmaps to load endlessly when entering Player

This commit is contained in:
Dan Balasescu 2022-06-09 14:03:21 +09:00
parent ac7b26a58f
commit bfde334e77

View File

@ -4,6 +4,7 @@
using System; using System;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
@ -181,7 +182,7 @@ namespace osu.Game.Screens.Play
} }
[BackgroundDependencyLoader(true)] [BackgroundDependencyLoader(true)]
private void load(AudioManager audio, OsuConfigManager config, OsuGameBase game) private void load(AudioManager audio, OsuConfigManager config, OsuGameBase game, CancellationToken cancellationToken)
{ {
var gameplayMods = Mods.Value.Select(m => m.DeepClone()).ToArray(); var gameplayMods = Mods.Value.Select(m => m.DeepClone()).ToArray();
@ -194,7 +195,7 @@ namespace osu.Game.Screens.Play
if (Beatmap.Value is DummyWorkingBeatmap) if (Beatmap.Value is DummyWorkingBeatmap)
return; return;
IBeatmap playableBeatmap = loadPlayableBeatmap(gameplayMods); IBeatmap playableBeatmap = loadPlayableBeatmap(gameplayMods, cancellationToken);
if (playableBeatmap == null) if (playableBeatmap == null)
return; return;
@ -483,7 +484,7 @@ namespace osu.Game.Screens.Play
} }
} }
private IBeatmap loadPlayableBeatmap(Mod[] gameplayMods) private IBeatmap loadPlayableBeatmap(Mod[] gameplayMods, CancellationToken cancellationToken)
{ {
IBeatmap playable; IBeatmap playable;
@ -500,7 +501,7 @@ namespace osu.Game.Screens.Play
try try
{ {
playable = Beatmap.Value.GetPlayableBeatmap(ruleset.RulesetInfo, gameplayMods); playable = Beatmap.Value.GetPlayableBeatmap(ruleset.RulesetInfo, gameplayMods, cancellationToken);
} }
catch (BeatmapInvalidForRulesetException) catch (BeatmapInvalidForRulesetException)
{ {
@ -508,7 +509,7 @@ namespace osu.Game.Screens.Play
rulesetInfo = Beatmap.Value.BeatmapInfo.Ruleset; rulesetInfo = Beatmap.Value.BeatmapInfo.Ruleset;
ruleset = rulesetInfo.CreateInstance(); ruleset = rulesetInfo.CreateInstance();
playable = Beatmap.Value.GetPlayableBeatmap(rulesetInfo, gameplayMods); playable = Beatmap.Value.GetPlayableBeatmap(rulesetInfo, gameplayMods, cancellationToken);
} }
if (playable.HitObjects.Count == 0) if (playable.HitObjects.Count == 0)