public void Execute(Collision collision) { IProjectile proj = (IProjectile)collision.Collider; IPlayer player = (IPlayer)collision.Collidee; switch (proj) { case EnemyBoomerang _: if (player.GetDirection() != CompassDirectionUtil.GetDirectionCharCaps(collision.Side)) { player.ReceiveDamage(boomerangDamage, CompassDirectionUtil.GetOppositeDirectionVector(collision.Side)); } else { AudioManager.PlayFireForget(shield); } proj.BeginDespawn(); break; case Fireballs _: player.ReceiveDamage(fireballDamage, CompassDirectionUtil.GetOppositeDirectionVector(collision.Side)); proj.BeginDespawn(); break; case CandleFire _: player.ReceiveDamage(fireballDamage, CompassDirectionUtil.GetOppositeDirectionVector(collision.Side)); break; } }