Пример #1
0
        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;
        }
Пример #2
0
        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;
                }
            }
        }