Merge pull request #1029 from smoogipooo/fix-beatmap-null

Fix Player crashing due to null BeatmapInfo (now unused).
This commit is contained in:
Dean Herbert
2017-07-20 09:40:18 +09:00
committed by GitHub
5 changed files with 14 additions and 13 deletions

View File

@ -10,7 +10,7 @@ namespace osu.Desktop.VisualTests.Beatmaps
public class TestWorkingBeatmap : WorkingBeatmap public class TestWorkingBeatmap : WorkingBeatmap
{ {
public TestWorkingBeatmap(Beatmap beatmap) public TestWorkingBeatmap(Beatmap beatmap)
: base(beatmap.BeatmapInfo) : base(beatmap.BeatmapInfo, true)
{ {
this.beatmap = beatmap; this.beatmap = beatmap;
} }

View File

@ -22,14 +22,17 @@ namespace osu.Game.Beatmaps
public readonly Bindable<IEnumerable<Mod>> Mods = new Bindable<IEnumerable<Mod>>(new Mod[] { }); public readonly Bindable<IEnumerable<Mod>> Mods = new Bindable<IEnumerable<Mod>>(new Mod[] { });
public readonly bool WithStoryboard; /// <summary>
/// Denotes whether extras like storyboards have been loaded for this <see cref="WorkingBeatmap"/>.
/// </summary>
public bool FullyLoaded { get; protected set; }
protected WorkingBeatmap(BeatmapInfo beatmapInfo, bool withStoryboard = false) protected WorkingBeatmap(BeatmapInfo beatmapInfo, bool fullyLoaded = false)
{ {
BeatmapInfo = beatmapInfo; BeatmapInfo = beatmapInfo;
BeatmapSetInfo = beatmapInfo.BeatmapSet; BeatmapSetInfo = beatmapInfo.BeatmapSet;
Metadata = beatmapInfo.Metadata ?? BeatmapSetInfo.Metadata; Metadata = beatmapInfo.Metadata ?? BeatmapSetInfo.Metadata;
WithStoryboard = withStoryboard; FullyLoaded = fullyLoaded;
Mods.ValueChanged += mods => applyRateAdjustments(); Mods.ValueChanged += mods => applyRateAdjustments();
} }

View File

@ -14,8 +14,8 @@ namespace osu.Game.Database
{ {
private readonly BeatmapDatabase database; private readonly BeatmapDatabase database;
public DatabaseWorkingBeatmap(BeatmapDatabase database, BeatmapInfo beatmapInfo, bool withStoryboard = false) public DatabaseWorkingBeatmap(BeatmapDatabase database, BeatmapInfo beatmapInfo, bool fullyLoaded = false)
: base(beatmapInfo, withStoryboard) : base(beatmapInfo, fullyLoaded)
{ {
this.database = database; this.database = database;
} }
@ -37,7 +37,7 @@ namespace osu.Game.Database
beatmap = decoder.Decode(stream); beatmap = decoder.Decode(stream);
} }
if (beatmap == null || !WithStoryboard || BeatmapSetInfo.StoryboardFile == null) if (beatmap == null || !FullyLoaded || BeatmapSetInfo.StoryboardFile == null)
return beatmap; return beatmap;
using (var stream = new StreamReader(reader.GetStream(BeatmapSetInfo.StoryboardFile))) using (var stream = new StreamReader(reader.GetStream(BeatmapSetInfo.StoryboardFile)))

View File

@ -35,8 +35,6 @@ namespace osu.Game.Screens.Play
internal override bool HasLocalCursorDisplayed => !pauseContainer.IsPaused && !HasFailed && HitRenderer.ProvidingUserCursor; internal override bool HasLocalCursorDisplayed => !pauseContainer.IsPaused && !HasFailed && HitRenderer.ProvidingUserCursor;
public BeatmapInfo BeatmapInfo;
public Action RestartRequested; public Action RestartRequested;
internal override bool AllowBeatmapRulesetChange => false; internal override bool AllowBeatmapRulesetChange => false;
@ -83,9 +81,9 @@ namespace osu.Game.Screens.Play
try try
{ {
if (!Beatmap.Value.WithStoryboard) if (!Beatmap.Value.FullyLoaded)
// we need to ensure the storyboard is loaded. // we need to ensure extras like storyboards are loaded.
Beatmap.Value = beatmaps.GetWorkingBeatmap(BeatmapInfo, withStoryboard: true); Beatmap.Value = beatmaps.GetWorkingBeatmap(Beatmap.Value.BeatmapInfo, withStoryboard: true);
if (Beatmap.Value.Beatmap == null) if (Beatmap.Value.Beatmap == null)
throw new InvalidOperationException("Beatmap was not loaded"); throw new InvalidOperationException("Beatmap was not loaded");

View File

@ -189,7 +189,7 @@ namespace osu.Game.Screens.Select
private void carouselBeatmapsLoaded() private void carouselBeatmapsLoaded()
{ {
if (Beatmap.Value != null && !Beatmap.Value.BeatmapSetInfo.DeletePending) if (Beatmap.Value != null && Beatmap.Value.BeatmapSetInfo?.DeletePending != false)
carousel.SelectBeatmap(Beatmap.Value.BeatmapInfo, false); carousel.SelectBeatmap(Beatmap.Value.BeatmapInfo, false);
else else
carousel.SelectNext(); carousel.SelectNext();