1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-21 00:53:31 +08:00

Better pause logic

This commit is contained in:
Dean Herbert 2018-07-11 17:01:27 +09:00
parent ffd3040fe2
commit c2cdf12986
3 changed files with 19 additions and 14 deletions

View File

@ -89,6 +89,14 @@ namespace osu.Game.Rulesets.UI
Ruleset = ruleset;
playfield = new Lazy<Playfield>(CreatePlayfield);
IsPaused.ValueChanged += paused =>
{
if (HasReplayLoaded)
return;
KeyBindingInputManager.UseParentInput = !paused;
};
Cursor = CreateCursor();
}
@ -120,6 +128,11 @@ namespace osu.Game.Rulesets.UI
public Replay Replay { get; private set; }
/// <summary>
/// Whether the game is paused. Used to block user input.
/// </summary>
public readonly BindableBool IsPaused = new BindableBool();
/// <summary>
/// Sets a replay to be used, overriding local input.
/// </summary>

View File

@ -4,6 +4,7 @@
using System;
using System.Linq;
using osu.Framework.Allocation;
using osu.Framework.Configuration;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Timing;
@ -18,7 +19,7 @@ namespace osu.Game.Screens.Play
/// </summary>
public class PauseContainer : Container
{
public bool IsPaused { get; private set; }
public readonly BindableBool IsPaused = new BindableBool();
public Func<bool> CheckCanPause;
@ -39,9 +40,6 @@ namespace osu.Game.Screens.Play
public Action OnRetry;
public Action OnQuit;
public Action OnResume;
public Action OnPause;
private readonly FramedClock framedClock;
private readonly DecoupleableInterpolatingFramedClock decoupledClock;
@ -84,9 +82,8 @@ namespace osu.Game.Screens.Play
// stop the seekable clock (stops the audio eventually)
decoupledClock.Stop();
IsPaused = true;
IsPaused.Value = true;
OnPause?.Invoke();
pauseOverlay.Show();
lastPauseActionTime = Time.Current;
@ -96,7 +93,7 @@ namespace osu.Game.Screens.Play
{
if (!IsPaused) return;
IsPaused = false;
IsPaused.Value = false;
IsResuming = false;
lastPauseActionTime = Time.Current;
@ -105,7 +102,6 @@ namespace osu.Game.Screens.Play
decoupledClock.Seek(decoupledClock.CurrentTime);
decoupledClock.Start();
OnResume?.Invoke();
pauseOverlay.Hide();
}

View File

@ -165,12 +165,6 @@ namespace osu.Game.Screens.Play
OnRetry = Restart,
OnQuit = Exit,
CheckCanPause = () => AllowPause && ValidForResume && !HasFailed && !RulesetContainer.HasReplayLoaded,
OnPause = () =>
{
pauseContainer.Retries = RestartCount;
hudOverlay.KeyCounter.IsCounting = !pauseContainer.IsPaused;
},
OnResume = () => hudOverlay.KeyCounter.IsCounting = true,
Children = new[]
{
storyboardContainer = new Container
@ -227,6 +221,8 @@ namespace osu.Game.Screens.Play
hudOverlay.HoldToQuit.Action = Exit;
hudOverlay.KeyCounter.Visible.BindTo(RulesetContainer.HasReplayLoaded);
RulesetContainer.IsPaused.BindTo(pauseContainer.IsPaused);
if (ShowStoryboard)
initializeStoryboard(false);