public Player GetNextPatrolTarget( [NotNull] Player observer )
{
if ( observer == null )
throw new ArgumentNullException( "observer" );
lock ( patrolLock ) {
Player candidate = Players.RankedAtMost( RankManager.PatrolledRank )
.CanBeSeen( observer )
.Where( p => p.LastActiveTime > p.LastPatrolTime &&
p.HasFullyConnected &&
DateTime.UtcNow.Subtract( p.LastPatrolTime ) > MinPatrolInterval )
.OrderBy( p => p.LastPatrolTime.Ticks )
.FirstOrDefault();
if ( candidate != null ) {
candidate.LastPatrolTime = DateTime.UtcNow;
}
return candidate;
}
}