Path: blob/master/osu.Game/Screens/Play/HUD/ArgonUnstableRateCounter.cs
4919 views
// Copyright (c) ppy Pty Ltd <[email protected]>. Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; using osu.Game.Configuration; using osu.Game.Localisation.SkinComponents; using osu.Game.Skinning; namespace osu.Game.Screens.Play.HUD { public partial class ArgonUnstableRateCounter : UnstableRateCounter, ISerialisableDrawable { private ArgonCounterTextComponent text = null!; protected override double RollingDuration => 250; private const float alpha_when_invalid = 0.3f; [SettingSource("Wireframe opacity", "Controls the opacity of the wireframes behind the digits.")] public BindableFloat WireframeOpacity { get; } = new BindableFloat(0.25f) { Precision = 0.01f, MinValue = 0, MaxValue = 1, }; [SettingSource(typeof(SkinnableComponentStrings), nameof(SkinnableComponentStrings.ShowLabel))] public Bindable<bool> ShowLabel { get; } = new BindableBool(true); protected override void LoadComplete() { base.LoadComplete(); IsValid.BindValueChanged(v => text.FadeTo(v.NewValue ? 1 : alpha_when_invalid, 1000, Easing.OutQuint), true); FinishTransforms(true); } public override int DisplayedCount { get => base.DisplayedCount; set { base.DisplayedCount = value; updateWireframe(); } } private void updateWireframe() { int digitsRequiredForDisplayCount = Math.Max(3, getDigitsRequiredForDisplayCount()); if (digitsRequiredForDisplayCount != text.WireframeTemplate.Length) text.WireframeTemplate = new string('#', digitsRequiredForDisplayCount); } private int getDigitsRequiredForDisplayCount() { int digitsRequired = 1; long c = DisplayedCount; while ((c /= 10) > 0) digitsRequired++; return digitsRequired; } protected override IHasText CreateText() => text = new ArgonCounterTextComponent(Anchor.TopRight, "UR") { WireframeOpacity = { BindTarget = WireframeOpacity }, ShowLabel = { BindTarget = ShowLabel }, }; } }