From db78d73fa511b647e45286e805a6ae7784ee4fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Fri, 29 Dec 2023 11:50:30 +0100 Subject: [PATCH] Do not display system title in inital menu state Addresses https://github.com/ppy/osu/discussions/26199. --- osu.Game.Tests/Visual/Menus/TestSceneMainMenu.cs | 15 +++++++++++---- osu.Game/Screens/Menu/MainMenu.cs | 5 ++++- osu.Game/Screens/Menu/SystemTitle.cs | 12 +++++++++++- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/osu.Game.Tests/Visual/Menus/TestSceneMainMenu.cs b/osu.Game.Tests/Visual/Menus/TestSceneMainMenu.cs index 46570e7cdf..7053a9d544 100644 --- a/osu.Game.Tests/Visual/Menus/TestSceneMainMenu.cs +++ b/osu.Game.Tests/Visual/Menus/TestSceneMainMenu.cs @@ -3,33 +3,40 @@ using System.Linq; using NUnit.Framework; +using osu.Framework.Graphics.Containers; using osu.Framework.Testing; using osu.Game.Online.API.Requests.Responses; using osu.Game.Screens.Menu; +using osuTK.Input; namespace osu.Game.Tests.Visual.Menus { public partial class TestSceneMainMenu : OsuGameTestScene { + private SystemTitle systemTitle => Game.ChildrenOfType().Single(); + [Test] public void TestSystemTitle() { - AddStep("set system title", () => Game.ChildrenOfType().Single().Current.Value = new APISystemTitle + AddStep("set system title", () => systemTitle.Current.Value = new APISystemTitle { Image = @"https://assets.ppy.sh/main-menu/project-loved-2@2x.png", Url = @"https://osu.ppy.sh/home/news/2023-12-21-project-loved-december-2023", }); - AddStep("set another title", () => Game.ChildrenOfType().Single().Current.Value = new APISystemTitle + AddAssert("system title not visible", () => systemTitle.State.Value, () => Is.EqualTo(Visibility.Hidden)); + AddStep("enter menu", () => InputManager.Key(Key.Enter)); + AddUntilStep("system title visible", () => systemTitle.State.Value, () => Is.EqualTo(Visibility.Visible)); + AddStep("set another title", () => systemTitle.Current.Value = new APISystemTitle { Image = @"https://assets.ppy.sh/main-menu/wf2023-vote@2x.png", Url = @"https://osu.ppy.sh/community/contests/189", }); - AddStep("set title with nonexistent image", () => Game.ChildrenOfType().Single().Current.Value = new APISystemTitle + AddStep("set title with nonexistent image", () => systemTitle.Current.Value = new APISystemTitle { Image = @"https://test.invalid/@2x", // .invalid TLD reserved by https://datatracker.ietf.org/doc/html/rfc2606#section-2 Url = @"https://osu.ppy.sh/community/contests/189", }); - AddStep("unset system title", () => Game.ChildrenOfType().Single().Current.Value = null); + AddStep("unset system title", () => systemTitle.Current.Value = null); } } } diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs index 401460a498..516b090a16 100644 --- a/osu.Game/Screens/Menu/MainMenu.cs +++ b/osu.Game/Screens/Menu/MainMenu.cs @@ -94,6 +94,7 @@ namespace osu.Game.Screens.Menu private ParallaxContainer buttonsContainer; private SongTicker songTicker; private Container logoTarget; + private SystemTitle systemTitle; private MenuTip menuTip; private FillFlowContainer bottomElementsFlow; private SupporterDisplay supporterDisplay; @@ -173,7 +174,7 @@ namespace osu.Game.Screens.Menu Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre, }, - new SystemTitle + systemTitle = new SystemTitle { Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre, @@ -196,10 +197,12 @@ namespace osu.Game.Screens.Menu case ButtonSystemState.Initial: case ButtonSystemState.Exit: ApplyToBackground(b => b.FadeColour(Color4.White, 500, Easing.OutSine)); + systemTitle.State.Value = Visibility.Hidden; break; default: ApplyToBackground(b => b.FadeColour(OsuColour.Gray(0.8f), 500, Easing.OutSine)); + systemTitle.State.Value = Visibility.Visible; break; } }; diff --git a/osu.Game/Screens/Menu/SystemTitle.cs b/osu.Game/Screens/Menu/SystemTitle.cs index 7d49a1dd5f..813a470ed6 100644 --- a/osu.Game/Screens/Menu/SystemTitle.cs +++ b/osu.Game/Screens/Menu/SystemTitle.cs @@ -18,10 +18,12 @@ using osu.Game.Online.API.Requests.Responses; namespace osu.Game.Screens.Menu { - public partial class SystemTitle : CompositeDrawable + public partial class SystemTitle : VisibilityContainer { internal Bindable Current { get; } = new Bindable(); + private const float transition_duration = 500; + private Container content = null!; private CancellationTokenSource? cancellationTokenSource; private SystemTitleImage? currentImage; @@ -32,9 +34,13 @@ namespace osu.Game.Screens.Menu private void load(OsuGame? game) { AutoSizeAxes = Axes.Both; + AutoSizeDuration = transition_duration; + AutoSizeEasing = Easing.OutQuint; InternalChild = content = new OsuClickableContainer { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, AutoSizeAxes = Axes.Both, Action = () => { @@ -51,6 +57,10 @@ namespace osu.Game.Screens.Menu }; } + protected override void PopIn() => content.FadeInFromZero(transition_duration, Easing.OutQuint); + + protected override void PopOut() => content.FadeOut(transition_duration, Easing.OutQuint); + protected override bool OnHover(HoverEvent e) { content.ScaleTo(1.05f, 2000, Easing.OutQuint);