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

public class CardSnake : Card
{
	public override bool IsAlive => true;

	public override bool ShouldHandleEvent( EventType eventType )
	{
		if ( eventType == EventType.Match && !Manager.Instance.ChosenCards.Contains( this ) )
		{
			if(Manager.IsAdjacent( GridPos, Manager.Instance.ChosenCards[0].GridPos ) || Manager.IsAdjacent( GridPos, Manager.Instance.ChosenCards[1].GridPos ))
				return true;
		}

		return false;
	}

	public override async Task HandleEventAsync( EventType eventType )
	{
		await Task.DelayRealtime( 200 );

		await Manager.Instance.ShakeCard( this );

		await Task.DelayRealtime( 600 );
	}
}