1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-15 16:25:32 +08:00

Fix GameplayClockContainer operating on beatmap's track after scren exited

This commit is contained in:
Dean Herbert 2019-11-01 14:11:18 +09:00
parent 7c3dd36add
commit ac02bb005d
2 changed files with 18 additions and 1 deletions

View File

@ -8,6 +8,7 @@ using System.Threading.Tasks;
using osu.Framework;
using osu.Framework.Allocation;
using osu.Framework.Audio;
using osu.Framework.Audio.Track;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
@ -29,7 +30,7 @@ namespace osu.Game.Screens.Play
/// <summary>
/// The original source (usually a <see cref="WorkingBeatmap"/>'s track).
/// </summary>
private readonly IAdjustableClock sourceClock;
private IAdjustableClock sourceClock;
public readonly BindableBool IsPaused = new BindableBool();
@ -153,6 +154,18 @@ namespace osu.Game.Screens.Play
IsPaused.Value = true;
}
/// <summary>
/// Changes the backing clock to avoid using the originally provided beatmap's track.
/// </summary>
public void StopUsingBeatmapClock()
{
if (sourceClock != beatmap.Track)
return;
sourceClock = new TrackVirtual(beatmap.Track.Length);
adjustableClock.ChangeSource(sourceClock);
}
public void ResetLocalAdjustments()
{
// In the case of replays, we may have changed the playback rate.

View File

@ -527,6 +527,10 @@ namespace osu.Game.Screens.Play
GameplayClockContainer.ResetLocalAdjustments();
// GameplayClockContainer performs seeks / start / stop operations on the beatmap's track.
// as we are no longer the current screen, we cannot guarantee the track is still usable.
GameplayClockContainer.StopUsingBeatmapClock();
fadeOut();
return base.OnExiting(next);
}