UI/HUD/Elements/ToolButton.razor
@using Sandbox.UI;
@inherits Panel
@namespace PlanetMeat

<root>
	<button onmousedown=@ToggleTool class="click-active @ToolPressed @ToolDisabled mat-icon mat-icon-lg">
		@(Tool.Icon)
	</button>
	@{
		var cdt = CooldownText;
		if (cdt != "")
		{
			<span class="ontop cooldown">
				@cdt
			</span>
		}

		var hotkey = Hotkey;
		if (hotkey is not null && hotkey.Length > 0)
		{
			<span class="ontop hotkey">
				<span class="badge">@hotkey</span>
			</span>
		}
	}
</root>

@code
{
	public int ToolIndex { get; set; }
	private PlayerTool Tool => field ??= PlayerTool.Toolbox[ToolIndex];
	private string Hotkey => Keybinds.Current.GetKeycode(PlayerTool.IndexToSlotName(ToolIndex));

	private float CooldownRemaining => Tool?.CooldownRemaining ?? 0.0f;
	private string CooldownText
	{
		get
		{
			var cd = CooldownRemaining;
			if (cd < 0.05f)
				return "";
			if (cd >= 9.95f)
				return ((int)cd).ToString();
			return cd.ToString("N1");
		}
	}

	private void ToggleTool() => Tool?.ToggleUse();

	private string ToolPressed => Tool.IsSelected ? "pressed" : "";
	private string ToolDisabled => Tool.IsSelectable ? "" : "disabled";

	protected override int BuildHash() => System.HashCode.Combine(
		Tool,
		CooldownRemaining,
		Tool.IsSelected
	);
}