예제 #1
0
        private void ReceiveAllPlayers(NetIncomingMessage inc)
        {
            var count = inc.ReadInt32();

            for (int n = 0; n < count; n++)
            {
                var player = new Player();
                inc.ReadAllProperties(player);
                if (player.Name == Player.Name)
                {
                    continue;
                }
                if (OtherPlayers.Any(p => p.Name == player.Name))
                {
                    var oldPlayer = OtherPlayers.FirstOrDefault(p => p.Name == player.Name);
                    oldPlayer._position.X = player._position.X;
                    oldPlayer._position.Y = player._position.Y;
                }
                else
                {
                    OtherPlayers.Add(player);
                }
            }
        }
예제 #2
0
        public void Update()
        {
            NetIncomingMessage inc;

            while ((inc = _client.ReadMessage()) != null)
            {
                if (inc.MessageType != NetIncomingMessageType.Data)
                {
                    continue;
                }
                var packageType = (PacketType)inc.ReadByte();
                switch (packageType)
                {
                case PacketType.AcceptedConnection:
                    break;

                case PacketType.Login:
                    if (inc.ReadBoolean())
                    {
                        Player.xPosition = inc.ReadFloat();
                        Player.yPosition = inc.ReadFloat();
                        ReceiveAllPlayers(inc);
                    }
                    break;

                //Recois un Packet de type nouveau joueur.
                case PacketType.NewPlayer:
                    //Créé l'instance du nouveau joueur
                    var player = new Player();
                    //Assigne les propriétés reçu au nouveau joueur
                    inc.ReadAllProperties(player);
                    //Si le nom du nouveau joueur est différent du nom du joueur alors on le rajoute à la liste
                    if (player.Name != Player.Name)
                    {
                        OtherPlayers.Add(player);
                    }
                    break;

                case PacketType.AllPlayers:
                    //Reçois tous les joueurs déjà présent.
                    ReceiveAllPlayers(inc);
                    break;

                case PacketType.Disconnected:
                    //Quand un joueur se déconnecte on lui envoie les propriétés du joueur déconnecté et on le supprime de la liste
                    var playerDc = new Player();
                    inc.ReadAllProperties(playerDc);
                    OtherPlayers.Remove(OtherPlayers.Find(x => x.Name == playerDc.Name));
                    break;

                case PacketType.Input:
                    var playerPos = new Player();
                    inc.ReadAllProperties(playerPos);
                    if (Player.Name == playerPos.Name)
                    {
                        Player._position.X = playerPos._position.X;
                        Player._position.Y = playerPos._position.Y;
                    }
                    else if (OtherPlayers.Count > 0)
                    {
                        try
                        {
                            OtherPlayers.Find(x => x.Name == playerPos.Name)._position.X = playerPos._position.X;
                            OtherPlayers.Find(y => y.Name == playerPos.Name)._position.Y = playerPos._position.Y;
                        }
                        catch
                        {
                        }
                    }
                    break;

                case PacketType.UPDATEPosition:
                    Fall();
                    break;

                default:
                    break;
                }
                //Fall();
            }
        }