// Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Graphics; using osu.Framework.Graphics.Transforms; using osu.Framework.MathUtils; using System; namespace osu.Game.Graphics.UserInterface { public class ScoreCounter : RollingCounter { protected override Type TransformType => typeof(TransformScore); protected override double RollingDuration => 1000; protected override EasingTypes RollingEasing => EasingTypes.Out; /// /// How many leading zeroes the counter has. /// public uint LeadingZeroes { get; protected set; } /// /// Displays score. /// /// How many leading zeroes the counter will have. public ScoreCounter(uint leading = 0) { DisplayedCountSpriteText.FixedWidth = true; LeadingZeroes = leading; } protected override double GetProportionalDuration(double currentValue, double newValue) { return currentValue > newValue ? currentValue - newValue : newValue - currentValue; } protected override string FormatCount(double count) { return ((long)count).ToString("D" + LeadingZeroes); } public override void Increment(double amount) { Current.Value = Current + amount; } protected class TransformScore : Transform { public override double CurrentValue { get { double time = Time?.Current ?? 0; if (time < StartTime) return StartValue; if (time >= EndTime) return EndValue; return Interpolation.ValueAt(time, (float)StartValue, (float)EndValue, StartTime, EndTime, Easing); } } public override void Apply(Drawable d) { base.Apply(d); ((ScoreCounter)d).DisplayedCount = CurrentValue; } } } }