// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using osu.Framework.Allocation; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Game.Input.Bindings; namespace osu.Game.Screens.Select { public class FooterButtonRandom : FooterButton { public Action PrimaryAction { get; set; } public Action SecondaryAction { get; set; } private readonly SpriteText secondaryText; private bool secondaryActive; public FooterButtonRandom() { TextContainer.Add(secondaryText = new OsuSpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, Text = @"rewind", Alpha = 0, }); // force both text sprites to always be present to avoid width flickering while they're being swapped out SpriteText.AlwaysPresent = secondaryText.AlwaysPresent = true; } [BackgroundDependencyLoader] private void load(OsuColour colours) { SelectedColour = colours.Green; DeselectedColour = SelectedColour.Opacity(0.5f); Text = @"random"; Hotkey = GlobalAction.SelectNextRandom; } private void updateText() { if (secondaryActive) { SpriteText.FadeOut(120, Easing.InQuad); secondaryText.FadeIn(120, Easing.InQuad); } else { SpriteText.FadeIn(120, Easing.InQuad); secondaryText.FadeOut(120, Easing.InQuad); } } public override bool OnPressed(GlobalAction action) { switch (action) { case GlobalAction.SelectPreviousRandom: secondaryActive = true; Action = SecondaryAction; updateText(); Click(); return true; case GlobalAction.SelectNextRandom: Action = PrimaryAction; updateText(); Click(); return true; default: return false; } } public override void OnReleased(GlobalAction action) { if (action == GlobalAction.SelectPreviousRandom) { secondaryActive = false; updateText(); } } } }