mirror of
https://github.com/ppy/osu.git
synced 2024-12-16 22:22:54 +08:00
87 lines
2.9 KiB
C#
87 lines
2.9 KiB
C#
using OpenTK;
|
|
using OpenTK.Graphics;
|
|
using osu.Framework.Graphics.Transformations;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace osu.Game.Graphics.UserInterface
|
|
{
|
|
/// <summary>
|
|
/// Allows tint and vertical scaling animation. Used by osu!taiko and osu!mania.
|
|
/// </summary>
|
|
public class AlternativeComboCounter : ULongCounter // btw, I'm terribly bad with names... OUENDAN!
|
|
{
|
|
public Color4 OriginalColour;
|
|
public Color4 TintColour = Color4.OrangeRed;
|
|
public int TintDuration = 500;
|
|
public float ScaleFactor = 1;
|
|
public EasingTypes TintEasing = EasingTypes.None;
|
|
public bool CanAnimateWhenBackwards = false;
|
|
|
|
public AlternativeComboCounter()
|
|
{
|
|
IsRollingContinuous = false;
|
|
}
|
|
|
|
public override void Load()
|
|
{
|
|
base.Load();
|
|
countSpriteText.Hide();
|
|
OriginalColour = Colour;
|
|
}
|
|
|
|
public override void ResetCount()
|
|
{
|
|
SetCountWithoutRolling(0);
|
|
}
|
|
|
|
protected override void transformCount(ulong currentValue, ulong newValue)
|
|
{
|
|
// Animate rollover only when going backwards
|
|
if (newValue > currentValue)
|
|
{
|
|
updateTransforms(typeof(TranformULongCounter));
|
|
removeTransforms(typeof(TranformULongCounter));
|
|
VisibleCount = newValue;
|
|
}
|
|
else
|
|
transformCount(new TranformULongCounter(Clock), currentValue, newValue);
|
|
}
|
|
|
|
protected override ulong GetProportionalDuration(ulong currentValue, ulong newValue)
|
|
{
|
|
ulong difference = currentValue > newValue ? currentValue - newValue : currentValue - newValue;
|
|
return difference * RollingDuration;
|
|
}
|
|
|
|
protected virtual void transformAnimate()
|
|
{
|
|
countSpriteText.Colour = TintColour;
|
|
countSpriteText.ScaleTo(new Vector2(1, ScaleFactor));
|
|
countSpriteText.FadeColour(OriginalColour, TintDuration, TintEasing);
|
|
countSpriteText.ScaleTo(new Vector2(1, 1), TintDuration, TintEasing);
|
|
}
|
|
|
|
protected override void transformVisibleCount(ulong currentValue, ulong newValue)
|
|
{
|
|
if (countSpriteText != null)
|
|
{
|
|
countSpriteText.Text = newValue.ToString(@"#,0");
|
|
if (newValue == 0)
|
|
{
|
|
countSpriteText.FadeOut(TintDuration);
|
|
return;
|
|
}
|
|
countSpriteText.Show();
|
|
if (newValue > currentValue || CanAnimateWhenBackwards)
|
|
{
|
|
transformAnimate();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|