Exemplo n.º 1
0
        private void UpdateAllClients()
        {
            if (_knownPlayers.Count < 1)
            {
                return; // no need to update a single player on his own location (or should we? perhaps later).
            }
            //create the snapshot once and then send to all players
            ServerSnapshotPacket snapshot = new ServerSnapshotPacket();

            snapshot.Players = _nextPlayerId;
            snapshot.X       = new int[snapshot.Players];
            snapshot.Y       = new int[snapshot.Players];

            //suboptimal LINQ query for snapshot data.. fill the snapshot
            for (int i = 0; i < snapshot.Players; i++)
            {
                var p = _knownPlayers.Values.Where(x => x.PlayerNumber == (i + 1)).FirstOrDefault();
                if (p == null)
                {
                    break;
                }
                ;
                snapshot.X[i] = p.PlayerLocation.X;
                snapshot.Y[i] = p.PlayerLocation.Y;
            }

            foreach (var client in _knownPlayers.Values)
            {
                //send a snapshot to every player
                if (client._clientRef.ConnectionState == ConnectionState.Connected)
                {
                    _packetProcessor.Send <ServerSnapshotPacket>(client._clientRef, snapshot, DeliveryMethod.ReliableOrdered);
                }
            }
        }
Exemplo n.º 2
0
        public void SnapshotHandler(ServerSnapshotPacket sp)
        {
            if (sp != null)
            {
                Console.Write($"Server snapshot!:");
                for (int i = 0; i < sp.Players; i++)
                {
                    Console.Write($"P[{i+1}] is X{sp.X[i]},Y{sp.Y[i]}");

                    //update all players
                    var players = _allPlayers();
                    players[i].Location  = new Point(sp.X[i], sp.Y[i]);
                    players[i].IsPresent = true;
                }
                Console.Write("\n");
            }
        }