Spending/Upgrades/Targetable/RepairTargetableUpgrade.cs
using System;

namespace PlanetMeat;

[Title( "Target Upgrade - Repair" )]
public sealed class RepairTargetableUpgrade : BaseUpgrade
{
	const int HP_PER_RANK = 10;

	private Targetable Targetable => field ??= this.FindNearestUpwards<Targetable>();

	public override bool Purchaseable => Targetable.CurrentHp < Targetable.MaxHp;
	public override double NextCost => Math.Round( Agenda.Current.RoundNum + Progressions.StairSlow( Rank ) );
	private int RepairResult => Math.Min( Targetable.CurrentHp + HP_PER_RANK, Targetable.MaxHp );

	protected override void OnRankChanged()
	{
		Targetable?.CurrentHp = RepairResult;
	}

	public override string GetDisplayedEffectAt( int rank )
	{
		if ( rank == Rank )
			return Targetable.CurrentHp.ToString();
		return RepairResult.ToString();
	}
}