ui/BountyElement.razor
@using Sandbox;
@using Sandbox.UI;
@inherits Panel
@attribute [StyleSheet("BountyElement.razor.scss")]

<root style="width:@(Size)px; height:@(Size)px; transform:scale(@(Utils.Map(Manager.Instance.TimeSinceTurnStart, 0f, 0.5f, 1.25f, 1f, EasingType.QuadOut)));">
	@{
		int currTurn = (int)Manager.Instance.Stats[StatType.TurnNum];
		bool isActive = Manager.Instance.Stats[StatType.TurnNum] >= BountyData.startTurn;
		int turnsRemaining = (isActive ? BountyData.endTurn : BountyData.startTurn) - currTurn;
	}

	<div class="bounty_container" style="background-image:url(@($"textures/bounty_2.png")); opacity:@(isActive ? 1f : Utils.Map(currTurn, 0, BountyData.startTurn, 0.1f, 0.3f));">
		<div class="turns_remaining" style="font-size:@(Size * 0.6f)px; color:@((isActive ? new Color(0.5f, 0.5f, 1f) : new Color(1f, 0.5f, 0.5f)).Rgba);">
			@($"{turnsRemaining}")
		</div>

		<div class="money_amount" style="font-size:@(Size * 0.4f)px; left:@(-Size * 0.3f)px; ">
			@($"${BountyData.moneyAmount}")
		</div>
	</div>
</root>

@code
{
	public CardType CardType { get; set; }
	public float Size { get; set; }
	public int Index { get; set; }
	public int TypeIndexUnmatched { get; set; }
	public BountyData BountyData { get; set; }

	protected override void OnMouseOver(MousePanelEvent e)
	{
		base.OnMouseOver(e);

		Manager.Instance.HoveredPanelType = CardType;
		Manager.Instance.IsHoveringBounty = true;

		if(Manager.Instance.TimeSinceHoverSfx > 0.025f)
		{
			Manager.Instance.PlaySfx("click_1", new Vector3(100f, 0f, 0f));
			Manager.Instance.TimeSinceHoverSfx = 0f;
		}

		e.StopPropagation();
	}

	protected override void OnMouseOut(MousePanelEvent e)
	{
		base.OnMouseOut(e);

		if(Manager.Instance.IsHoveringBounty) 
		{
			Manager.Instance.HoveredPanelType = CardType.None;
			Manager.Instance.HoveredPanelIndex = -1;
			Manager.Instance.IsHoveringBounty = false;
		}

		e.StopPropagation();
	}

	protected override int BuildHash()
	{
		var turnStartTimeHash = Manager.Instance.TimeSinceTurnStart < 0.5f ? Manager.Instance.TimeSinceTurnStart.Relative : 0f;

		return HashCode.Combine(
			CardType,
			Size,
			Manager.Instance.Stats[StatType.TurnNum],
			turnStartTimeHash
		);
	}
}