cards/CardCheese.cs
using Sandbox;
using System.Threading.Tasks;

public class CardCheese : Card
{
	public override bool IsFoodOrBeverage => true;

	private int _numTurnsElapsed;

	public override bool ShouldHandleEvent( EventType eventType )
	{
		return (eventType == EventType.TurnStart && CardType == CardType.Cheese) || (eventType == EventType.Match && Manager.Instance.ChosenCards[1] == this);
	}

	public override async Task HandleEventAsync( EventType eventType )
	{
		if(eventType == EventType.TurnStart)
		{
			_numTurnsElapsed++;
			
			if(_numTurnsElapsed >= 7)
			{
				SetCardType(CardType.CheeseMoldy);
			}
		}
		else
		{
			Manager.Instance.PushEventMessage( this, eventType );

			await Task.DelayRealtime( 350 );

			Manager.Instance.PlayCardSfxBetween( "cheese", Manager.Instance.ChosenCards[0], Manager.Instance.ChosenCards[1], volume: 1f, pitch: Game.Random.Float( 0.95f, 1.05f ) );

			if ( CardType == CardType.Cheese )
			{
				await Task.DelayRealtime( 400 );

				var healAmount = 3 + (int)Manager.Instance.Stats[StatType.FoodAdditionalHeal];

				Manager.Instance.SpawnHealHPFloater( healAmount, WorldPosition );

				await Manager.Instance.GainHP( healAmount );

				await Task.DelayRealtime( 300 );

				//Manager.Instance.PlayCardSfxBetween( "potion_heal", Manager.Instance.ChosenCards[0], Manager.Instance.ChosenCards[1], volume: 1f, pitch: Game.Random.Float( 0.97f, 1.03f ) );
			}
			else
			{
				await Task.DelayRealtime( 300 );

				Manager.Instance.PlayCardSfxBetween( "cheese_moldy", Manager.Instance.ChosenCards[0], Manager.Instance.ChosenCards[1], volume: 1.2f, pitch: Game.Random.Float( 0.95f, 1.05f ) );

				await Task.DelayRealtime( 400 );

				//var lossAmount = 1;

				//Manager.Instance.SpawnLoseHPFloater( lossAmount, WorldPosition );

				//await Manager.Instance.LoseHP( lossAmount );
			}

			await Task.DelayRealtime( 700 );

			Manager.Instance.PopEventMessage();
		}
	}

	public override string GetEventText( EventType eventType )
	{
		return "✅Match: +3 HP if not moldy";
	}
}