mirror of
https://github.com/ppy/osu.git
synced 2025-01-12 20:22:55 +08:00
Update TrackVirtual consumption
This commit is contained in:
parent
08ab1e5df7
commit
a1cc8c448f
@ -1,11 +1,10 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Audio.Track;
|
using osu.Framework.Audio.Track;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.IO.Stores;
|
|
||||||
using osu.Game.Audio;
|
using osu.Game.Audio;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
|
|
||||||
@ -116,13 +115,15 @@ namespace osu.Game.Tests.Visual.Components
|
|||||||
|
|
||||||
protected class TestPreviewTrack : TrackManagerPreviewTrack
|
protected class TestPreviewTrack : TrackManagerPreviewTrack
|
||||||
{
|
{
|
||||||
public TestPreviewTrack(BeatmapSetInfo beatmapSetInfo, IResourceStore<Track> trackManager)
|
private readonly ITrackStore trackManager;
|
||||||
|
|
||||||
public TestPreviewTrack(BeatmapSetInfo beatmapSetInfo, ITrackStore trackManager)
|
public TestPreviewTrack(BeatmapSetInfo beatmapSetInfo, ITrackStore trackManager)
|
||||||
: base(beatmapSetInfo, trackManager)
|
: base(beatmapSetInfo, trackManager)
|
||||||
{
|
{
|
||||||
|
this.trackManager = trackManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Track GetTrack() => new TrackVirtual { Length = 100000 };
|
protected override Track GetTrack() => trackManager.GetVirtual(100000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ namespace osu.Game.Beatmaps
|
|||||||
|
|
||||||
protected override Texture GetBackground() => game?.Textures.Get(@"Backgrounds/bg4");
|
protected override Texture GetBackground() => game?.Textures.Get(@"Backgrounds/bg4");
|
||||||
|
|
||||||
protected override Track GetTrack() => new TrackVirtual { Length = 1000 };
|
protected override Track GetTrack() => game?.Audio.Tracks.GetVirtual(1000);
|
||||||
|
|
||||||
private class DummyRulesetInfo : RulesetInfo
|
private class DummyRulesetInfo : RulesetInfo
|
||||||
{
|
{
|
||||||
|
@ -15,12 +15,13 @@ using osu.Framework.Audio;
|
|||||||
using osu.Game.IO.Serialization;
|
using osu.Game.IO.Serialization;
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
using osu.Game.Rulesets.Objects;
|
using osu.Game.Rulesets.Objects;
|
||||||
|
using osu.Game.Rulesets.Objects.Types;
|
||||||
using osu.Game.Rulesets.UI;
|
using osu.Game.Rulesets.UI;
|
||||||
using osu.Game.Skinning;
|
using osu.Game.Skinning;
|
||||||
|
|
||||||
namespace osu.Game.Beatmaps
|
namespace osu.Game.Beatmaps
|
||||||
{
|
{
|
||||||
public abstract partial class WorkingBeatmap : IDisposable
|
public abstract class WorkingBeatmap : IDisposable
|
||||||
{
|
{
|
||||||
public readonly BeatmapInfo BeatmapInfo;
|
public readonly BeatmapInfo BeatmapInfo;
|
||||||
|
|
||||||
@ -47,13 +48,39 @@ namespace osu.Game.Beatmaps
|
|||||||
return b;
|
return b;
|
||||||
});
|
});
|
||||||
|
|
||||||
track = new RecyclableLazy<Track>(() => GetTrack() ?? new VirtualBeatmapTrack(Beatmap));
|
track = new RecyclableLazy<Track>(() => GetTrack() ?? GetVirtualTrack(Beatmap));
|
||||||
background = new RecyclableLazy<Texture>(GetBackground, BackgroundStillValid);
|
background = new RecyclableLazy<Texture>(GetBackground, BackgroundStillValid);
|
||||||
waveform = new RecyclableLazy<Waveform>(GetWaveform);
|
waveform = new RecyclableLazy<Waveform>(GetWaveform);
|
||||||
storyboard = new RecyclableLazy<Storyboard>(GetStoryboard);
|
storyboard = new RecyclableLazy<Storyboard>(GetStoryboard);
|
||||||
skin = new RecyclableLazy<Skin>(GetSkin);
|
skin = new RecyclableLazy<Skin>(GetSkin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual Track GetVirtualTrack(IBeatmap beatmap)
|
||||||
|
{
|
||||||
|
const double excess_length = 1000;
|
||||||
|
|
||||||
|
var lastObject = beatmap.HitObjects.LastOrDefault();
|
||||||
|
|
||||||
|
double length;
|
||||||
|
|
||||||
|
switch (lastObject)
|
||||||
|
{
|
||||||
|
case null:
|
||||||
|
length = excess_length;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IHasEndTime endTime:
|
||||||
|
length = endTime.EndTime + excess_length;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
length = lastObject.StartTime + excess_length;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return AudioManager.Tracks.GetVirtual(length);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Saves the <see cref="Beatmaps.Beatmap"/>.
|
/// Saves the <see cref="Beatmaps.Beatmap"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
|
||||||
|
|
||||||
using System.Linq;
|
|
||||||
using osu.Framework.Audio.Track;
|
|
||||||
using osu.Game.Rulesets.Objects;
|
|
||||||
using osu.Game.Rulesets.Objects.Types;
|
|
||||||
|
|
||||||
namespace osu.Game.Beatmaps
|
|
||||||
{
|
|
||||||
public partial class WorkingBeatmap
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// A type of <see cref="TrackVirtual"/> which provides a valid length based on the <see cref="HitObject"/>s of an <see cref="IBeatmap"/>.
|
|
||||||
/// </summary>
|
|
||||||
protected class VirtualBeatmapTrack : TrackVirtual
|
|
||||||
{
|
|
||||||
private const double excess_length = 1000;
|
|
||||||
|
|
||||||
public VirtualBeatmapTrack(IBeatmap beatmap)
|
|
||||||
{
|
|
||||||
var lastObject = beatmap.HitObjects.LastOrDefault();
|
|
||||||
|
|
||||||
switch (lastObject)
|
|
||||||
{
|
|
||||||
case null:
|
|
||||||
Length = excess_length;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IHasEndTime endTime:
|
|
||||||
Length = endTime.EndTime + excess_length;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
Length = lastObject.StartTime + excess_length;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user