// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Containers; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Game.Screens.Ranking.Expanded.Accuracy; using osuTK; namespace osu.Game.Screens.Ranking.Expanded.Statistics { /// /// A to display the player's combo. /// public class ComboStatistic : CounterStatistic { private readonly bool isPerfect; private Drawable perfectText; /// /// Creates a new . /// /// The combo to be displayed. /// The maximum value of . public ComboStatistic(int combo, int? maxCombo) : base("combo", combo, maxCombo) { isPerfect = combo == maxCombo; } public override void Appear() { base.Appear(); if (isPerfect) { using (BeginDelayedSequence(AccuracyCircle.ACCURACY_TRANSFORM_DURATION / 2)) perfectText.FadeIn(50); } } protected override Drawable CreateContent() => new FillFlowContainer { AutoSizeAxes = Axes.Both, Direction = FillDirection.Horizontal, Spacing = new Vector2(10, 0), Children = new[] { base.CreateContent().With(d => { Anchor = Anchor.CentreLeft; Origin = Anchor.CentreLeft; }), perfectText = new OsuSpriteText { Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, Text = "PERFECT", Font = OsuFont.Torus.With(size: 11, weight: FontWeight.SemiBold), Colour = ColourInfo.GradientVertical(Color4Extensions.FromHex("#66FFCC"), Color4Extensions.FromHex("#FF9AD7")), Alpha = 0, UseFullGlyphHeight = false, } } }; } }