cards/CardAntenna.cs
using Sandbox;
using System.Threading.Tasks;
public class CardAntenna : Card
{
public override bool ShouldHandleEvent( EventType eventType )
{
return eventType == EventType.Reveal && Manager.Instance.RevealedCard == this && !(Manager.Instance.ChosenCards.Count == 2 && Manager.Instance.ChosenCards.Where(x => x.CardType == CardType.Antenna).Count() == 2);
}
public override async Task HandleEventAsync( EventType eventType )
{
var antennas = Manager.Instance.GetCardsOfType( CardType.Antenna, except: this ).OrderBy(x => (x.GridPos - GridPos).Length);
if ( antennas.Count() == 0 )
return;
var antenna = antennas.ElementAt( 0 );
Manager.Instance.PushEventMessage( this, eventType );
await Task.DelayRealtime( 300 );
var dist = (antenna.GridPos - GridPos).Length;
//Log.Info( $"dist: {dist}" );
int pingTime = (int)Utils.Map( dist, 1f, 5.385f, 150f, 800f, EasingType.SineOut );
//int pingTime = (int)Utils.Map( dist, 1f, 9.85f, 100f, 800f, EasingType.SineOut );
Manager.Instance.PlayCardSfx( "antenna", this, volume: 1f, pitch: 1.25f );
await Manager.Instance.ShakeCard( this, time: pingTime * 0.001f * 0.75f, strength: 55f, easingType: EasingType.SineOut, playSfx: false );
await Task.DelayRealtime( pingTime );
Manager.Instance.PlayCardSfx( "antenna", this, volume: Utils.Map( dist, 1f, 5.83f, 1.1f, 0.8f, EasingType.SineIn ), pitch: Utils.Map( dist, 1f, 5.83f, 1.25f, 0.65f, EasingType.SineIn ) );
await Manager.Instance.ShakeCard( this, time: pingTime * 0.001f * 0.75f, strength: 55f, easingType: EasingType.SineOut, playSfx: false );
//await Task.DelayRealtime( 900 - pingTime );
await Task.DelayRealtime( 200 );
Manager.Instance.PopEventMessage();
}
}