mirror of
https://github.com/ppy/osu.git
synced 2025-01-12 16:02:55 +08:00
Merge pull request #22079 from Joehuu/fix-pause-gameplay-action-not-closing
Make pause overlay close with pause gameplay action
This commit is contained in:
commit
3f2077a527
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
@ -34,6 +35,12 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
base.Content.Add(content = new GlobalCursorDisplay { RelativeSizeAxes = Axes.Both });
|
base.Content.Add(content = new GlobalCursorDisplay { RelativeSizeAxes = Axes.Both });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load()
|
||||||
|
{
|
||||||
|
LocalConfig.SetValue(OsuSetting.UIHoldActivationDelay, 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
[SetUpSteps]
|
[SetUpSteps]
|
||||||
public override void SetUpSteps()
|
public override void SetUpSteps()
|
||||||
{
|
{
|
||||||
@ -43,6 +50,22 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
confirmClockRunning(true);
|
confirmClockRunning(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestTogglePauseViaBackAction()
|
||||||
|
{
|
||||||
|
pauseViaBackAction();
|
||||||
|
pauseViaBackAction();
|
||||||
|
confirmPausedWithNoOverlay();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestTogglePauseViaPauseGameplayAction()
|
||||||
|
{
|
||||||
|
pauseViaPauseGameplayAction();
|
||||||
|
pauseViaPauseGameplayAction();
|
||||||
|
confirmPausedWithNoOverlay();
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestPauseWithLargeOffset()
|
public void TestPauseWithLargeOffset()
|
||||||
{
|
{
|
||||||
@ -144,7 +167,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
{
|
{
|
||||||
AddStep("disable pause support", () => Player.Configuration.AllowPause = false);
|
AddStep("disable pause support", () => Player.Configuration.AllowPause = false);
|
||||||
|
|
||||||
pauseFromUserExitKey();
|
pauseViaBackAction();
|
||||||
confirmExited();
|
confirmExited();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,7 +179,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
pauseAndConfirm();
|
pauseAndConfirm();
|
||||||
|
|
||||||
resume();
|
resume();
|
||||||
pauseFromUserExitKey();
|
pauseViaBackAction();
|
||||||
|
|
||||||
confirmResumed();
|
confirmResumed();
|
||||||
confirmNotExited();
|
confirmNotExited();
|
||||||
@ -170,7 +193,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
pauseAndConfirm();
|
pauseAndConfirm();
|
||||||
|
|
||||||
resume();
|
resume();
|
||||||
AddStep("pause via exit key", () => Player.ExitViaQuickExit());
|
exitViaQuickExitAction();
|
||||||
|
|
||||||
confirmResumed();
|
confirmResumed();
|
||||||
AddAssert("exited", () => !Player.IsCurrentScreen());
|
AddAssert("exited", () => !Player.IsCurrentScreen());
|
||||||
@ -214,7 +237,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
|
|
||||||
confirmClockRunning(false);
|
confirmClockRunning(false);
|
||||||
|
|
||||||
AddStep("exit via user pause", () => Player.ExitViaPause());
|
pauseViaBackAction();
|
||||||
confirmExited();
|
confirmExited();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,11 +247,11 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
AddUntilStep("wait for fail", () => Player.GameplayState.HasFailed);
|
AddUntilStep("wait for fail", () => Player.GameplayState.HasFailed);
|
||||||
|
|
||||||
// will finish the fail animation and show the fail/pause screen.
|
// will finish the fail animation and show the fail/pause screen.
|
||||||
AddStep("attempt exit via pause key", () => Player.ExitViaPause());
|
pauseViaBackAction();
|
||||||
AddAssert("fail overlay shown", () => Player.FailOverlayVisible);
|
AddAssert("fail overlay shown", () => Player.FailOverlayVisible);
|
||||||
|
|
||||||
// will actually exit.
|
// will actually exit.
|
||||||
AddStep("exit via pause key", () => Player.ExitViaPause());
|
pauseViaBackAction();
|
||||||
confirmExited();
|
confirmExited();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,7 +268,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
public void TestQuickExitFromFailedGameplay()
|
public void TestQuickExitFromFailedGameplay()
|
||||||
{
|
{
|
||||||
AddUntilStep("wait for fail", () => Player.GameplayState.HasFailed);
|
AddUntilStep("wait for fail", () => Player.GameplayState.HasFailed);
|
||||||
AddStep("quick exit", () => Player.GameplayClockContainer.ChildrenOfType<HotkeyExitOverlay>().First().Action?.Invoke());
|
exitViaQuickExitAction();
|
||||||
|
|
||||||
confirmExited();
|
confirmExited();
|
||||||
}
|
}
|
||||||
@ -261,7 +284,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
[Test]
|
[Test]
|
||||||
public void TestQuickExitFromGameplay()
|
public void TestQuickExitFromGameplay()
|
||||||
{
|
{
|
||||||
AddStep("quick exit", () => Player.GameplayClockContainer.ChildrenOfType<HotkeyExitOverlay>().First().Action?.Invoke());
|
exitViaQuickExitAction();
|
||||||
|
|
||||||
confirmExited();
|
confirmExited();
|
||||||
}
|
}
|
||||||
@ -327,7 +350,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
|
|
||||||
private void pauseAndConfirm()
|
private void pauseAndConfirm()
|
||||||
{
|
{
|
||||||
pauseFromUserExitKey();
|
pauseViaBackAction();
|
||||||
confirmPaused();
|
confirmPaused();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -374,7 +397,17 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void restart() => AddStep("restart", () => Player.Restart());
|
private void restart() => AddStep("restart", () => Player.Restart());
|
||||||
private void pauseFromUserExitKey() => AddStep("user pause", () => Player.ExitViaPause());
|
private void pauseViaBackAction() => AddStep("press escape", () => InputManager.Key(Key.Escape));
|
||||||
|
private void pauseViaPauseGameplayAction() => AddStep("press middle mouse", () => InputManager.Click(MouseButton.Middle));
|
||||||
|
|
||||||
|
private void exitViaQuickExitAction() => AddStep("press ctrl-tilde", () =>
|
||||||
|
{
|
||||||
|
InputManager.PressKey(Key.ControlLeft);
|
||||||
|
InputManager.PressKey(Key.Tilde);
|
||||||
|
InputManager.ReleaseKey(Key.Tilde);
|
||||||
|
InputManager.ReleaseKey(Key.ControlLeft);
|
||||||
|
});
|
||||||
|
|
||||||
private void resume() => AddStep("resume", () => Player.Resume());
|
private void resume() => AddStep("resume", () => Player.Resume());
|
||||||
|
|
||||||
private void confirmPauseOverlayShown(bool isShown) =>
|
private void confirmPauseOverlayShown(bool isShown) =>
|
||||||
@ -405,10 +438,6 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
|
|
||||||
public bool PauseOverlayVisible => PauseOverlay.State.Value == Visibility.Visible;
|
public bool PauseOverlayVisible => PauseOverlay.State.Value == Visibility.Visible;
|
||||||
|
|
||||||
public void ExitViaPause() => PerformExit(true);
|
|
||||||
|
|
||||||
public void ExitViaQuickExit() => PerformExit(false);
|
|
||||||
|
|
||||||
public override void OnEntering(ScreenTransitionEvent e)
|
public override void OnEntering(ScreenTransitionEvent e)
|
||||||
{
|
{
|
||||||
base.OnEntering(e);
|
base.OnEntering(e);
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Extensions;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Effects;
|
using osu.Framework.Graphics.Effects;
|
||||||
@ -14,6 +15,7 @@ using osu.Framework.Input.Events;
|
|||||||
using osu.Game.Input.Bindings;
|
using osu.Game.Input.Bindings;
|
||||||
using osu.Game.Overlays;
|
using osu.Game.Overlays;
|
||||||
using osuTK;
|
using osuTK;
|
||||||
|
using osuTK.Input;
|
||||||
|
|
||||||
namespace osu.Game.Graphics.UserInterfaceV2
|
namespace osu.Game.Graphics.UserInterfaceV2
|
||||||
{
|
{
|
||||||
@ -58,6 +60,14 @@ namespace osu.Game.Graphics.UserInterfaceV2
|
|||||||
this.FadeOut(fade_duration, Easing.OutQuint);
|
this.FadeOut(fade_duration, Easing.OutQuint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override bool OnKeyDown(KeyDownEvent e)
|
||||||
|
{
|
||||||
|
if (e.Key == Key.Escape)
|
||||||
|
return false; // disable the framework-level handling of escape key for conformity (we use GlobalAction.Back).
|
||||||
|
|
||||||
|
return base.OnKeyDown(e);
|
||||||
|
}
|
||||||
|
|
||||||
public bool OnPressed(KeyBindingPressEvent<GlobalAction> e)
|
public bool OnPressed(KeyBindingPressEvent<GlobalAction> e)
|
||||||
{
|
{
|
||||||
if (e.Repeat)
|
if (e.Repeat)
|
||||||
@ -68,7 +78,7 @@ namespace osu.Game.Graphics.UserInterfaceV2
|
|||||||
|
|
||||||
if (e.Action == GlobalAction.Back)
|
if (e.Action == GlobalAction.Back)
|
||||||
{
|
{
|
||||||
Hide();
|
this.HidePopover();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,9 +155,9 @@ namespace osu.Game.Localisation
|
|||||||
public static LocalisableString ToggleProfile => new TranslatableString(getKey(@"toggle_profile"), @"Toggle profile");
|
public static LocalisableString ToggleProfile => new TranslatableString(getKey(@"toggle_profile"), @"Toggle profile");
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// "Pause gameplay"
|
/// "Pause / resume gameplay"
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LocalisableString PauseGameplay => new TranslatableString(getKey(@"pause_gameplay"), @"Pause gameplay");
|
public static LocalisableString PauseGameplay => new TranslatableString(getKey(@"pause_gameplay"), @"Pause / resume gameplay");
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// "Setup mode"
|
/// "Setup mode"
|
||||||
|
@ -44,7 +44,7 @@ namespace osu.Game.Screens.Play
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Action that is invoked when <see cref="GlobalAction.Back"/> is triggered.
|
/// Action that is invoked when <see cref="GlobalAction.Back"/> is triggered.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected virtual Action BackAction => () => InternalButtons.Children.LastOrDefault()?.TriggerClick();
|
protected virtual Action BackAction => () => InternalButtons.LastOrDefault()?.TriggerClick();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Action that is invoked when <see cref="GlobalAction.Select"/> is triggered.
|
/// Action that is invoked when <see cref="GlobalAction.Select"/> is triggered.
|
||||||
@ -189,7 +189,7 @@ namespace osu.Game.Screens.Play
|
|||||||
InternalButtons.Add(button);
|
InternalButtons.Add(button);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool OnPressed(KeyBindingPressEvent<GlobalAction> e)
|
public virtual bool OnPressed(KeyBindingPressEvent<GlobalAction> e)
|
||||||
{
|
{
|
||||||
switch (e.Action)
|
switch (e.Action)
|
||||||
{
|
{
|
||||||
|
@ -8,8 +8,10 @@ using System.Linq;
|
|||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Audio;
|
using osu.Framework.Audio;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Input.Events;
|
||||||
using osu.Game.Audio;
|
using osu.Game.Audio;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
|
using osu.Game.Input.Bindings;
|
||||||
using osu.Game.Skinning;
|
using osu.Game.Skinning;
|
||||||
using osuTK.Graphics;
|
using osuTK.Graphics;
|
||||||
|
|
||||||
@ -26,7 +28,7 @@ namespace osu.Game.Screens.Play
|
|||||||
|
|
||||||
private SkinnableSound pauseLoop;
|
private SkinnableSound pauseLoop;
|
||||||
|
|
||||||
protected override Action BackAction => () => InternalButtons.Children.First().TriggerClick();
|
protected override Action BackAction => () => InternalButtons.First().TriggerClick();
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OsuColour colours)
|
private void load(OsuColour colours)
|
||||||
@ -56,5 +58,17 @@ namespace osu.Game.Screens.Play
|
|||||||
|
|
||||||
pauseLoop.VolumeTo(0, TRANSITION_DURATION, Easing.OutQuad).Finally(_ => pauseLoop.Stop());
|
pauseLoop.VolumeTo(0, TRANSITION_DURATION, Easing.OutQuad).Finally(_ => pauseLoop.Stop());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override bool OnPressed(KeyBindingPressEvent<GlobalAction> e)
|
||||||
|
{
|
||||||
|
switch (e.Action)
|
||||||
|
{
|
||||||
|
case GlobalAction.PauseGameplay:
|
||||||
|
InternalButtons.First().TriggerClick();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return base.OnPressed(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,17 +50,16 @@ namespace osu.Game.Tests.Visual
|
|||||||
{
|
{
|
||||||
var cursorDisplay = new GlobalCursorDisplay { RelativeSizeAxes = Axes.Both };
|
var cursorDisplay = new GlobalCursorDisplay { RelativeSizeAxes = Axes.Both };
|
||||||
|
|
||||||
cursorDisplay.Add(new OsuTooltipContainer(cursorDisplay.MenuCursor)
|
cursorDisplay.Add(content = new OsuTooltipContainer(cursorDisplay.MenuCursor)
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Child = mainContent
|
|
||||||
});
|
});
|
||||||
|
|
||||||
mainContent = cursorDisplay;
|
mainContent.Add(cursorDisplay);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CreateNestedActionContainer)
|
if (CreateNestedActionContainer)
|
||||||
mainContent = new GlobalActionContainer(null).WithChild(mainContent);
|
mainContent.Add(new GlobalActionContainer(null));
|
||||||
|
|
||||||
base.Content.AddRange(new Drawable[]
|
base.Content.AddRange(new Drawable[]
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user