Rewrite much state logic

This commit is contained in:
Dean Herbert
2018-06-06 16:17:51 +09:00
parent 9e25e02696
commit 55921efffb
7 changed files with 42 additions and 35 deletions

View File

@ -16,6 +16,7 @@ using osu.Framework.Input.Bindings;
using osu.Framework.Threading;
using osu.Game.Graphics;
using osu.Game.Input.Bindings;
using osu.Game.Overlays;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Input;
@ -129,9 +130,12 @@ namespace osu.Game.Screens.Menu
buttonFlow.AddRange(buttonsTopLevel);
}
private OsuGame game;
[BackgroundDependencyLoader(true)]
private void load(AudioManager audio)
private void load(AudioManager audio, OsuGame game)
{
this.game = game;
sampleBack = audio.Sample.Get(@"Menu/button-back-select");
}
@ -321,6 +325,8 @@ namespace osu.Game.Screens.Menu
{
logoTracking = false;
game.OverlayActivationMode.Value = state == MenuState.Exit ? OverlayActivation.Disabled : OverlayActivation.UserTriggered;
logo.ClearTransforms(targetMember: nameof(Position));
logo.RelativePositionAxes = Axes.Both;
@ -352,6 +358,9 @@ namespace osu.Game.Screens.Menu
if (impact)
logo.Impact();
game.OverlayActivationMode.Value = OverlayActivation.All;
game.Toolbar.State = Visibility.Visible;
}, 200);
break;
default:

View File

@ -20,7 +20,7 @@ namespace osu.Game.Screens.Menu
private Color4 iconColour;
protected override bool HideOverlaysOnEnter => true;
protected override OverlayActivation OverlayActivationLevel => OverlayActivation.Disabled;
protected override OverlayActivation InitialOverlayActivationMode => OverlayActivation.Disabled;
public override bool CursorVisible => false;

View File

@ -33,7 +33,7 @@ namespace osu.Game.Screens.Menu
private SampleChannel seeya;
protected override bool HideOverlaysOnEnter => true;
protected override OverlayActivation OverlayActivationLevel => OverlayActivation.Disabled;
protected override OverlayActivation InitialOverlayActivationMode => OverlayActivation.Disabled;
public override bool CursorVisible => false;

View File

@ -63,8 +63,6 @@ namespace osu.Game.Screens.Menu
},
sideFlashes = new MenuSideFlashes(),
};
buttons.StateChanged += state => UpdateOverlayStates?.Invoke();
}
[BackgroundDependencyLoader(true)]

View File

@ -44,22 +44,17 @@ namespace osu.Game.Screens
private Action updateOverlayStates;
/// <summary>
/// Allows manually updating visibility of all overlays if <see cref="HideOverlaysOnEnter"/> is not enough.
/// </summary>
protected Action UpdateOverlayStates => updateOverlayStates;
/// <summary>
/// Whether all overlays should be hidden when this screen is entered or resumed.
/// </summary>
protected virtual bool HideOverlaysOnEnter => false;
private readonly Bindable<OverlayActivation> allowOverlays = new Bindable<OverlayActivation>();
protected readonly Bindable<OverlayActivation> OverlayActivationMode = new Bindable<OverlayActivation>();
/// <summary>
/// Whether overlays should be able to be opened once this screen is entered or resumed.
/// </summary>
protected virtual OverlayActivation OverlayActivationLevel => OverlayActivation.All;
protected virtual OverlayActivation InitialOverlayActivationMode => OverlayActivation.All;
/// <summary>
/// Whether this <see cref="OsuScreen"/> allows the cursor to be displayed.
@ -110,15 +105,12 @@ namespace osu.Game.Screens
if (osuGame != null)
{
Ruleset.BindTo(osuGame.Ruleset);
allowOverlays.BindTo(osuGame.OverlayActivationMode);
OverlayActivationMode.BindTo(osuGame.OverlayActivationMode);
updateOverlayStates = () =>
{
if (HideOverlaysOnEnter)
{
osuGame.CloseAllOverlays();
osuGame.Toolbar.State = Visibility.Hidden;
}
else
osuGame.Toolbar.State = Visibility.Visible;
};
@ -257,7 +249,7 @@ namespace osu.Game.Screens
if (backgroundParallaxContainer != null)
backgroundParallaxContainer.ParallaxAmount = ParallaxContainer.DEFAULT_PARALLAX_AMOUNT * BackgroundParallaxAmount;
allowOverlays.Value = OverlayActivationLevel;
OverlayActivationMode.Value = InitialOverlayActivationMode;
updateOverlayStates?.Invoke();
}

View File

@ -38,7 +38,7 @@ namespace osu.Game.Screens.Play
protected override bool HideOverlaysOnEnter => true;
protected override OverlayActivation OverlayActivationLevel => OverlayActivation.UserTriggered;
protected override OverlayActivation InitialOverlayActivationMode => OverlayActivation.UserTriggered;
public Action RestartRequested;