diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs
index d00856dd80..8d6c244b35 100644
--- a/osu.Game/Configuration/OsuConfigManager.cs
+++ b/osu.Game/Configuration/OsuConfigManager.cs
@@ -205,6 +205,8 @@ namespace osu.Game.Configuration
SetDefault(OsuSetting.EditorTimelineShowTimingChanges, true);
SetDefault(OsuSetting.EditorTimelineShowTicks, true);
+
+ SetDefault(OsuSetting.AlwaysShowHoldForMenuButton, false);
}
protected override bool CheckLookupContainsPrivateInformation(OsuSetting lookup)
@@ -429,5 +431,6 @@ namespace osu.Game.Configuration
HideCountryFlags,
EditorTimelineShowTimingChanges,
EditorTimelineShowTicks,
+ AlwaysShowHoldForMenuButton
}
}
diff --git a/osu.Game/Localisation/GameplaySettingsStrings.cs b/osu.Game/Localisation/GameplaySettingsStrings.cs
index 8ee76fdd55..6de61f7ebe 100644
--- a/osu.Game/Localisation/GameplaySettingsStrings.cs
+++ b/osu.Game/Localisation/GameplaySettingsStrings.cs
@@ -84,6 +84,11 @@ namespace osu.Game.Localisation
///
public static LocalisableString AlwaysShowGameplayLeaderboard => new TranslatableString(getKey(@"gameplay_leaderboard"), @"Always show gameplay leaderboard");
+ ///
+ /// "Always show hold for menu button"
+ ///
+ public static LocalisableString AlwaysShowHoldForMenuButton => new TranslatableString(getKey(@"always_show_hold_for_menu_button"), @"Always show hold for menu button");
+
///
/// "Always play first combo break sound"
///
diff --git a/osu.Game/Overlays/Settings/Sections/Gameplay/HUDSettings.cs b/osu.Game/Overlays/Settings/Sections/Gameplay/HUDSettings.cs
index 3e67b2f103..f4dd319152 100644
--- a/osu.Game/Overlays/Settings/Sections/Gameplay/HUDSettings.cs
+++ b/osu.Game/Overlays/Settings/Sections/Gameplay/HUDSettings.cs
@@ -41,6 +41,11 @@ namespace osu.Game.Overlays.Settings.Sections.Gameplay
Current = config.GetBindable(OsuSetting.GameplayLeaderboard),
},
new SettingsCheckbox
+ {
+ LabelText = GameplaySettingsStrings.AlwaysShowHoldForMenuButton,
+ Current = config.GetBindable(OsuSetting.AlwaysShowHoldForMenuButton),
+ },
+ new SettingsCheckbox
{
ClassicDefault = false,
LabelText = GameplaySettingsStrings.ShowHealthDisplayWhenCantFail,
diff --git a/osu.Game/Screens/Play/HUD/HoldForMenuButton.cs b/osu.Game/Screens/Play/HUD/HoldForMenuButton.cs
index 6d045e5f01..41600c2bb8 100644
--- a/osu.Game/Screens/Play/HUD/HoldForMenuButton.cs
+++ b/osu.Game/Screens/Play/HUD/HoldForMenuButton.cs
@@ -40,6 +40,10 @@ namespace osu.Game.Screens.Play.HUD
private OsuSpriteText text;
+ private Bindable alwaysShow;
+
+ public override bool PropagatePositionalInputSubTree => alwaysShow.Value || touchActive.Value;
+
public HoldForMenuButton()
{
Direction = FillDirection.Horizontal;
@@ -50,7 +54,7 @@ namespace osu.Game.Screens.Play.HUD
}
[BackgroundDependencyLoader(true)]
- private void load(Player player)
+ private void load(Player player, OsuConfigManager config)
{
Children = new Drawable[]
{
@@ -71,6 +75,8 @@ namespace osu.Game.Screens.Play.HUD
};
AutoSizeAxes = Axes.Both;
+
+ alwaysShow = config.GetBindable(OsuSetting.AlwaysShowHoldForMenuButton);
}
[Resolved]
@@ -119,7 +125,9 @@ namespace osu.Game.Screens.Play.HUD
if (text.Alpha > 0 || button.Progress.Value > 0 || button.IsHovered)
Alpha = 1;
- else
+ else if (touchActive.Value)
+ Alpha = 0.08f;
+ else if (alwaysShow.Value)
{
float minAlpha = touchActive.Value ? .08f : 0;
@@ -127,6 +135,10 @@ namespace osu.Game.Screens.Play.HUD
Math.Clamp(Clock.ElapsedFrameTime, 0, 200),
Alpha, Math.Clamp(1 - positionalAdjust, minAlpha, 1), 0, 200, Easing.OutQuint);
}
+ else
+ {
+ Alpha = 0;
+ }
}
private partial class HoldButton : HoldToConfirmContainer, IKeyBindingHandler