1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-15 06:42:56 +08:00

Expose MainMenu buttons

This commit is contained in:
Dean Herbert 2022-04-19 15:46:03 +09:00
parent 6d534046ff
commit c4bade0995
2 changed files with 24 additions and 16 deletions

View File

@ -88,6 +88,8 @@ namespace osu.Game.Screens.Menu
private readonly LogoTrackingContainer logoTrackingContainer; private readonly LogoTrackingContainer logoTrackingContainer;
public bool ReturnToTopOnIdle { get; set; } = true;
public ButtonSystem() public ButtonSystem()
{ {
RelativeSizeAxes = Axes.Both; RelativeSizeAxes = Axes.Both;
@ -101,7 +103,8 @@ namespace osu.Game.Screens.Menu
buttonArea.AddRange(new Drawable[] buttonArea.AddRange(new Drawable[]
{ {
new MainMenuButton(ButtonSystemStrings.Settings, string.Empty, FontAwesome.Solid.Cog, new Color4(85, 85, 85, 255), () => OnSettings?.Invoke(), -WEDGE_WIDTH, Key.O), new MainMenuButton(ButtonSystemStrings.Settings, string.Empty, FontAwesome.Solid.Cog, new Color4(85, 85, 85, 255), () => OnSettings?.Invoke(), -WEDGE_WIDTH, Key.O),
backButton = new MainMenuButton(ButtonSystemStrings.Back, @"button-back-select", OsuIcon.LeftCircle, new Color4(51, 58, 94, 255), () => State = ButtonSystemState.TopLevel, -WEDGE_WIDTH) backButton = new MainMenuButton(ButtonSystemStrings.Back, @"button-back-select", OsuIcon.LeftCircle, new Color4(51, 58, 94, 255), () => State = ButtonSystemState.TopLevel,
-WEDGE_WIDTH)
{ {
VisibleState = ButtonSystemState.Play, VisibleState = ButtonSystemState.Play,
}, },
@ -131,9 +134,11 @@ namespace osu.Game.Screens.Menu
buttonsPlay.Add(new MainMenuButton(ButtonSystemStrings.Playlists, @"button-generic-select", OsuIcon.Charts, new Color4(94, 63, 186, 255), onPlaylists, 0, Key.L)); buttonsPlay.Add(new MainMenuButton(ButtonSystemStrings.Playlists, @"button-generic-select", OsuIcon.Charts, new Color4(94, 63, 186, 255), onPlaylists, 0, Key.L));
buttonsPlay.ForEach(b => b.VisibleState = ButtonSystemState.Play); buttonsPlay.ForEach(b => b.VisibleState = ButtonSystemState.Play);
buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Play, @"button-play-select", OsuIcon.Logo, new Color4(102, 68, 204, 255), () => State = ButtonSystemState.Play, WEDGE_WIDTH, Key.P)); buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Play, @"button-play-select", OsuIcon.Logo, new Color4(102, 68, 204, 255), () => State = ButtonSystemState.Play, WEDGE_WIDTH,
Key.P));
buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Edit, @"button-edit-select", OsuIcon.EditCircle, new Color4(238, 170, 0, 255), () => OnEdit?.Invoke(), 0, Key.E)); buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Edit, @"button-edit-select", OsuIcon.EditCircle, new Color4(238, 170, 0, 255), () => OnEdit?.Invoke(), 0, Key.E));
buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Browse, @"button-direct-select", OsuIcon.ChevronDownCircle, new Color4(165, 204, 0, 255), () => OnBeatmapListing?.Invoke(), 0, Key.D)); buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Browse, @"button-direct-select", OsuIcon.ChevronDownCircle, new Color4(165, 204, 0, 255), () => OnBeatmapListing?.Invoke(), 0,
Key.D));
if (host.CanExit) if (host.CanExit)
buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Exit, string.Empty, OsuIcon.CrossCircle, new Color4(238, 51, 153, 255), () => OnExit?.Invoke(), 0, Key.Q)); buttonsTopLevel.Add(new MainMenuButton(ButtonSystemStrings.Exit, string.Empty, OsuIcon.CrossCircle, new Color4(238, 51, 153, 255), () => OnExit?.Invoke(), 0, Key.Q));
@ -201,6 +206,9 @@ namespace osu.Game.Screens.Menu
private void updateIdleState(bool isIdle) private void updateIdleState(bool isIdle)
{ {
if (!ReturnToTopOnIdle)
return;
if (isIdle && State != ButtonSystemState.Exit && State != ButtonSystemState.EnteringMode) if (isIdle && State != ButtonSystemState.Exit && State != ButtonSystemState.EnteringMode)
State = ButtonSystemState.Initial; State = ButtonSystemState.Initial;
} }

View File

@ -35,7 +35,7 @@ namespace osu.Game.Screens.Menu
public const float FADE_OUT_DURATION = 400; public const float FADE_OUT_DURATION = 400;
public override bool HideOverlaysOnEnter => buttons == null || buttons.State == ButtonSystemState.Initial; public override bool HideOverlaysOnEnter => Buttons == null || Buttons.State == ButtonSystemState.Initial;
public override bool AllowBackButton => false; public override bool AllowBackButton => false;
@ -45,7 +45,7 @@ namespace osu.Game.Screens.Menu
private MenuSideFlashes sideFlashes; private MenuSideFlashes sideFlashes;
private ButtonSystem buttons; protected ButtonSystem Buttons;
[Resolved] [Resolved]
private GameHost host { get; set; } private GameHost host { get; set; }
@ -101,7 +101,7 @@ namespace osu.Game.Screens.Menu
ParallaxAmount = 0.01f, ParallaxAmount = 0.01f,
Children = new Drawable[] Children = new Drawable[]
{ {
buttons = new ButtonSystem Buttons = new ButtonSystem
{ {
OnEdit = delegate OnEdit = delegate
{ {
@ -125,7 +125,7 @@ namespace osu.Game.Screens.Menu
exitConfirmOverlay?.CreateProxy() ?? Empty() exitConfirmOverlay?.CreateProxy() ?? Empty()
}); });
buttons.StateChanged += state => Buttons.StateChanged += state =>
{ {
switch (state) switch (state)
{ {
@ -140,8 +140,8 @@ namespace osu.Game.Screens.Menu
} }
}; };
buttons.OnSettings = () => settings?.ToggleVisibility(); Buttons.OnSettings = () => settings?.ToggleVisibility();
buttons.OnBeatmapListing = () => beatmapListing?.ToggleVisibility(); Buttons.OnBeatmapListing = () => beatmapListing?.ToggleVisibility();
LoadComponentAsync(background = new BackgroundScreenDefault()); LoadComponentAsync(background = new BackgroundScreenDefault());
preloadSongSelect(); preloadSongSelect();
@ -179,7 +179,7 @@ namespace osu.Game.Screens.Menu
public override void OnEntering(IScreen last) public override void OnEntering(IScreen last)
{ {
base.OnEntering(last); base.OnEntering(last);
buttons.FadeInFromZero(500); Buttons.FadeInFromZero(500);
if (last is IntroScreen && musicController.TrackLoaded) if (last is IntroScreen && musicController.TrackLoaded)
{ {
@ -203,14 +203,14 @@ namespace osu.Game.Screens.Menu
{ {
base.LogoArriving(logo, resuming); base.LogoArriving(logo, resuming);
buttons.SetOsuLogo(logo); Buttons.SetOsuLogo(logo);
logo.FadeColour(Color4.White, 100, Easing.OutQuint); logo.FadeColour(Color4.White, 100, Easing.OutQuint);
logo.FadeIn(100, Easing.OutQuint); logo.FadeIn(100, Easing.OutQuint);
if (resuming) if (resuming)
{ {
buttons.State = ButtonSystemState.TopLevel; Buttons.State = ButtonSystemState.TopLevel;
this.FadeIn(FADE_IN_DURATION, Easing.OutQuint); this.FadeIn(FADE_IN_DURATION, Easing.OutQuint);
buttonsContainer.MoveTo(new Vector2(0, 0), FADE_IN_DURATION, Easing.OutQuint); buttonsContainer.MoveTo(new Vector2(0, 0), FADE_IN_DURATION, Easing.OutQuint);
@ -245,15 +245,15 @@ namespace osu.Game.Screens.Menu
var seq = logo.FadeOut(300, Easing.InSine) var seq = logo.FadeOut(300, Easing.InSine)
.ScaleTo(0.2f, 300, Easing.InSine); .ScaleTo(0.2f, 300, Easing.InSine);
seq.OnComplete(_ => buttons.SetOsuLogo(null)); seq.OnComplete(_ => Buttons.SetOsuLogo(null));
seq.OnAbort(_ => buttons.SetOsuLogo(null)); seq.OnAbort(_ => Buttons.SetOsuLogo(null));
} }
public override void OnSuspending(IScreen next) public override void OnSuspending(IScreen next)
{ {
base.OnSuspending(next); base.OnSuspending(next);
buttons.State = ButtonSystemState.EnteringMode; Buttons.State = ButtonSystemState.EnteringMode;
this.FadeOut(FADE_OUT_DURATION, Easing.InSine); this.FadeOut(FADE_OUT_DURATION, Easing.InSine);
buttonsContainer.MoveTo(new Vector2(-800, 0), FADE_OUT_DURATION, Easing.InSine); buttonsContainer.MoveTo(new Vector2(-800, 0), FADE_OUT_DURATION, Easing.InSine);
@ -285,7 +285,7 @@ namespace osu.Game.Screens.Menu
return true; return true;
} }
buttons.State = ButtonSystemState.Exit; Buttons.State = ButtonSystemState.Exit;
OverlayActivationMode.Value = OverlayActivation.Disabled; OverlayActivationMode.Value = OverlayActivation.Disabled;
songTicker.Hide(); songTicker.Hide();