Example #1
0
        private void PlayerCorrectionCycle()
        {
            PlayerCorrectionLock.Reset();

            var watch = Stopwatch.StartNew();

            while (!PlayerCorrectionToken.IsCancellationRequested)
            {
                foreach (var nearPlayers in NearPlayers.Where(nearPlayers => nearPlayers.Value != null))
                {
                    foreach (var player in nearPlayers.Value.Where(player => player.Moving))
                    {
                        foreach (var playerToSend in nearPlayers.Value.Where(playerToSend => player != playerToSend))
                        {
                            playerToSend.SendPacket(player.GetDataPacket());
                        }
                    }
                }



                if (watch.ElapsedMilliseconds < 10)
                {
                    PlayerCorrectionThreadTime = watch.ElapsedMilliseconds;

                    var time = (int)(5 - watch.ElapsedMilliseconds);
                    if (time < 0)
                    {
                        time = 0;
                    }
                    Thread.Sleep(time);
                }
                watch.Reset();
                watch.Start();
            }

            PlayerCorrectionLock.Set();
        }