UI/Components/ProgressBar.razor
@using Sandbox.UI;
@inherits Panel
@namespace PlanetMeat

<root>
	<div class="progress-fill" style="width: @_progressPercent%"></div>
	<span class="progress-text">@ProgressText</span>
</root>

@code
{
	public bool ShowPercentage { get; set; } = true;
	private string ProgressText
	{
		get
		{
			var t = CurrentProgress + " / " + MaxProgress;
			if (ShowPercentage)
				t += " (" + (int)_progressPercent + "%)";
			return t;
		}
	}

	public float MaxProgress
	{
		get;
		set
		{
			field = value;
			BakePercentage();
		}
	} = 100.0f;

	public float CurrentProgress
	{
		get;
		set
		{
			field = value;
			BakePercentage();
		}
	} = 50.0f;

	private float _progressPercent = 100.0f;

	private void BakePercentage()
	{
		_progressPercent = (CurrentProgress / MaxProgress).Clamp(0.0f, 1.0f).ToPercentage();
	}

	protected override int BuildHash() => System.HashCode.Combine(MaxProgress, CurrentProgress);
}