1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-22 01:23:24 +08:00

Simplify derived classes of WorkingBeatmap

This commit is contained in:
Drew DeVault 2017-03-22 06:15:32 -04:00
parent cc2b4c5c5b
commit 267238dc27
3 changed files with 116 additions and 115 deletions

View File

@ -1,4 +1,7 @@
using System;
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System;
using osu.Framework.Audio.Track;
using osu.Framework.Graphics.Textures;
using osu.Game.Beatmaps;
@ -15,18 +18,9 @@ namespace osu.Desktop.VisualTests.Beatmaps
}
private Beatmap beatmap;
public override Beatmap Beatmap => beatmap;
public override Texture Background => null;
public override Track Track => null;
public override void Dispose()
{
// This space intentionally left blank
}
public override void TransferTo(WorkingBeatmap other)
{
// This space intentionally left blank
}
protected override Beatmap GetBeatmap() => beatmap;
protected override Texture GetBackground() => null;
protected override Track GetTrack() => null;
}
}

View File

@ -37,13 +37,63 @@ namespace osu.Game.Beatmaps
WithStoryboard = withStoryboard;
}
public abstract Beatmap Beatmap { get; }
public abstract Texture Background { get; }
public abstract Track Track { get; }
protected abstract Beatmap GetBeatmap();
protected abstract Texture GetBackground();
protected abstract Track GetTrack();
public abstract void TransferTo(WorkingBeatmap other);
public abstract void Dispose();
private Beatmap beatmap;
private object beatmapLock = new object();
public Beatmap Beatmap
{
get
{
lock (beatmapLock)
{
return beatmap ?? (beatmap = GetBeatmap());
}
}
}
public virtual bool TrackLoaded => Track != null;
private object backgroundLock = new object();
private Texture background;
public Texture Background
{
get
{
lock (backgroundLock)
{
return background ?? (background = GetBackground());
}
}
}
private Track track;
private object trackLock = new object();
public Track Track
{
get
{
lock (trackLock)
{
return track ?? (track = GetTrack());
}
}
}
public bool TrackLoaded => track != null;
public void TransferTo(WorkingBeatmap other)
{
if (track != null && BeatmapInfo.AudioEquals(other.BeatmapInfo))
other.track = track;
}
public virtual void Dispose()
{
track?.Dispose();
track = null;
background?.Dispose();
background = null;
}
}
}

View File

@ -1,4 +1,7 @@
using System.IO;
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System.IO;
using osu.Framework.Audio.Track;
using osu.Framework.Graphics.Textures;
using osu.Game.Beatmaps;
@ -21,16 +24,9 @@ namespace osu.Game.Database
private ArchiveReader GetReader() => database?.GetReader(BeatmapSetInfo);
private Beatmap beatmap;
private object beatmapLock = new object();
public override Beatmap Beatmap
protected override Beatmap GetBeatmap()
{
get
{
lock (beatmapLock)
{
if (beatmap != null) return beatmap;
Beatmap beatmap;
try
{
using (var reader = GetReader())
@ -48,24 +44,14 @@ namespace osu.Game.Database
}
}
catch { return null; }
return beatmap;
}
}
}
private object backgroundLock = new object();
private Texture background;
public override Texture Background
protected override Texture GetBackground()
{
get
{
lock (backgroundLock)
{
if (background != null) return background;
if (BeatmapInfo?.Metadata?.BackgroundFile == null) return null;
Texture background;
if (BeatmapInfo?.Metadata?.BackgroundFile == null)
return null;
try
{
using (var reader = GetReader())
@ -76,52 +62,23 @@ namespace osu.Game.Database
}
}
catch { return null; }
return background;
}
}
}
private ArchiveReader trackReader;
private Track track;
private object trackLock = new object();
public override Track Track
protected override Track GetTrack()
{
get
{
lock (trackLock)
{
if (track != null) return track;
Track track;
try
{
//store a reference to the reader as we may continue accessing the stream in the background.
trackReader = GetReader();
var trackData = trackReader?.GetStream(BeatmapInfo.Metadata.AudioFile);
if (trackData != null)
track = new TrackBass(trackData);
track = trackData == null ? null : new TrackBass(trackData);
}
catch { return null; }
return track;
}
}
}
public override bool TrackLoaded => track != null;
public override void TransferTo(WorkingBeatmap other)
{
var _other = (DatabaseWorkingBeatmap)other;
if (track != null && BeatmapInfo.AudioEquals(_other.BeatmapInfo))
_other.track = track;
}
public override void Dispose()
{
background?.Dispose();
background = null;
}
}
}
}