public static IEnumerable<Player> CanSee( [NotNull] this IEnumerable<Player> source, [NotNull] Player targetPlayer ) {
if( source == null ) throw new ArgumentNullException( "source" );
if( targetPlayer == null ) throw new ArgumentNullException( "targetPlayer" );
foreach( Player player in source ) {
if( player != targetPlayer && player.CanSee( targetPlayer ) ) {
yield return player;
}
}
}