Example #1
0
        public Client(NetConnection connection, string name, int id)
        {
            Connection = connection;
            Name = name;
            Id = id;

            Player = new Player(new Vector2(100, 100), Player.TextureSize, Helper.GetRandomColor());

            SendPlayerInformation();
        }
        public static void Update()
        {
            float elapsed = TimeManager.Elapsed;

            _elapsed += TimeManager.ActualElapsed;

            if (_elapsed >= _sendInterval)
            {
                _elapsed = 0f;

                GetServerPlatforms();
            }

            GetServerPlayers();

            // Receive network data.
            NetIncomingMessage msg;
            while ((msg = NetClient.ReadMessage()) != null)
            {
                switch (msg.MessageType)
                {
                    case NetIncomingMessageType.Data:
                        {
                            var type = new ClientMessageType(msg.ReadInt32());

                            switch (type.Type)
                            {
                                case Headers.Client.NewPlayerInfo:
                                    {
                                        int id = msg.ReadInt32();
                                        float x = msg.ReadFloat();
                                        float y = msg.ReadFloat();
                                        int w = msg.ReadInt32();
                                        int h = msg.ReadInt32();
                                        Color drawColor = new Color(msg.ReadByte(), msg.ReadByte(), msg.ReadByte(), msg.ReadByte());

                                        Id = id;
                                        Player = new Player(new Vector2(x, y), new Vector2(w, h), drawColor);

                                        break;
                                    }
                                case Headers.Client.PlayerInfo:
                                    {
                                        float x = msg.ReadFloat();
                                        float y = msg.ReadFloat();
                                        float velX = msg.ReadFloat();
                                        float velY = msg.ReadFloat();

                                        Player.Position = new Vector2(x, y);
                                        Player.Velocity = new Vector2(velX, velY);

                                        break;
                                    }
                                case Headers.Client.ServerPlayers:
                                    {
                                        var plrs = new List<Player>();

                                        while (msg.Position != msg.LengthBits)
                                        {
                                            float x = msg.ReadFloat();
                                            float y = msg.ReadFloat();
                                            float velX = msg.ReadFloat();
                                            float velY = msg.ReadFloat();
                                            Color drawColor = new Color(msg.ReadByte(), msg.ReadByte(), msg.ReadByte(), msg.ReadByte());
                                            float moveDirX = msg.ReadFloat();
                                            float moveDirY = msg.ReadFloat();

                                            plrs.Add(new Player(new Vector2(x, y), Player.PlayerSize, drawColor)
                                                     	{
                                                     		MoveDirection = new Vector2(moveDirX, moveDirY),
                                                            Velocity = new Vector2(velX, velY)
                                                     	});
                                        }

                                        _serverPlayers = plrs;

                                        break;
                                    }
                                case Headers.Client.ServerPlatforms:
                                    {
                                        var platforms = new List<Platform>();

                                        while (msg.Position != msg.LengthBits)
                                        {
                                            int x = msg.ReadInt32();
                                            int y = msg.ReadInt32();
                                            int width = msg.ReadInt32();
                                            int height = msg.ReadInt32();

                                            platforms.Add(new Platform(new Rectangle(x, y, width, height)));
                                        }

                                        PlatformWorld.Platforms = platforms;

                                        break;
                                    }
                            }

                            break;
                        }
                    case NetIncomingMessageType.StatusChanged:
                        {
                            var status = (NetConnectionStatus) msg.ReadByte();

                            if (Program.Debugging)
                                Console.WriteLine("Status changed to: " + status);

                            if (status == NetConnectionStatus.Disconnected)
                            {
                                Console.WriteLine("Server shutdown");
                                Environment.Exit(0);
                            }

                            break;
                        }
                    default:
                        {
                            if (Program.Debugging)
                                Console.WriteLine("Unhandled " + msg.MessageType + ". Contained string: \"" + msg.ReadString() + "\".");

                            break;
                        }
                }
            }

            // Update player
            if (Player != null)
            {
                // Update input
                if (InputManager.InputManager.KeyJustPressed(Keys.A))
                {
                    Player.SetMoveDirection(-1, Player.MoveDirection.Y);
                    //ServerSetMoveDirection(Player.MoveDirection);
                }
                else if (InputManager.InputManager.KeyJustReleased(Keys.A))
                {
                    if (!InputManager.InputManager.GetPressedKeys().Contains(Keys.D))
                    {
                        Player.SetMoveDirection(0, Player.MoveDirection.Y);
                        //ServerSetMoveDirection(Player.MoveDirection);
                    }
                }

                if (InputManager.InputManager.KeyJustPressed(Keys.D))
                {
                    Player.SetMoveDirection(1, Player.MoveDirection.Y);
                    //ServerSetMoveDirection(Player.MoveDirection);
                }
                else if (InputManager.InputManager.KeyJustReleased(Keys.D))
                {
                    if (!InputManager.InputManager.GetPressedKeys().Contains(Keys.A))
                    {
                        Player.SetMoveDirection(0, Player.MoveDirection.Y);
                        //ServerSetMoveDirection(Player.MoveDirection);
                    }
                }

                if (InputManager.InputManager.KeyJustPressed(Keys.W))
                {
                    Player.SetMoveDirection(Player.MoveDirection.X, -1);
                    //ServerSetMoveDirection(Player.MoveDirection);
                }
                else if (InputManager.InputManager.KeyJustReleased(Keys.W))
                {
                    Player.SetMoveDirection(Player.MoveDirection.X, 0);
                    //ServerSetMoveDirection(Player.MoveDirection);
                }

                if (InputManager.InputManager.KeyJustPressed(Keys.Space))
                {
                    Player.Velocity = new Vector2(Player.Velocity.X, -600);
                    //ServerSetVelocity(Player.Velocity);
                }

                Player.UpdatePhysics(PlatformWorld.Platforms.ToArray());
                ServerSetVelocity(Player.Velocity);
                ServerSetPosition(Player.Position);
            }

            // Update other "local" players.
            foreach (Player p in _serverPlayers)
            {
                if(p.DrawColor != Player.DrawColor && p.MoveDirection != Player.MoveDirection)
                    p.UpdatePhysics(PlatformWorld.Platforms.ToArray());
            }
        }
Example #3
0
 public void Update()
 {
     _oldPlayer = Player;
     Player.UpdatePhysics(PlatformWorld.Platforms.ToArray());
 }