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