// Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; using osu.Framework.Graphics; using osu.Framework.Graphics.Transforms; using osu.Framework.MathUtils; namespace osu.Game.Graphics.UserInterface { /// /// Used as an accuracy counter. Represented visually as a percentage. /// public class SimpleComboCounter : RollingCounter { protected override Type TransformType => typeof(TransformCounterCount); protected override double RollingDuration => 750; public SimpleComboCounter() { Current.Value = DisplayedCount = 0; } protected override string FormatCount(int count) { return $@"{count}x"; } protected override double GetProportionalDuration(int currentValue, int newValue) { return Math.Abs(currentValue - newValue) * RollingDuration * 100.0f; } public override void Increment(int amount) { Current.Value = Current + amount; } private class TransformCounterCount : Transform { public virtual int CurrentValue { get { double time = Time?.Current ?? 0; if (time < StartTime) return StartValue; if (time >= EndTime) return EndValue; return (int)Interpolation.ValueAt(time, StartValue, EndValue, StartTime, EndTime, Easing); } } public override void Apply(Drawable d) => ((SimpleComboCounter)d).DisplayedCount = CurrentValue; public override void ReadIntoStartValue(Drawable d) => StartValue = ((SimpleComboCounter)d).DisplayedCount; } } }