public void AssignAverageSpawnpoint() { if (Spawnpoints.Count < 2 || Spawnpoints.Any(x => x.IsAverage)) { return; } var averageX = Spawnpoints.Sum(x => x.X) / Spawnpoints.Count; var averageY = Spawnpoints.Sum(x => x.Y) / Spawnpoints.Count; var averageZ = Spawnpoints.Sum(x => x.Z) / Spawnpoints.Count; var order = Spawnpoints.OrderBy(x => x.Index).ThenBy(x => x.Time); var spawnpoint = order.FirstOrDefault(x => x.O != 0f); if (spawnpoint == null) { spawnpoint = order.FirstOrDefault(); } var o = spawnpoint.O; var nearest = Spawnpoints.OrderBy(x => x.Distance(averageX, averageY, averageZ)).First(); var farthestDistance = Spawnpoints.Select(x => x.Distance(averageX, averageY, averageZ)).Max(); nearest.IsAverage = true; nearest.EstimatedSpawnDistance = farthestDistance; }
public void AssignAverageWaitTime() { if (Spawnpoints.Count < 2 || Spawnpoints.All(x => x.WaitTime != 0)) { return; } var order = Spawnpoints.OrderBy(x => x.Index).ThenBy(x => x.Time).GroupBy(x => x.Time); var waittimes = new List <int>(); var array = order.Select(x => x.First()).ToArray(); for (var i = 0; i < array.Length; i++) { if (i + 1 < array.Length) { var ms = (int)(array[i + 1].Time - array[i].Time).TotalMilliseconds; waittimes.Add(ms); array[i + 1].WaitTime = ms; } } var average = 0; if (waittimes.Count > 0) { average = waittimes.Sum() / waittimes.Count; } for (var i = 0; i < array.Length; i++) { if (i + 1 < array.Length) { array[i + 1].WaitTime = average; } } }