1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-30 01:32:55 +08:00

Display popup disclaimer about game state and performance on mobile platforms

This commit is contained in:
Salman Alshamrani 2025-01-03 00:20:23 -05:00
parent 2d4a3aa4f9
commit 039800550c
2 changed files with 40 additions and 6 deletions

View File

@ -3,6 +3,7 @@
using System;
using System.Diagnostics;
using osu.Framework;
using osu.Framework.Bindables;
using osu.Framework.Configuration;
using osu.Framework.Configuration.Tracking;
@ -163,6 +164,7 @@ namespace osu.Game.Configuration
SetDefault(OsuSetting.Version, string.Empty);
SetDefault(OsuSetting.ShowFirstRunSetup, true);
SetDefault(OsuSetting.ShowMobileDisclaimer, RuntimeInfo.IsMobile);
SetDefault(OsuSetting.ScreenshotFormat, ScreenshotFormat.Jpg);
SetDefault(OsuSetting.ScreenshotCaptureMenuCursor, false);
@ -452,5 +454,6 @@ namespace osu.Game.Configuration
AlwaysRequireHoldingForPause,
MultiplayerShowInProgressFilter,
BeatmapListingFeaturedArtistFilter,
ShowMobileDisclaimer,
}
}

View File

@ -13,6 +13,7 @@ using osu.Framework.Audio.Sample;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events;
using osu.Framework.Logging;
@ -87,6 +88,7 @@ namespace osu.Game.Screens.Menu
private Bindable<double> holdDelay;
private Bindable<bool> loginDisplayed;
private Bindable<bool> showMobileDisclaimer;
private HoldToExitGameOverlay holdToExitGameOverlay;
@ -111,6 +113,7 @@ namespace osu.Game.Screens.Menu
{
holdDelay = config.GetBindable<double>(OsuSetting.UIHoldActivationDelay);
loginDisplayed = statics.GetBindable<bool>(Static.LoginOverlayDisplayed);
showMobileDisclaimer = config.GetBindable<bool>(OsuSetting.ShowMobileDisclaimer);
if (host.CanExit)
{
@ -275,26 +278,54 @@ namespace osu.Game.Screens.Menu
sideFlashes.Delay(FADE_IN_DURATION).FadeIn(64, Easing.InQuint);
}
else if (!api.IsLoggedIn || api.State.Value == APIState.RequiresSecondFactorAuth)
else
{
// copy out old action to avoid accidentally capturing logo.Action in closure, causing a self-reference loop.
var previousAction = logo.Action;
// we want to hook into logo.Action to display the login overlay, but also preserve the return value of the old action.
// we want to hook into logo.Action to display certain overlays, but also preserve the return value of the old action.
// therefore pass the old action to displayLogin, so that it can return that value.
// this ensures that the OsuLogo sample does not play when it is not desired.
logo.Action = () => displayLogin(previousAction);
logo.Action = () => onLogoClick(previousAction);
}
}
bool displayLogin(Func<bool> originalAction)
private bool onLogoClick(Func<bool> originalAction)
{
if (!api.IsLoggedIn || api.State.Value == APIState.RequiresSecondFactorAuth)
{
if (!loginDisplayed.Value)
{
Scheduler.AddDelayed(() => login?.Show(), 500);
this.Delay(500).Schedule(() => login?.Show());
loginDisplayed.Value = true;
}
}
return originalAction.Invoke();
if (showMobileDisclaimer.Value)
{
this.Delay(500).Schedule(() => dialogOverlay.Push(new MobileDisclaimerDialog()));
showMobileDisclaimer.Value = false;
}
return originalAction.Invoke();
}
internal partial class MobileDisclaimerDialog : PopupDialog
{
public MobileDisclaimerDialog()
{
HeaderText = "Mobile disclaimer";
BodyText = "We're releasing this for your enjoyment, but PC is still our focus and mobile is hard to support.\n\nPlease bear with us as we continue to improve the experience!";
Icon = FontAwesome.Solid.Mobile;
Buttons = new PopupDialogButton[]
{
new PopupDialogOkButton
{
Text = "Alright!",
},
};
}
}