Rework preview tracks to reduce usage complexities

This commit is contained in:
smoogipoo
2018-06-21 16:19:07 +09:00
parent ab2889da1f
commit b2066c5d73
10 changed files with 172 additions and 90 deletions

View File

@ -13,17 +13,17 @@ namespace osu.Game.Audio
{
public class PreviewTrackManager : Component
{
private readonly BindableDouble muteBindable = new BindableDouble();
private AudioManager audio;
private TrackManager trackManager;
private BindableDouble muteBindable;
public PreviewTrack CurrentTrack { get; private set; }
private TrackManagerPreviewTrack current;
[BackgroundDependencyLoader]
private void load(AudioManager audio, FrameworkConfigManager config)
{
trackManager = new TrackManager(new OnlineStore());
muteBindable = new BindableDouble();
this.audio = audio;
audio.AddItem(trackManager);
@ -31,30 +31,55 @@ namespace osu.Game.Audio
config.BindWith(FrameworkSetting.VolumeMusic, trackManager.Volume);
}
protected override void Update()
public PreviewTrack Get(BeatmapSetInfo beatmapSetInfo)
{
if (CurrentTrack?.Track.HasCompleted ?? false)
CurrentTrack.Stop();
var track = new TrackManagerPreviewTrack(beatmapSetInfo, trackManager);
base.Update();
}
public Track Get(PreviewTrack previewTrack, BeatmapSetInfo beatmapSetInfo)
{
previewTrack.Started += () =>
track.Started += () =>
{
CurrentTrack?.Stop();
CurrentTrack = previewTrack;
current?.Stop();
current = track;
audio.Track.AddAdjustment(AdjustableProperty.Volume, muteBindable);
};
previewTrack.Stopped += () =>
track.Stopped += () =>
{
CurrentTrack = null;
current = null;
audio.Track.RemoveAdjustment(AdjustableProperty.Volume, muteBindable);
};
return trackManager.Get($"https://b.ppy.sh/preview/{beatmapSetInfo?.OnlineBeatmapSetID}.mp3");
return track;
}
public void Stop(IPreviewTrackOwner source)
{
if (current?.Owner != source)
return;
current?.Stop();
current = null;
}
private class TrackManagerPreviewTrack : PreviewTrack
{
public IPreviewTrackOwner Owner { get; private set; }
private readonly BeatmapSetInfo beatmapSetInfo;
private readonly TrackManager trackManager;
public TrackManagerPreviewTrack(BeatmapSetInfo beatmapSetInfo, TrackManager trackManager)
{
this.beatmapSetInfo = beatmapSetInfo;
this.trackManager = trackManager;
}
[BackgroundDependencyLoader]
private void load(IPreviewTrackOwner owner)
{
Owner = owner;
}
protected override Track GetTrack() => trackManager.Get($"https://b.ppy.sh/preview/{beatmapSetInfo?.OnlineBeatmapSetID}.mp3");
}
}
}