mirror of
https://github.com/osukey/osukey.git
synced 2025-07-02 16:59:53 +09:00
Allow providing custom sprite text for RollingCounter<T>
This commit is contained in:
@ -7,6 +7,7 @@ using osu.Framework.Graphics.Sprites;
|
||||
using osu.Game.Graphics.Sprites;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Framework.Bindables;
|
||||
using osuTK.Graphics;
|
||||
|
||||
@ -20,7 +21,7 @@ namespace osu.Game.Graphics.UserInterface
|
||||
/// </summary>
|
||||
public Bindable<T> Current = new Bindable<T>();
|
||||
|
||||
protected SpriteText DisplayedCountSpriteText;
|
||||
private SpriteText displayedCountSpriteText;
|
||||
|
||||
/// <summary>
|
||||
/// If true, the roll-up duration will be proportional to change in value.
|
||||
@ -46,29 +47,49 @@ namespace osu.Game.Graphics.UserInterface
|
||||
public virtual T DisplayedCount
|
||||
{
|
||||
get => displayedCount;
|
||||
|
||||
set
|
||||
{
|
||||
if (EqualityComparer<T>.Default.Equals(displayedCount, value))
|
||||
return;
|
||||
|
||||
displayedCount = value;
|
||||
DisplayedCountSpriteText.Text = FormatCount(value);
|
||||
if (displayedCountSpriteText != null)
|
||||
displayedCountSpriteText.Text = FormatCount(value);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract void Increment(T amount);
|
||||
|
||||
private float textSize = 40f;
|
||||
|
||||
public float TextSize
|
||||
{
|
||||
get => DisplayedCountSpriteText.Font.Size;
|
||||
set => DisplayedCountSpriteText.Font = DisplayedCountSpriteText.Font.With(size: value);
|
||||
get => displayedCountSpriteText?.Font.Size ?? textSize;
|
||||
set
|
||||
{
|
||||
if (TextSize == value)
|
||||
return;
|
||||
|
||||
textSize = value;
|
||||
if (displayedCountSpriteText != null)
|
||||
displayedCountSpriteText.Font = displayedCountSpriteText.Font.With(size: value);
|
||||
}
|
||||
}
|
||||
|
||||
private Color4 accentColour;
|
||||
|
||||
public Color4 AccentColour
|
||||
{
|
||||
get => DisplayedCountSpriteText.Colour;
|
||||
set => DisplayedCountSpriteText.Colour = value;
|
||||
get => displayedCountSpriteText?.Colour ?? accentColour;
|
||||
set
|
||||
{
|
||||
if (AccentColour == value)
|
||||
return;
|
||||
|
||||
accentColour = value;
|
||||
if (displayedCountSpriteText != null)
|
||||
displayedCountSpriteText.Colour = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -76,27 +97,21 @@ namespace osu.Game.Graphics.UserInterface
|
||||
/// </summary>
|
||||
protected RollingCounter()
|
||||
{
|
||||
Children = new Drawable[]
|
||||
{
|
||||
DisplayedCountSpriteText = new OsuSpriteText { Font = OsuFont.Numeric }
|
||||
};
|
||||
|
||||
TextSize = 40;
|
||||
AutoSizeAxes = Axes.Both;
|
||||
|
||||
DisplayedCount = Current.Value;
|
||||
|
||||
Current.ValueChanged += val =>
|
||||
{
|
||||
if (IsLoaded) TransformCount(displayedCount, val.NewValue);
|
||||
if (IsLoaded)
|
||||
TransformCount(DisplayedCount, val.NewValue);
|
||||
};
|
||||
}
|
||||
|
||||
protected override void LoadComplete()
|
||||
[BackgroundDependencyLoader]
|
||||
private void load()
|
||||
{
|
||||
base.LoadComplete();
|
||||
|
||||
DisplayedCountSpriteText.Text = FormatCount(Current.Value);
|
||||
displayedCountSpriteText = CreateSpriteText();
|
||||
displayedCountSpriteText.Text = FormatCount(displayedCount);
|
||||
Child = displayedCountSpriteText;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -167,5 +182,11 @@ namespace osu.Game.Graphics.UserInterface
|
||||
|
||||
this.TransformTo(nameof(DisplayedCount), newValue, rollingTotalDuration, RollingEasing);
|
||||
}
|
||||
|
||||
protected virtual OsuSpriteText CreateSpriteText() => new OsuSpriteText
|
||||
{
|
||||
Font = OsuFont.Numeric.With(size: textSize),
|
||||
Colour = accentColour,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user