/// (Server) Draw other players. (Local) Draw servers player position
        public void drawClient(SpriteBatch spriteBatch)
        {
            List <ServerPlayer> temp = clnt.getPlayers();

            for (int i = 0; i < temp.Count; i++)
            {
                ServerPlayer cPlayer = temp[i];
                spriteBatch.Draw(texture, new Rectangle(cPlayer.getX(), cPlayer.getY(), PREFWIDTH, PREFHEIGHT), null,
                                 new Color(255, 255, 255, 0.5f), 0.0f, new Vector2(0, 0), cPlayer.getEffect(), 0.0f);
            }
        }
Exemple #2
0
        /// Processes users actions (e.g. moving left will increase X value, etc). Designed for Server Players
        public static Tuple <int, int> actionTree(ServerPlayer player, World world, string action)
        {
            int x = player.getX();
            int y = player.getY();

            switch (action)
            {
            case "1":
                // Move Left
                if ((x - speed) > 0)
                {
                    x = x - speed;
                    if (world.checkColliding(x, (y - 1), ServerPlayer.PREFHEIGHT, ServerPlayer.PREFWIDTH) == 2)
                    {
                        x = x + speed;
                    }
                }
                break;

            case "2":
                // Move Right
                if ((x + speed) < (world.getWorldLength() - ServerPlayer.PREFWIDTH))
                {
                    x = x + speed;
                    if (world.checkColliding(x, (y - 1), ServerPlayer.PREFHEIGHT, ServerPlayer.PREFWIDTH) == 3)
                    {
                        x = x - speed;
                    }
                }
                break;

            case "3":
                if (player.state == ServerPlayer.playerStates.IDLE)
                {
                    player.jumpPoint = y - jumpHeight;
                    player.state     = ServerPlayer.playerStates.JUMPING;
                }
                break;
            }
            return(new Tuple <int, int>(x, y));
        }
        /// Messages from clients will be structure as 2 bytes (e.g. 11, 12, 21, etc)
        /// First = players ID (Each player will be assigned an ID by the server)
        /// Second = player action/state
        public void checkMessages()
        {
            NetIncomingMessage message;

            while ((message = server.ReadMessage()) != null)
            {
                switch (message.MessageType)
                {
                case NetIncomingMessageType.Data:
                    // handle client messages
                    string msg = message.ReadString();
                    if (!msg.ToString().Equals("0"))
                    {
                        string[] mess   = msg.Split('/');
                        string   id     = mess[0];
                        string   action = mess[1];
                        DateTime time   = Convert.ToDateTime(mess[2]);

                        ServerPlayer p = getPlayer(id);
                        if (p == null)
                        {
                            Console.WriteLine("ERROR OCCURED: Unable to find player via ID (" + id + ")");
                        }
                        else
                        {
                            applyLogic(p, action);     // Update player accordingly
                            string send = id + "/" + p.getX() + "/" + p.getY();
                            sendMessages(send, null);  // Send updated pos to all players
                        }
                    }
                    break;

                case NetIncomingMessageType.StatusChanged:
                    // handle connection status messages
                    if (message.SenderConnection.Status == NetConnectionStatus.Connected)
                    {
                        Tuple <int, int> startPos = world.getPlayerPos();
                        ServerPlayer     player   = new ServerPlayer(startPos.Item1, startPos.Item2, message.SenderConnection);
                        player.setID(currID.ToString());
                        currID++;
                        players.Add(player);
                        sendMessages(player.getID(), message.SenderConnection);
                    }
                    else if (message.SenderConnection.Status == NetConnectionStatus.Disconnected)
                    {
                        for (int pos = 0; pos < players.Count; pos++)
                        {
                            if (message.SenderConnection == players[pos].getRecipiant())
                            {
                                players.RemoveAt(pos);
                            }
                        }
                    }
                    break;

                case NetIncomingMessageType.WarningMessage:
                    Console.WriteLine(message.ReadString());
                    break;

                default:
                    Console.WriteLine("Unhandled message with type: " + message.MessageType);
                    Console.WriteLine(message.ReadString());
                    break;
                }
            }
        }