diff --git a/osu.Game/Overlays/Mods/DifficultyMultiplierDisplay.cs b/osu.Game/Overlays/Mods/DifficultyMultiplierDisplay.cs index 7d0f9f1b31..98dc3fa62e 100644 --- a/osu.Game/Overlays/Mods/DifficultyMultiplierDisplay.cs +++ b/osu.Game/Overlays/Mods/DifficultyMultiplierDisplay.cs @@ -6,9 +6,6 @@ using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Extensions.LocalisationExtensions; using osu.Framework.Graphics; -using osu.Framework.Graphics.Colour; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.UserInterface; using osu.Framework.Localisation; using osu.Game.Graphics; @@ -23,14 +20,9 @@ namespace osu.Game.Overlays.Mods /// /// On the mod select overlay, this provides a local updating view of the aggregate score multiplier coming from mods. /// - public partial class DifficultyMultiplierDisplay : Container, IHasCurrentValue + public partial class DifficultyMultiplierDisplay : ModFooterInformationDisplay, IHasCurrentValue { public const float HEIGHT = 42; - private const float transition_duration = 200; - - private readonly Box background; - private readonly Box labelBackground; - private readonly FillFlowContainer content; public Bindable Current { @@ -40,110 +32,53 @@ namespace osu.Game.Overlays.Mods private readonly BindableWithCurrent current = new BindableWithCurrent(); + private const float transition_duration = 200; + + private RollingCounter counter = null!; + [Resolved] private OsuColour colours { get; set; } = null!; [Resolved] private OverlayColourProvider colourProvider { get; set; } = null!; - private readonly RollingCounter counter; - - private readonly InputBlockingContainer topContent; - public DifficultyMultiplierDisplay() { Current.Default = 1d; Current.Value = 1d; - - const float shear = ShearedOverlayContainer.SHEAR; - - AutoSizeAxes = Axes.Both; - - InternalChild = topContent = new InputBlockingContainer - { - Origin = Anchor.BottomRight, - Anchor = Anchor.BottomRight, - AutoSizeAxes = Axes.X, - Height = ShearedButton.HEIGHT, - Shear = new Vector2(shear, 0), - CornerRadius = ShearedButton.CORNER_RADIUS, - BorderThickness = ShearedButton.BORDER_THICKNESS, - Masking = true, - Children = new Drawable[] - { - background = new Box - { - RelativeSizeAxes = Axes.Both, - }, - new GridContainer - { - RelativeSizeAxes = Axes.Y, - AutoSizeAxes = Axes.X, - ColumnDimensions = new[] - { - new Dimension(GridSizeMode.AutoSize), - new Dimension(GridSizeMode.Absolute, 56) - }, - Content = new[] - { - new Drawable[] - { - new Container - { - RelativeSizeAxes = Axes.Y, - AutoSizeAxes = Axes.X, - Masking = true, - CornerRadius = ModSelectPanel.CORNER_RADIUS, - Children = new Drawable[] - { - labelBackground = new Box - { - RelativeSizeAxes = Axes.Both - }, - new OsuSpriteText - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Margin = new MarginPadding { Horizontal = 18 }, - Shear = new Vector2(-shear, 0), - Text = DifficultyMultiplierDisplayStrings.DifficultyMultiplier, - Font = OsuFont.Default.With(size: 17, weight: FontWeight.SemiBold) - } - } - }, - content = new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Direction = FillDirection.Horizontal, - Shear = new Vector2(-shear, 0), - Spacing = new Vector2(2, 0), - Child = counter = new EffectCounter(@"0.0x") - { - Anchor = Anchor.CentreLeft, - Origin = Anchor.CentreLeft, - Current = { BindTarget = Current } - } - } - } - } - } - } - }; } [BackgroundDependencyLoader] private void load() { - background.Colour = colourProvider.Background4; - topContent.BorderColour = ColourInfo.GradientVertical(background.Colour, colourProvider.Background1); + LeftContent.AddRange(new Drawable[] + { + new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Shear = new Vector2(-ShearedOverlayContainer.SHEAR, 0), + Text = DifficultyMultiplierDisplayStrings.DifficultyMultiplier, + Font = OsuFont.Default.With(size: 17, weight: FontWeight.SemiBold) + } + }); - labelBackground.Colour = colourProvider.Background4; + RightContent.Add(counter = new EffectCounter + { + Margin = new MarginPadding(10), + AutoSizeAxes = Axes.Y, + Width = 40, + Shear = new Vector2(-ShearedOverlayContainer.SHEAR, 0), + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Current = { BindTarget = Current } + }); } protected override void LoadComplete() { + base.LoadComplete(); + Current.BindValueChanged(e => { var effect = calculateEffectForComparison(e.NewValue.CompareTo(Current.Default)); @@ -164,18 +99,18 @@ namespace osu.Game.Overlays.Mods switch (effect) { case ModEffect.NotChanged: - background.FadeColour(colourProvider.Background3, transition_duration, Easing.OutQuint); - content.FadeColour(Colour4.White, transition_duration, Easing.OutQuint); + MainBackground.FadeColour(colourProvider.Background4, transition_duration, Easing.OutQuint); + counter.FadeColour(Colour4.White, transition_duration, Easing.OutQuint); break; case ModEffect.DifficultyReduction: - background.FadeColour(colours.ForModType(ModType.DifficultyReduction), transition_duration, Easing.OutQuint); - content.FadeColour(colourProvider.Background5, transition_duration, Easing.OutQuint); + MainBackground.FadeColour(colours.ForModType(ModType.DifficultyReduction), transition_duration, Easing.OutQuint); + counter.FadeColour(colourProvider.Background5, transition_duration, Easing.OutQuint); break; case ModEffect.DifficultyIncrease: - background.FadeColour(colours.ForModType(ModType.DifficultyIncrease), transition_duration, Easing.OutQuint); - content.FadeColour(colourProvider.Background5, transition_duration, Easing.OutQuint); + MainBackground.FadeColour(colours.ForModType(ModType.DifficultyIncrease), transition_duration, Easing.OutQuint); + counter.FadeColour(colourProvider.Background5, transition_duration, Easing.OutQuint); break; default: @@ -207,19 +142,14 @@ namespace osu.Game.Overlays.Mods private partial class EffectCounter : RollingCounter { - private readonly string? format; - - public EffectCounter(string? format) - { - this.format = format; - } - protected override double RollingDuration => 500; - protected override LocalisableString FormatCount(double count) => count.ToLocalisableString(format); + protected override LocalisableString FormatCount(double count) => count.ToLocalisableString(@"0.00x"); protected override OsuSpriteText CreateSpriteText() => new OsuSpriteText { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, Font = OsuFont.Default.With(size: 17, weight: FontWeight.SemiBold) }; }