diff --git a/osu.Game/Screens/Menu/Button.cs b/osu.Game/Screens/Menu/Button.cs index 15fce73a3b..e61dae6277 100644 --- a/osu.Game/Screens/Menu/Button.cs +++ b/osu.Game/Screens/Menu/Button.cs @@ -27,6 +27,8 @@ public class Button : Container, IStateful { private Container iconText; private Container box; + private Box boxColourLayer; + private Box boxHoverLayer; private Color4 colour; private TextAwesome icon; private string internalName; @@ -72,16 +74,24 @@ public Button(string text, string internalName, FontAwesome symbol, Color4 colou }, Anchor = Anchor.Centre, Origin = Anchor.Centre, - Colour = colour, Scale = new Vector2(0, 1), Size = boxSize, Shear = new Vector2(ButtonSystem.WEDGE_WIDTH / boxSize.Y, 0), - Children = new Drawable[] + Children = new [] { - new Box + boxColourLayer = new Box { EdgeSmoothness = new Vector2(1.5f, 0), RelativeSizeAxes = Axes.Both, + Colour = colour, + }, + boxHoverLayer = new Box + { + EdgeSmoothness = new Vector2(1.5f, 0), + RelativeSizeAxes = Axes.Both, + BlendingMode = BlendingMode.Additive, + Colour = Color4.White, + Alpha = 0, }, } }, @@ -228,6 +238,18 @@ private void load(AudioManager audio) } protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) + { + boxHoverLayer.FadeTo(0.1f, 1000, EasingTypes.OutQuint); + return base.OnMouseDown(state, args); + } + + protected override bool OnMouseUp(InputState state, MouseUpEventArgs args) + { + boxHoverLayer.FadeTo(0, 1000, EasingTypes.OutQuint); + return base.OnMouseUp(state, args); + } + + protected override bool OnClick(InputState state) { trigger(); return true; @@ -250,7 +272,9 @@ private void trigger() { sampleClick.Play(); - box.FlashColour(Color4.White, 500, EasingTypes.OutExpo); + boxHoverLayer.ClearTransformations(); + boxHoverLayer.Alpha = 0.9f; + boxHoverLayer.FadeOut(800, EasingTypes.OutExpo); clickAction?.Invoke(); } diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index a2c6f60bb4..c6d515f303 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -172,10 +172,10 @@ private void onOsuLogo() State = MenuState.TopLevel; return; case MenuState.TopLevel: - buttonsTopLevel.First().TriggerMouseDown(); + buttonsTopLevel.First().TriggerClick(); return; case MenuState.Play: - buttonsPlay.First().TriggerMouseDown(); + buttonsPlay.First().TriggerClick(); return; } }