Centralise access to WorkingBeatmaps.

They can now only be instantiated from BeatmapDatabase and are abstract (to avoid misuse).
This commit is contained in:
Dean Herbert
2017-02-24 13:43:21 +09:00
parent 355bbb6324
commit 3a89348413
6 changed files with 44 additions and 35 deletions

View File

@ -11,16 +11,22 @@ using osu.Game.Database;
namespace osu.Game.Beatmaps
{
public class WorkingBeatmap : IDisposable
public abstract class WorkingBeatmap : IDisposable
{
public readonly BeatmapInfo BeatmapInfo;
public readonly BeatmapSetInfo BeatmapSetInfo;
private readonly BeatmapDatabase database;
public readonly bool WithStoryboard;
private ArchiveReader getReader() => database?.GetReader(BeatmapSetInfo);
protected abstract ArchiveReader GetReader();
protected WorkingBeatmap(BeatmapInfo beatmapInfo, BeatmapSetInfo beatmapSetInfo, bool withStoryboard = false)
{
BeatmapInfo = beatmapInfo;
BeatmapSetInfo = beatmapSetInfo;
WithStoryboard = withStoryboard;
}
private Texture background;
private object backgroundLock = new object();
@ -36,7 +42,7 @@ namespace osu.Game.Beatmaps
try
{
using (var reader = getReader())
using (var reader = GetReader())
background = new TextureStore(new RawTextureLoaderStore(reader), false).Get(BeatmapInfo.Metadata.BackgroundFile);
}
catch { }
@ -59,7 +65,7 @@ namespace osu.Game.Beatmaps
try
{
using (var reader = getReader())
using (var reader = GetReader())
{
BeatmapDecoder decoder;
using (var stream = new StreamReader(reader.GetStream(BeatmapInfo.Path)))
@ -95,7 +101,7 @@ namespace osu.Game.Beatmaps
try
{
//store a reference to the reader as we may continue accessing the stream in the background.
trackReader = getReader();
trackReader = GetReader();
var trackData = trackReader?.GetStream(BeatmapInfo.Metadata.AudioFile);
if (trackData != null)
track = new TrackBass(trackData);
@ -110,21 +116,6 @@ namespace osu.Game.Beatmaps
public bool TrackLoaded => track != null;
public WorkingBeatmap(Beatmap beatmap)
{
this.beatmap = beatmap;
BeatmapInfo = beatmap.BeatmapInfo;
BeatmapSetInfo = beatmap.BeatmapInfo.BeatmapSet;
}
public WorkingBeatmap(BeatmapInfo beatmapInfo, BeatmapSetInfo beatmapSetInfo, BeatmapDatabase database, bool withStoryboard = false)
{
BeatmapInfo = beatmapInfo;
BeatmapSetInfo = beatmapSetInfo;
this.database = database;
this.WithStoryboard = withStoryboard;
}
private bool isDisposed;
protected virtual void Dispose(bool disposing)