mirror of
https://github.com/ppy/osu.git
synced 2024-12-13 04:32:57 +08:00
Tidy class and change to be a VisibilityContainer
similar to taiko implementation
This commit is contained in:
parent
390557634a
commit
5c9a90cb40
@ -3,12 +3,10 @@
|
||||
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Input;
|
||||
using osu.Framework.Testing;
|
||||
using osu.Game.Rulesets.Mania.UI;
|
||||
using osu.Game.Rulesets.Mods;
|
||||
using osu.Game.Skinning;
|
||||
using osu.Game.Tests.Visual;
|
||||
|
||||
namespace osu.Game.Rulesets.Mania.Tests.Mods
|
||||
@ -22,14 +20,14 @@ namespace osu.Game.Rulesets.Mania.Tests.Mods
|
||||
{
|
||||
Mod = new ModTouchDevice(),
|
||||
Autoplay = false,
|
||||
PassCondition = () => getSkinnableOverlay()?.IsPresent == true
|
||||
PassCondition = () => getTouchOverlay()?.IsPresent == true
|
||||
});
|
||||
|
||||
[Test]
|
||||
public void TestOverlayNotVisibleWithoutMod() => CreateModTest(new ModTestData
|
||||
{
|
||||
Autoplay = false,
|
||||
PassCondition = () => getSkinnableOverlay()?.IsPresent == false
|
||||
PassCondition = () => getTouchOverlay()?.IsPresent == false
|
||||
});
|
||||
|
||||
[Test]
|
||||
@ -56,9 +54,8 @@ namespace osu.Game.Rulesets.Mania.Tests.Mods
|
||||
}
|
||||
}
|
||||
|
||||
private Drawable? getSkinnableOverlay() => this.ChildrenOfType<SkinnableDrawable>()
|
||||
.SingleOrDefault(d => d.Lookup.Equals(new ManiaSkinComponentLookup(ManiaSkinComponents.TouchOverlay)));
|
||||
private ManiaTouchInputArea? getTouchOverlay() => this.ChildrenOfType<ManiaTouchInputArea>().SingleOrDefault();
|
||||
|
||||
private ManiaTouchInputArea.InputReceptor getReceptor(int index) => this.ChildrenOfType<ManiaTouchInputArea.InputReceptor>().ElementAt(index);
|
||||
private ManiaTouchInputArea.ColumnInputReceptor getReceptor(int index) => this.ChildrenOfType<ManiaTouchInputArea.ColumnInputReceptor>().ElementAt(index);
|
||||
}
|
||||
}
|
||||
|
@ -105,10 +105,7 @@ namespace osu.Game.Rulesets.Mania.UI
|
||||
|
||||
TimeRange.Value = smoothTimeRange = ComputeScrollTime(configScrollSpeed.Value);
|
||||
|
||||
KeyBindingInputManager.Add(touchArea = new ManiaTouchInputArea
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both
|
||||
});
|
||||
KeyBindingInputManager.Add(new ManiaTouchInputArea());
|
||||
}
|
||||
|
||||
protected override void AdjustScrollSpeed(int amount) => configScrollSpeed.Value += amount;
|
||||
@ -122,8 +119,6 @@ namespace osu.Game.Rulesets.Mania.UI
|
||||
private ScheduledDelegate? pendingSkinChange;
|
||||
private float hitPosition;
|
||||
|
||||
private ManiaTouchInputArea touchArea = null!;
|
||||
|
||||
private void onSkinChange()
|
||||
{
|
||||
// schedule required to avoid calls after disposed.
|
||||
|
@ -9,13 +9,19 @@ using osu.Framework.Graphics.Containers;
|
||||
using osu.Framework.Graphics.Shapes;
|
||||
using osu.Framework.Input.Events;
|
||||
using osu.Game.Configuration;
|
||||
using osu.Game.Skinning;
|
||||
using osuTK;
|
||||
|
||||
namespace osu.Game.Rulesets.Mania.UI
|
||||
{
|
||||
public partial class ManiaTouchInputArea : CompositeDrawable, ISerialisableDrawable
|
||||
/// <summary>
|
||||
/// An overlay that captures and displays osu!mania mouse and touch input.
|
||||
/// </summary>
|
||||
public partial class ManiaTouchInputArea : VisibilityContainer
|
||||
{
|
||||
// visibility state affects our child. we always want to handle input.
|
||||
public override bool PropagatePositionalInputSubTree => true;
|
||||
public override bool PropagateNonPositionalInputSubTree => true;
|
||||
|
||||
[SettingSource("Spacing", "The spacing between receptors.")]
|
||||
public BindableFloat Spacing { get; } = new BindableFloat(10)
|
||||
{
|
||||
@ -35,6 +41,8 @@ namespace osu.Game.Rulesets.Mania.UI
|
||||
[Resolved]
|
||||
private DrawableManiaRuleset drawableRuleset { get; set; } = null!;
|
||||
|
||||
private GridContainer gridContainer = null!;
|
||||
|
||||
public ManiaTouchInputArea()
|
||||
{
|
||||
Anchor = Anchor.BottomCentre;
|
||||
@ -62,16 +70,17 @@ namespace osu.Game.Rulesets.Mania.UI
|
||||
receptorGridDimensions.Add(new Dimension(GridSizeMode.AutoSize));
|
||||
}
|
||||
|
||||
receptorGridContent.Add(new InputReceptor { Action = { BindTarget = column.Action } });
|
||||
receptorGridContent.Add(new ColumnInputReceptor { Action = { BindTarget = column.Action } });
|
||||
receptorGridDimensions.Add(new Dimension());
|
||||
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
|
||||
InternalChild = new GridContainer
|
||||
InternalChild = gridContainer = new GridContainer
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
AlwaysPresent = true,
|
||||
Content = new[] { receptorGridContent.ToArray() },
|
||||
ColumnDimensions = receptorGridDimensions.ToArray()
|
||||
};
|
||||
@ -83,9 +92,36 @@ namespace osu.Game.Rulesets.Mania.UI
|
||||
Opacity.BindValueChanged(o => Alpha = o.NewValue, true);
|
||||
}
|
||||
|
||||
public bool UsesFixedAnchor { get; set; }
|
||||
protected override bool OnKeyDown(KeyDownEvent e)
|
||||
{
|
||||
// Hide whenever the keyboard is used.
|
||||
Hide();
|
||||
return false;
|
||||
}
|
||||
|
||||
public partial class InputReceptor : CompositeDrawable
|
||||
protected override bool OnMouseDown(MouseDownEvent e)
|
||||
{
|
||||
Show();
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override bool OnTouchDown(TouchDownEvent e)
|
||||
{
|
||||
Show();
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void PopIn()
|
||||
{
|
||||
gridContainer.FadeIn(500, Easing.OutQuint);
|
||||
}
|
||||
|
||||
protected override void PopOut()
|
||||
{
|
||||
gridContainer.FadeOut(300);
|
||||
}
|
||||
|
||||
public partial class ColumnInputReceptor : CompositeDrawable
|
||||
{
|
||||
public readonly IBindable<ManiaAction> Action = new Bindable<ManiaAction>();
|
||||
|
||||
@ -96,7 +132,7 @@ namespace osu.Game.Rulesets.Mania.UI
|
||||
|
||||
private bool isPressed;
|
||||
|
||||
public InputReceptor()
|
||||
public ColumnInputReceptor()
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both;
|
||||
|
||||
@ -128,7 +164,7 @@ namespace osu.Game.Rulesets.Mania.UI
|
||||
protected override bool OnTouchDown(TouchDownEvent e)
|
||||
{
|
||||
updateButton(true);
|
||||
return true;
|
||||
return false; // handled by parent container to show overlay.
|
||||
}
|
||||
|
||||
protected override void OnTouchUp(TouchUpEvent e)
|
||||
@ -139,7 +175,7 @@ namespace osu.Game.Rulesets.Mania.UI
|
||||
protected override bool OnMouseDown(MouseDownEvent e)
|
||||
{
|
||||
updateButton(true);
|
||||
return true;
|
||||
return false; // handled by parent container to show overlay.
|
||||
}
|
||||
|
||||
protected override void OnMouseUp(MouseUpEvent e)
|
||||
|
Loading…
Reference in New Issue
Block a user