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

<root>
	@{
		var hasTools = HasTools;
		if (hasTools && SelectedTool is PlayerTool selTool)
		{
			<div class="info grow">
				<span class="noshrink pm-title">#tool.@(selTool.Ident).title</span>
				<div class="desc">
					<span>#tool.@(selTool.Ident).desc</span>
				</div>
			</div>
		}

		<div class="gutter">
			@if (hasTools)
			{
				<div class="toolbox">
					@for (int i = 0; i < Tools.Count; i++)
					{
						<ToolButton ToolIndex=@i></ToolButton>
					}
				</div>
			}
			<div class="hp pm-body">
				<ProgressBar class="pm-inset" CurrentProgress=@DrillCurrentHp MaxProgress=@DrillMaxHp></ProgressBar>
				@if (ShowPhoenix)
				{
					var phCharges = Drill.PhoenixChargesRemaining;
					<div class="phoenix">
						<span class="mat-icon">@(phCharges > 0 ? "refresh" : "update_disabled")</span>
						@if (phCharges > 0)
						{
							<span>@phCharges</span>
						}
					</div>
				}
			</div>
		</div>
	}
</root>

@code
{
	private PlayerTool SelectedTool => PlayerTool.Selected;
	private bool HasTools => Agenda.Current.Phase == Agenda.Phases.Wave && Tools.Any();
	private bool ShowPhoenix => Drill.HasPhoenix;

	private List<PlayerTool> Tools => PlayerTool.Toolbox;
	private Targetable Drill => FailOnKilled.VitalTarget;
	private int DrillCurrentHp => Drill?.CurrentHp ?? 0;
	private int DrillMaxHp => Drill?.MaxHp ?? 0;

	public override void Tick()
	{
		base.Tick();
		for (int i = 0; i < Tools.Count; i++)
		{
			if (PlayerTool.IndexSlotPressed(i))
				Tools[i].ToggleUse();
		}
	}

	protected override int BuildHash() => System.HashCode.Combine(
		DrillCurrentHp,
		DrillMaxHp,
		HasTools,
		SelectedTool,
		Tools.HashContents()
	);
}