diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index cdd22e26ae..e5e552eaab 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -41,6 +41,7 @@ namespace osu.Game.Beatmaps private readonly Lazy waveform; private readonly Lazy storyboard; private readonly Lazy skin; + private Track track; // track is not Lazy as we allow transferring and loading multiple times. protected WorkingBeatmap(BeatmapInfo beatmapInfo, AudioManager audioManager) { @@ -59,13 +60,6 @@ namespace osu.Game.Beatmaps public Texture Background => GetBackground(); // Texture uses ref counting, so we want to return a new instance every usage. public ISkin Skin => skin.Value; - #region Load checks - - public virtual bool TrackLoaded => loadedTrack != null; - public virtual bool BeatmapLoaded => beatmapLoadTask?.IsCompleted ?? false; - - #endregion - #region Resource getters protected virtual Waveform GetWaveform() => new Waveform(null); @@ -107,9 +101,9 @@ namespace osu.Game.Beatmaps #region Track - private Track loadedTrack; + public virtual bool TrackLoaded => track != null; - public Track LoadTrack() => loadedTrack = GetBeatmapTrack() ?? GetVirtualTrack(1000); + public Track LoadTrack() => track = GetBeatmapTrack() ?? GetVirtualTrack(1000); public void PrepareTrackForPreviewLooping() { @@ -133,7 +127,7 @@ namespace osu.Game.Beatmaps /// across difficulties in the same beatmap set. /// /// The track to transfer. - public void TransferTrack([NotNull] Track track) => loadedTrack = track ?? throw new ArgumentNullException(nameof(track)); + public void TransferTrack([NotNull] Track track) => this.track = track ?? throw new ArgumentNullException(nameof(track)); /// /// Get the loaded audio track instance. must have first been called. @@ -146,7 +140,7 @@ namespace osu.Game.Beatmaps if (!TrackLoaded) throw new InvalidOperationException($"Cannot access {nameof(Track)} without first calling {nameof(LoadTrack)}."); - return loadedTrack; + return track; } } @@ -180,6 +174,8 @@ namespace osu.Game.Beatmaps #region Beatmap + public virtual bool BeatmapLoaded => beatmapLoadTask?.IsCompleted ?? false; + public IBeatmap Beatmap { get