cards/CardWine.cs
using Sandbox;
using System.Threading.Tasks;
public class CardWine : Card
{
public override bool IsFoodOrBeverage => true;
private int _lastShakeTurnNum = -1;
public override bool OverrideShakeSfx => true;
public override bool OnlyOverrideShakeSfxWhenRevealed => true;
public override bool ShouldHandleEvent( EventType eventType )
{
if ( eventType == EventType.Match && Manager.Instance.ChosenCards[1] == this )
return true;
if( eventType == EventType.Shake )
{
if ( IsShaking )
return false;
if ( Manager.Instance.ShakenCard == this )
return false;
if ( !Manager.IsAdjacent( GridPos, Manager.Instance.ShakenCard.GridPos ) )
return false;
// prevent wines shaking eachother repeatedly
if ( Manager.Instance.ShakenCard.CardType == CardType.Wine && Manager.Instance.Stats[StatType.TurnNum] == _lastShakeTurnNum )
return false;
return true;
}
return false;
}
public override async Task HandleEventAsync( EventType eventType )
{
if(eventType == EventType.Match)
{
Manager.Instance.PushEventMessage( this, eventType );
await Task.DelayRealtime( 50 );
Manager.Instance.PlayCardSfxBetween( "wine", Manager.Instance.ChosenCards[0], Manager.Instance.ChosenCards[1], volume: 1.4f, pitch: Game.Random.Float( 0.95f, 1.05f ) );
await Task.DelayRealtime( 50 );
int healAmount = 2 + (int)Manager.Instance.Stats[StatType.FoodAdditionalHeal];
Manager.Instance.SpawnHealHPFloater( healAmount, WorldPosition );
await Manager.Instance.GainHP( healAmount );
await Task.DelayRealtime( 800 );
Manager.Instance.PopEventMessage();
}
else
{
await Task.DelayRealtime( 50 );
_lastShakeTurnNum = (int)Manager.Instance.Stats[StatType.TurnNum];
await Manager.Instance.ShakeCard( this );
await Task.DelayRealtime( 100 );
}
}
public override string GetEventText( EventType eventType )
{
if ( eventType == EventType.Match )
return "✅Match: +2 HP";
else
return "Shake if an adjacent card shakes";
}
public override void PlayShakeSfx()
{
if ( IsRevealed )
Manager.Instance.PlayCardSfx( "wine_shake", this, volume: 0.6f, pitch: Game.Random.Float( 0.94f, 1.06f ) );
else
base.PlayShakeSfx();
}
}