From b3ea63598e892ba860d21992f3dcceb4f2244712 Mon Sep 17 00:00:00 2001 From: Salman Alshamrani Date: Tue, 11 Mar 2025 09:17:19 -0400 Subject: [PATCH] Fix touch input area not handling settings changes --- .../UI/DrawableManiaRuleset.cs | 27 +++++++++++++++--- .../UI/ManiaTouchInputArea.cs | 28 +++---------------- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs b/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs index bac62d2b66..66400b0a55 100644 --- a/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs @@ -50,9 +50,7 @@ namespace osu.Game.Rulesets.Mania.UI public IEnumerable BarLines; - private bool playsWithTouchableColumns => Config.Get(ManiaRulesetSetting.MobileLayout) == ManiaMobileLayout.Portrait; - - public override bool RequiresPortraitOrientation => Beatmap.Stages.Count == 1 && playsWithTouchableColumns; + public override bool RequiresPortraitOrientation => Beatmap.Stages.Count == 1 && mobileLayout.Value == ManiaMobileLayout.Portrait; protected override bool RelativeScaleBeatLengths => true; @@ -60,6 +58,7 @@ namespace osu.Game.Rulesets.Mania.UI private readonly Bindable configDirection = new Bindable(); private readonly BindableDouble configScrollSpeed = new BindableDouble(); + private readonly Bindable mobileLayout = new Bindable(); private double currentTimeRange; protected double TargetTimeRange; @@ -114,7 +113,27 @@ namespace osu.Game.Rulesets.Mania.UI TimeRange.Value = TargetTimeRange = currentTimeRange = ComputeScrollTime(configScrollSpeed.Value); - KeyBindingInputManager.Add(new ManiaTouchInputArea(this)); + Config.BindWith(ManiaRulesetSetting.MobileLayout, mobileLayout); + mobileLayout.BindValueChanged(_ => updateMobileLayout(), true); + } + + private ManiaTouchInputArea? touchInputArea; + + private void updateMobileLayout() + { + switch (mobileLayout.Value) + { + case ManiaMobileLayout.LandscapeWithOverlay: + KeyBindingInputManager.Add(touchInputArea = new ManiaTouchInputArea(this)); + break; + + default: + if (touchInputArea != null) + KeyBindingInputManager.Remove(touchInputArea, true); + + touchInputArea = null; + break; + } } protected override void AdjustScrollSpeed(int amount) => configScrollSpeed.Value += amount; diff --git a/osu.Game.Rulesets.Mania/UI/ManiaTouchInputArea.cs b/osu.Game.Rulesets.Mania/UI/ManiaTouchInputArea.cs index e9489d4c06..1df05bf350 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaTouchInputArea.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaTouchInputArea.cs @@ -46,8 +46,6 @@ namespace osu.Game.Rulesets.Mania.UI private GridContainer gridContainer = null!; - private readonly BindableBool touchControls = new BindableBool(); - public ManiaTouchInputArea(DrawableManiaRuleset drawableRuleset) { this.drawableRuleset = drawableRuleset; @@ -80,7 +78,6 @@ namespace osu.Game.Rulesets.Mania.UI receptorGridContent.Add(new ColumnInputReceptor { Action = { BindTarget = column.Action }, - Enabled = { BindTarget = touchControls }, }); receptorGridDimensions.Add(new Dimension()); @@ -97,15 +94,9 @@ namespace osu.Game.Rulesets.Mania.UI }; } - private IBindable mobilePlayStyle = null!; - protected override void LoadComplete() { base.LoadComplete(); - - mobilePlayStyle = rulesetConfig.GetBindable(ManiaRulesetSetting.MobileLayout); - mobilePlayStyle.BindValueChanged(p => touchControls.Value = p.NewValue == ManiaMobileLayout.LandscapeWithOverlay, true); - Opacity.BindValueChanged(o => Alpha = o.NewValue, true); } @@ -118,13 +109,8 @@ namespace osu.Game.Rulesets.Mania.UI protected override bool OnTouchDown(TouchDownEvent e) { - if (touchControls.Value) - { - Show(); - return true; - } - - return false; + Show(); + return true; } protected override void PopIn() @@ -140,7 +126,6 @@ namespace osu.Game.Rulesets.Mania.UI public partial class ColumnInputReceptor : CompositeDrawable { public readonly IBindable Action = new Bindable(); - public readonly IBindable Enabled = new BindableBool(); private readonly Box highlightOverlay; @@ -180,13 +165,8 @@ namespace osu.Game.Rulesets.Mania.UI protected override bool OnTouchDown(TouchDownEvent e) { - if (Enabled.Value) - { - updateButton(true); - return false; // handled by parent container to show overlay. - } - - return false; + updateButton(true); + return false; // handled by parent container to show overlay. } protected override void OnTouchUp(TouchUpEvent e)