Fix user pause not being cancelled when playing audio

This commit is contained in:
Dean Herbert 2019-10-10 16:52:51 +09:00
parent f74c79c2b8
commit e66f9adb86
2 changed files with 32 additions and 20 deletions

View File

@ -98,20 +98,13 @@ namespace osu.Game.Overlays
/// <summary> /// <summary>
/// Start playing the current track (if not already playing). /// Start playing the current track (if not already playing).
/// </summary> /// </summary>
public void Play()
{
if (!IsPlaying)
TogglePause();
}
/// <summary>
/// Toggle pause / play.
/// </summary>
/// <returns>Whether the operation was successful.</returns> /// <returns>Whether the operation was successful.</returns>
public bool TogglePause() public bool Play(bool restart = false)
{ {
var track = current?.Track; var track = current?.Track;
IsUserPaused = false;
if (track == null) if (track == null)
{ {
if (beatmap.Disabled) if (beatmap.Disabled)
@ -121,16 +114,40 @@ namespace osu.Game.Overlays
return true; return true;
} }
if (restart)
track.Restart();
else if (!IsPlaying)
track.Start();
return true;
}
/// <summary>
/// Stop playing the current track and pause at the current position.
/// </summary>
public void Stop()
{
var track = current?.Track;
if (track.IsRunning) if (track.IsRunning)
{ {
IsUserPaused = true; IsUserPaused = true;
track.Stop(); track.Stop();
} }
}
/// <summary>
/// Toggle pause / play.
/// </summary>
/// <returns>Whether the operation was successful.</returns>
public bool TogglePause()
{
var track = current?.Track;
if (track?.IsRunning == true)
Stop();
else else
{ Play();
track.Start();
IsUserPaused = false;
}
return true; return true;
} }

View File

@ -597,12 +597,7 @@ namespace osu.Game.Screens.Select
track.RestartPoint = Beatmap.Value.Metadata.PreviewTime; track.RestartPoint = Beatmap.Value.Metadata.PreviewTime;
if (!track.IsRunning && (music?.IsUserPaused != true || isNewTrack)) if (!track.IsRunning && (music?.IsUserPaused != true || isNewTrack))
{ music?.Play(fromPreviewPoint);
if (fromPreviewPoint)
track.Restart();
else
track.Start();
}
lastTrack.SetTarget(track); lastTrack.SetTarget(track);
} }