1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-13 22:35:23 +08:00

Handle GlobalAction.Back

This commit is contained in:
TocoToucan 2018-04-29 20:15:09 +03:00
parent 42aa02579b
commit 804b59ee80
2 changed files with 55 additions and 22 deletions

View File

@ -6,22 +6,24 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using osu.Framework; using osu.Framework;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio;
using osu.Framework.Audio.Sample;
using osu.Framework.Configuration;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Shapes;
using osu.Framework.Input; using osu.Framework.Input;
using osu.Framework.Input.Bindings;
using osu.Framework.Threading;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Input.Bindings;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;
using OpenTK.Input; using OpenTK.Input;
using osu.Framework.Audio.Sample;
using osu.Framework.Audio;
using osu.Framework.Configuration;
using osu.Framework.Threading;
namespace osu.Game.Screens.Menu namespace osu.Game.Screens.Menu
{ {
public class ButtonSystem : Container, IStateful<MenuState> public class ButtonSystem : Container, IStateful<MenuState>, IKeyBindingHandler<GlobalAction>
{ {
public event Action<MenuState> StateChanged; public event Action<MenuState> StateChanged;
@ -146,7 +148,16 @@ namespace osu.Game.Screens.Menu
case Key.Space: case Key.Space:
logo?.TriggerOnClick(state); logo?.TriggerOnClick(state);
return true; return true;
case Key.Escape: }
return false;
}
public bool OnPressed(GlobalAction action)
{
switch (action)
{
case GlobalAction.Back:
switch (State) switch (State)
{ {
case MenuState.TopLevel: case MenuState.TopLevel:
@ -155,14 +166,26 @@ namespace osu.Game.Screens.Menu
case MenuState.Play: case MenuState.Play:
backButton.TriggerOnClick(); backButton.TriggerOnClick();
return true; return true;
default:
return false;
} }
default:
return false; return false;
} }
return false;
} }
public bool OnReleased(GlobalAction action)
{
switch (action)
{
case GlobalAction.Back:
return true;
default:
return false;
}
}
private void onPlay() private void onPlay()
{ {
State = MenuState.Play; State = MenuState.Play;
@ -337,6 +360,7 @@ namespace osu.Game.Screens.Menu
logo.ScaleTo(0.5f, 200, Easing.OutQuint); logo.ScaleTo(0.5f, 200, Easing.OutQuint);
break; break;
} }
break; break;
case MenuState.EnteringMode: case MenuState.EnteringMode:
logoTracking = true; logoTracking = true;

View File

@ -3,22 +3,22 @@
using System; using System;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio;
using osu.Framework.Audio.Sample;
using osu.Framework.Configuration; using osu.Framework.Configuration;
using osu.Framework.Graphics;
using osu.Framework.Input.Bindings;
using osu.Framework.Screens; using osu.Framework.Screens;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Graphics.Containers; using osu.Game.Graphics.Containers;
using OpenTK; using osu.Game.Input.Bindings;
using osu.Framework.Audio.Sample;
using osu.Framework.Audio;
using osu.Framework.Graphics;
using osu.Game.Rulesets; using osu.Game.Rulesets;
using osu.Game.Screens.Menu; using osu.Game.Screens.Menu;
using osu.Framework.Input; using OpenTK;
using OpenTK.Input;
namespace osu.Game.Screens namespace osu.Game.Screens
{ {
public abstract class OsuScreen : Screen public abstract class OsuScreen : Screen, IKeyBindingHandler<GlobalAction>
{ {
public BackgroundScreen Background { get; private set; } public BackgroundScreen Background { get; private set; }
@ -90,18 +90,27 @@ namespace osu.Game.Screens
sampleExit = audio.Sample.Get(@"UI/screen-back"); sampleExit = audio.Sample.Get(@"UI/screen-back");
} }
protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) public bool OnPressed(GlobalAction action)
{ {
if (args.Repeat || !IsCurrentScreen) return false; switch (action)
switch (args.Key)
{ {
case Key.Escape: case GlobalAction.Back:
Exit(); Exit();
return true; return true;
default:
return false;
} }
}
return base.OnKeyDown(state, args); public bool OnReleased(GlobalAction action)
{
switch (action)
{
case GlobalAction.Back:
return true;
default:
return false;
}
} }
protected override void OnResuming(Screen last) protected override void OnResuming(Screen last)