relics/RelicSocks.cs
using Sandbox;
using System.Reflection.PortableExecutable;
using System.Runtime.Versioning;
using System.Threading.Tasks;
public class RelicSocks : Relic
{
public override bool ShouldHandleEvent( EventType eventType )
{
return eventType == EventType.LevelStart;
}
public override async Task HandleEventAsync(EventType eventType)
{
Manager.Instance.PushEventMessage( this, eventType );
await Task.DelayRealtime( 500 );
List<Card> validCards = new();
foreach( var card in Manager.Instance.Cards )
{
if ( validCards.Contains( card ) )
continue;
var leftCard = Manager.Instance.GetCardAtGridPos( card.GridPos + new IntVector2( -1, 0 ) );
if(leftCard != null && leftCard.CardType == card.CardType)
{
validCards.Add( card );
validCards.Add( leftCard );
continue;
}
var rightCard = Manager.Instance.GetCardAtGridPos( card.GridPos + new IntVector2( 1, 0 ) );
if ( rightCard != null && rightCard.CardType == card.CardType )
{
validCards.Add( card );
validCards.Add( rightCard );
continue;
}
var downCard = Manager.Instance.GetCardAtGridPos( card.GridPos + new IntVector2( 0, -1 ) );
if ( downCard != null && downCard.CardType == card.CardType )
{
validCards.Add( card );
validCards.Add( downCard );
continue;
}
var upCard = Manager.Instance.GetCardAtGridPos( card.GridPos + new IntVector2( 0, 1 ) );
if ( upCard != null && upCard.CardType == card.CardType )
{
validCards.Add( card );
validCards.Add( upCard );
continue;
}
}
if(validCards.Count == 0)
{
await Task.DelayRealtime( 800 );
Manager.Instance.PopEventMessage();
return;
}
validCards.Shuffle();
for( int i = 0; i < Math.Min(Level, validCards.Count); i++ )
{
var card = validCards[i];
await Manager.Instance.ShakeCard( card );
await Task.DelayRealtime( 800 );
}
Manager.Instance.PopEventMessage();
}
}