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

public class CardAlarmClock : Card
{
	private bool _hasActivated;

	protected override void OnUpdate()
	{
		base.OnUpdate();

		int totalTime = (int)Manager.Instance.Stats[StatType.TimerTotalTime];
		if ( totalTime < 2 )
			return;

		if( _hasActivated && Manager.Instance.TimerElapsed < 1f )
		{
			_hasActivated = false;
		}

		float remainingTime = Manager.Instance.Stats[StatType.TimerTotalTime] - Manager.Instance.TimerElapsed;

		if ( !_hasActivated && remainingTime <= 1f )
		{
			if(Game.Random.Float(0f, 1f) < 0.7f)
			{
				//Shake();
				//await Manager.Instance.ShakeCard( this );

				//var alarmClocks = Manager.Instance.Cards.Where( x => x.CardType == CardType.AlarmClock ).ToList();
				//if ( alarmClocks.Count >= 2 && this == alarmClocks[0] )
				//{
				//	Manager.Instance.PlayCardSfxBetween( "alarm_clock", alarmClocks[0], alarmClocks[1], volume: 0.7f, pitch: Game.Random.Float( 0.98f, 1.03f ) );
				//}

				Manager.Instance.PlayCardSfx( "alarm_clock", this, volume: 0.375f, pitch: Game.Random.Float( 0.95f, 1.05f ) );
			}

			_hasActivated = true;
		}
	}
}