Esempio n. 1
0
        public AGameClient()
            : base(1280, 720, new GraphicsMode(32, 24, 0, 4), "Polymono")
        {
            Polymono.DebugGL($"OpenGL Renderer: {GL.GetString(StringName.Renderer)}");
            Polymono.DebugGL($"OpenGL Extensions: {GL.GetString(StringName.Extensions)}");
            Polymono.DebugGL($"OpenGL Shader Language: {GL.GetString(StringName.ShadingLanguageVersion)}");
            Polymono.DebugGL($"OpenGL Vendor: {GL.GetString(StringName.Vendor)}");
            Polymono.Debug($"OpenGL version: {GL.GetString(StringName.Version)}");
            Polymono.Debug($"Windows OS: {Environment.OSVersion}");
            Polymono.Debug($"CLR version: {Environment.Version}");
            string version = GL.GetString(StringName.Version);

            MajorVersion = version[0];
            MinorVersion = version[2];
            if (MajorVersion < 3)
            {
                Polymono.ErrorF("Fatal error: OpenGL version 3 required.");
                Console.ReadLine();
                Exit();
            }
            Programs         = new Dictionary <ProgramID, ShaderProgram>();
            Controls         = new Dictionary <int, Control>();
            Models           = new Dictionary <int, AModel>();
            isTrackingCursor = false;
            CursorVisible    = true;
        }
Esempio n. 2
0
        protected override void OnLoad(EventArgs e)
        {
            // Enable OpenGL settings.
            GL.Enable(EnableCap.DepthTest);
            GL.Enable(EnableCap.DebugOutput);
            GL.Enable(EnableCap.DebugOutputSynchronous);
            GL.DebugMessageCallback((DebugSource source, DebugType type, int id,
                                     DebugSeverity severity, int length, IntPtr message, IntPtr userParam) =>
            {
                switch (type)
                {
                case DebugType.DebugTypeError:
                    Polymono.Error($"OpenGL error ID: {id + Environment.NewLine}Message: {Marshal.PtrToStringAnsi(message, length)}");
                    Polymono.ErrorF(Environment.StackTrace);
                    FatalError = true;
                    break;

                case DebugType.DebugTypeDeprecatedBehavior:
                case DebugType.DebugTypeUndefinedBehavior:
                case DebugType.DebugTypePortability:
                case DebugType.DebugTypePerformance:
                case DebugType.DebugTypeOther:
                case DebugType.DebugTypeMarker:
                case DebugType.DebugTypePushGroup:
                case DebugType.DebugTypePopGroup:
                default:
                    Polymono.DebugGL($"OpenGL debug message.{Environment.NewLine}ID: {id + Environment.NewLine}Message: {Marshal.PtrToStringAnsi(message, length)}");
                    break;
                }
            }, (IntPtr)0);
            // Add shader programs.
            Programs.Add(ProgramID.Full,
                         new ShaderProgram("vs_full.glsl", "fs_full.glsl", "Full"));
            Programs.Add(ProgramID.Dice,
                         new ShaderProgram("vs_dice.glsl", "fs_dice.glsl", "Dice"));
            Programs.Add(ProgramID.Player,
                         new ShaderProgram("vs_player.glsl", "fs_player.glsl", "Player"));
            Programs.Add(ProgramID.Skybox,
                         new ShaderProgram("vs_skybox.glsl", "fs_skybox.glsl", "Skybox"));
            Programs.Add(ProgramID.Button,
                         new ShaderProgram("vs_button.glsl", "fs_button.glsl", "Button"));
            Programs.Add(ProgramID.Label,
                         new ShaderProgram("vs_label.glsl", "fs_label.glsl", "Label"));
            LoadObjects();
        }
Esempio n. 3
0
        private void UpdateGameFromNetwork()
        {
            if (Network == null)
            {
                return;
            }
            Queue <Packet> packetsQueue = Network.GetPacketQueue();
            List <Packet>  packets      = new List <Packet>();

            for (int i = 0; i < packetsQueue.Count; i++)
            {
                packets.Add(packetsQueue.Dequeue());
            }
            foreach (var packet in packets)
            {
                int senderID;
                switch (packet.Type)
                {
                case PacketType.Null:
                    Polymono.Print(ConsoleLevel.Warning, "Protocol type is null.");
                    break;

                case PacketType.StartGame:
                    senderID = Protocol.Game.DecodeStartGameSenderID(packet.Data);
                    Polymono.Debug($"Packet decoding: {packet.Type} [Sender ID: {senderID}]");
                    if (State == GameState.Lobby)
                    {
                        // Correct state.
                        State = GameState.LobbyRoll;
                        break;
                    }
                    break;

                case PacketType.EndTurn:
                    senderID = Protocol.Game.DecodeEndTurnSenderID(packet.Data);
                    Polymono.Debug($"Packet decoding: {packet.Type} [Sender ID: {senderID}]");
                    // Signal an end turn of current player's turn.
                    // Find out which player's turn is next.
                    Board.EndCurrentTurn(senderID);
                    bool isCurrentTurn = Board.CurrentPlayerTurn == Board.CurrentPlayerID;
                    switch (State)
                    {
                    case GameState.LobbyRoll:
                        // If in pre-game rolling stage, and is current turn, turn on roll button.
                        if (isCurrentTurn)
                        {
                            BtnRollDice.ShowAll();
                        }
                        break;

                    case GameState.PlayerOptions:
                        // If in in-game options stage, and is current turn, turn on player options.
                        if (isCurrentTurn)
                        {
                            if (Board.GetPlayer().IsInJail)
                            {
                                MnuPlayerJailOptions.ShowAll();
                            }
                            else
                            {
                                MnuPlayerOptions.ShowAll();
                                BtnEndTurn.HideAll();
                            }
                        }
                        break;

                    default:
                        break;
                    }
                    break;

                case PacketType.Message:
                    string message = Protocol.Chat.DecodeMessage(packet.Data);
                    LblMsgBox.Text += Environment.NewLine + message;
                    Polymono.Debug($"Packet decoding: {packet.Type} [Message: {message}]");
                    break;

                case PacketType.MoveState:
                    break;

                case PacketType.DiceRoll:
                    int diceOne = Protocol.Game.DecodeDiceRollOne(packet.Data);
                    int diceTwo = Protocol.Game.DecodeDiceRollTwo(packet.Data);
                    senderID = Protocol.Game.DecodeDiceRollSenderID(packet.Data);
                    Polymono.Debug($"Packet decoding: {packet.Type} [Dice One: {diceOne}] [Dice Two: {diceTwo}] [Sender ID: {senderID}]");
                    // Move requested player to position.
                    if (State == GameState.PlayerOptions)
                    {
                        // Do moving code
                        if (Board.CurrentPlayerTurn == senderID)
                        {
                            Board.MoveSpaces(diceOne + diceTwo, senderID);
                            State = GameState.Moving;
                        }     // Else :: Invalid state for packet.
                        else
                        {
                            Polymono.Warning($"Dice roll packet received with wrong sender. [Sender ID: {senderID}] [Current ID: {Board.CurrentPlayerTurn}]");
                        }
                    }
                    else if (State == GameState.LobbyRoll)
                    {
                        // Assign to highest roll.
                        Board.GetPlayer(senderID).HighestRoll = diceOne + diceTwo;
                    }
                    break;

                case PacketType.Move:
                    senderID = Protocol.Game.DecodeMoveDone(packet.Data);
                    Polymono.Debug($"Packet decoding: {packet.Type} [sender ID:{senderID}]");
                    Board.FinalisePlayerMovement(senderID);
                    State = GameState.PlayerOptions;
                    break;

                case PacketType.ClientSync:
                    int    id   = Protocol.Connection.DecodeClientID(packet.Data);
                    string name = Protocol.Connection.DecodeClientName(packet.Data);
                    Polymono.Debug($"Packet decoding: {packet.Type} [ID: {id}] [Name: {name}]");
                    // Create player data.
                    Board.AddPlayer(id, name);
                    break;

                default:
                    Polymono.Debug($"Unmanaged protocol type: {packet.Type}");
                    break;
                }
            }
        }
Esempio n. 4
0
 protected void LoadControls()
 {
     #region Main menu
     MnuMain   = new Menu();
     BtnCreate = new Button(Programs[ProgramID.Button],
                            new Vector3(Width / 2 - 64, Height - 128, 0.0f), Vector3.Zero, Vector3.One,
                            Controls, Models, MnuMain,
                            128, 32, 2, Width, Height, Matrix4.Identity,
                            new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                            new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                            () =>
     {
         MnuMain.HideAll();
         MnuNetwork.ShowAll();
         LblNetAddress.HideAll();
         TxtNetAddress.HideAll();
         BtnNetJoin.HideAll();
         return(Task.Delay(0));
     }, "Create game");
     BtnJoin = new Button(Programs[ProgramID.Button],
                          new Vector3(Width / 2 - 64, Height - 192, 0.0f), Vector3.Zero, Vector3.One,
                          Controls, Models, MnuMain,
                          128, 32, 2, Width, Height, Matrix4.Identity,
                          new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                          new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                          () =>
     {
         MnuMain.HideAll();
         MnuNetwork.ShowAll();
         BtnNetCreate.HideAll();
         return(Task.Delay(0));
     }, "Join game");
     BtnExit = new Button(Programs[ProgramID.Button],
                          new Vector3(Width / 2 - 64, Height - 256, 0.0f), Vector3.Zero, Vector3.One,
                          Controls, Models, MnuMain,
                          128, 32, 2, Width, Height, Matrix4.Identity,
                          new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                          new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                          () =>
     {
         Exit();
         return(Task.Delay(0));
     }, "Exit");
     MnuMain.CreateBuffers();
     #endregion
     #region Test menu
     MnuTest = new Menu();
     LblTest = new Label(Programs[ProgramID.Label],
                         Vector3.Zero, Vector3.Zero, Vector3.One,
                         Controls, Models, MnuTest,
                         92, 18, 2, Width, Height, Matrix4.Identity, new Color4(0.1f, 0.1f, 0.1f, 0.6f), "X:0 Y:0");
     BtnTest = new Button(Programs[ProgramID.Button],
                          new Vector3(8.0f, 40.0f, 0.0f), Vector3.Zero, Vector3.One,
                          Controls, Models, MnuTest,
                          128, 32, 2, Width, Height, Matrix4.Identity,
                          new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                          new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                          () =>
     {
         Polymono.Print("Hello");
         return(Task.Delay(0));
     }, "Test button");
     TxtTest = new Textbox(Programs[ProgramID.Label],
                           new Vector3(8.0f, 80.0f, 0.0f), Vector3.Zero, Vector3.One,
                           Controls, Models, MnuTest,
                           128, 32, 2, Width, Height, Matrix4.Identity,
                           new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                           new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                           "Test Textbox");
     MnuTest.CreateBuffers();
     #endregion
     #region Server creation menu
     MnuNetwork = new Menu();
     LblNetName = new Label(Programs[ProgramID.Label],
                            new Vector3((Width / 2) - 64, Height - (64 * 2) + 24, 0.0f), Vector3.Zero, Vector3.One,
                            Controls, Models, MnuNetwork,
                            92, 18, 2, Width, Height, Matrix4.Identity, new Color4(0.1f, 0.1f, 0.1f, 0.6f),
                            "Enter name:");
     TxtNetName = new Textbox(Programs[ProgramID.Label],
                              new Vector3((Width / 2) - 64, Height - (64 * 2), 0.0f), Vector3.Zero, Vector3.One,
                              Controls, Models, MnuNetwork,
                              128, 32, 2, Width, Height, Matrix4.Identity,
                              new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                              new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                              "");
     LblNetAddress = new Label(Programs[ProgramID.Label],
                               new Vector3((Width / 2) - 160, Height - (64 * 3) + 24, 0.0f), Vector3.Zero, Vector3.One,
                               Controls, Models, MnuNetwork,
                               108, 18, 2, Width, Height, Matrix4.Identity, new Color4(0.1f, 0.1f, 0.1f, 0.6f),
                               "Network address:");
     TxtNetAddress = new Textbox(Programs[ProgramID.Label],
                                 new Vector3((Width / 2) - 160, Height - (64 * 3), 0.0f), Vector3.Zero, Vector3.One,
                                 Controls, Models, MnuNetwork,
                                 128, 32, 2, Width, Height, Matrix4.Identity,
                                 new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                                 new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                                 "");
     ChkNetType = new Checkbox(Programs[ProgramID.Button],
                               new Vector3((Width / 2) - 160 + 128 + 8, Height - (64 * 3), 0.0f), Vector3.Zero, Vector3.One,
                               Controls, Models, MnuNetwork,
                               32, 32, 2, Width, Height, Matrix4.Identity,
                               new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                               new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f));
     LblNetPort = new Label(Programs[ProgramID.Label],
                            new Vector3((Width / 2) + 32, Height - (64 * 3) + 24, 0.0f), Vector3.Zero, Vector3.One,
                            Controls, Models, MnuNetwork,
                            92, 18, 2, Width, Height, Matrix4.Identity, new Color4(0.1f, 0.1f, 0.1f, 0.6f),
                            "Network port:");
     TxtNetPort = new Textbox(Programs[ProgramID.Label],
                              new Vector3((Width / 2) + 32, Height - (64 * 3), 0.0f), Vector3.Zero, Vector3.One,
                              Controls, Models, MnuNetwork,
                              128, 32, 2, Width, Height, Matrix4.Identity,
                              new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                              new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                              "");
     BtnNetCreate = new Button(Programs[ProgramID.Button],
                               new Vector3((Width / 2) - 64, Height - (64 * 4), 0.0f), Vector3.Zero, Vector3.One,
                               Controls, Models, MnuNetwork,
                               128, 32, 2, Width, Height, Matrix4.Identity,
                               new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f), // Default model
                               new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f), // Clicked model
                               () =>
     {
         try
         {
             bool v6;
             if (ChkNetType.State == ControlState.Clicked)
             {
                 v6 = true;
             }
             else
             {
                 v6 = false;
             }
             Server server = new Server(this, TxtNetName.Text, v6);
             int port      = Convert.ToInt32(TxtNetPort.Text);
             server.LocalHandler().Bind(port);
             server.LocalHandler().Listen(10);
             server.Start();
             Network = server;
             State   = GameState.Lobby;
             MnuNetwork.HideAll();
             MnuMessage.ShowAll();
             MnuGame.ShowAll();
         }
         catch (SocketException se)
         {
             Polymono.Error(se.Message);
             Polymono.ErrorF(se.StackTrace);
         }
         catch (FormatException fe)
         {
             Polymono.Error("Port is not a readable number.");
             Polymono.Error(fe.Message);
             Polymono.ErrorF(fe.StackTrace);
         }
         return(Task.Delay(0));
     }, "Create Server");
     BtnNetJoin = new Button(Programs[ProgramID.Button],
                             new Vector3((Width / 2) - 64, Height - (64 * 4), 0.0f), Vector3.Zero, Vector3.One,
                             Controls, Models, MnuNetwork,
                             128, 32, 2, Width, Height, Matrix4.Identity,
                             new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f), // Default model
                             new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f), // Clicked model
                             () =>
     {
         try
         {
             bool v6;
             if (ChkNetType.State == ControlState.Clicked)
             {
                 v6 = true;
             }
             else
             {
                 v6 = false;
             }
             Client client  = new Client(this, v6);
             string address = TxtNetAddress.Text;
             int port       = Convert.ToInt32(TxtNetPort.Text);
             string name    = TxtNetName.Text;
             client.ConnectAsync(address, port, name);
             Network = client;
             State   = GameState.Lobby;
             MnuNetwork.HideAll();
             MnuMessage.ShowAll();
         }
         catch (SocketException se)
         {
             Polymono.Error(se.Message);
             Polymono.ErrorF(se.StackTrace);
         }
         catch (FormatException fe)
         {
             Polymono.Error("Port is not a readable number.");
             Polymono.Error(fe.Message);
             Polymono.ErrorF(fe.StackTrace);
         }
         return(Task.Delay(0));
     }, "Join server");
     BtnNetBack = new Button(Programs[ProgramID.Button],
                             new Vector3((Width / 2) - 64, Height - (64 * 6), 0.0f), Vector3.Zero, Vector3.One,
                             Controls, Models, MnuNetwork,
                             128, 32, 2, Width, Height, Matrix4.Identity,
                             new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                             new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                             () =>
     {
         MnuNetwork.HideAll();
         MnuMain.ShowAll();
         return(Task.Delay(0));
     }, "Back");
     MnuNetwork.CreateBuffers();
     #endregion
     #region Message menu
     MnuMessage = new Menu();
     LblMsgBox  = new Label(Programs[ProgramID.Label],
                            new Vector3(32, Height / 2, 0.0f), Vector3.Zero, Vector3.One,
                            Controls, Models, MnuMessage,
                            256, 256, 2, Width, Height, Matrix4.Identity, new Color4(0.1f, 0.1f, 0.1f, 0.6f), "Chat room text" + Environment.NewLine + "Chat room text2");
     TxtMsgInput = new Textbox(Programs[ProgramID.Label],
                               new Vector3(32, Height / 2 - 256, 0.0f), Vector3.Zero, Vector3.One,
                               Controls, Models, MnuMessage,
                               192, 32, 2, Width, Height, Matrix4.Identity,
                               new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                               new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                               "");
     BtnMsgSend = new Button(Programs[ProgramID.Button],
                             new Vector3(32 + 192, Height / 2 - 256, 0.0f), Vector3.Zero, Vector3.One,
                             Controls, Models, MnuMessage,
                             64, 32, 2, Width, Height, Matrix4.Identity,
                             new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                             new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                             () =>
     {
         string text      = TxtMsgInput.Text.Trim();
         TxtMsgInput.Text = "";
         LblMsgBox.Text  += Environment.NewLine + text;
         Network.SendAsync(PacketHandler.Create(PacketType.Message,
                                                Protocol.Chat.EncodeMessage(text)));
         return(Task.Delay(0));
     }, "Send");
     MnuMessage.CreateBuffers();
     #endregion
     #region Game menu
     MnuGame      = new Menu();
     BtnGameStart = new Button(Programs[ProgramID.Button],
                               new Vector3((Width / 2) - 64, Height - (64 * 4), 0.0f), Vector3.Zero, Vector3.One,
                               Controls, Models, MnuGame,
                               128, 32, 2, Width, Height, Matrix4.Identity,
                               new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                               new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                               () =>
     {
         if (IsServer && Board.GetPlayers().Count > 1)
         {
             // Start game.
             ((Server)Network).AcceptClients = false;
             Network.SendAsync(PacketHandler.Create(PacketType.StartGame,
                                                    Protocol.Game.EncodeStartGame(Board.CurrentPlayerID)));
             State = GameState.LobbyRoll;
             MnuGame.HideAll();
             BtnRollDice.ShowAll();
             Polymono.Debug("Starting game.");
         }
         else
         {
             // Not enough players, not server.
             Polymono.Debug($"Cannot start game: [Is server:{IsServer}] [Players: {Board.GetPlayers().Count}]");
             Polymono.Debug("Needs to be server and have more than 1 player in lobby.");
         }
         // Starts game
         return(Task.Delay(0));
     }, "Start Game");
     BtnGameExit = new Button(Programs[ProgramID.Button],
                              new Vector3((Width / 2) - 64, Height - (64 * 6), 0.0f), Vector3.Zero, Vector3.One,
                              Controls, Models, MnuGame,
                              128, 32, 2, Width, Height, Matrix4.Identity,
                              new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                              new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                              async() =>
     {
         await Network.SendAsync(PacketHandler.Create(PacketType.Disconnect,
                                                      Protocol.Connection.EncodeDisconnect(Board.CurrentPlayerID, "Exit lobby")));
         Network = null;
         Polymono.Debug("Exiting game.");
         // Exits game
     }, "Exit Game");
     MnuPlayerOptions = new Menu();
     BtnRollDice      = new Button(Programs[ProgramID.Button],
                                   new Vector3((Width / 2) - 64, (64 * 2), 0.0f), Vector3.Zero, Vector3.One,
                                   Controls, Models, MnuPlayerOptions,
                                   128, 32, 2, Width, Height, Matrix4.Identity,
                                   new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                                   new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                                   () =>
     {
         int rollOne = DiceOne.GetNumber();
         int rollTwo = DiceTwo.GetNumber();
         Network.SendAsync(PacketHandler.Create(PacketType.DiceRoll,
                                                Protocol.Game.EncodeDiceRoll(rollOne, rollTwo,
                                                                             Board.CurrentPlayerID)));
         if (State == GameState.LobbyRoll)
         {
             BtnRollDice.HideAll();
             Board.EndCurrentTurn(Board.CurrentPlayerID);
             Network.SendAsync(PacketHandler.Create(PacketType.EndTurn,
                                                    Protocol.Game.EncodeEndTurn(Board.CurrentPlayerID)));
         }
         else if (State == GameState.PlayerOptions)
         {
             MnuPlayerOptions.HideAll();
             Board.MoveSpaces(rollOne + rollTwo, Board.CurrentPlayerID);
             State = GameState.Moving;
         }
         return(Task.Delay(0));
     }, "Roll Dice");
     BtnPurchaseProperty = new Button(Programs[ProgramID.Button],
                                      new Vector3((Width / 2) - 256, (64 * 2), 0.0f), Vector3.Zero, Vector3.One,
                                      Controls, Models, MnuPlayerOptions,
                                      128, 32, 2, Width, Height, Matrix4.Identity,
                                      new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                                      new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                                      () =>
     {
         // Purchase current property.
         return(Task.Delay(0));
     }, "Purchase");
     BtnTrade = new Button(Programs[ProgramID.Button],
                           new Vector3((Width / 2) + 192, (64 * 2), 0.0f), Vector3.Zero, Vector3.One,
                           Controls, Models, MnuPlayerOptions,
                           128, 32, 2, Width, Height, Matrix4.Identity,
                           new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                           new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                           () =>
     {
         // Trade screen.
         return(Task.Delay(0));
     }, "Trade");
     BtnEndTurn = new Button(Programs[ProgramID.Button],
                             new Vector3((Width / 2) - 64, (64 * 2), 0.0f), Vector3.Zero, Vector3.One,
                             Controls, Models, MnuPlayerOptions,
                             128, 32, 2, Width, Height, Matrix4.Identity,
                             new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                             new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                             () =>
     {
         MnuPlayerOptions.HideAll();
         // Trade screen.
         Board.EndCurrentTurn(Board.CurrentPlayerID);
         Network.SendAsync(PacketHandler.Create(PacketType.EndTurn,
                                                Protocol.Game.EncodeEndTurn(Board.CurrentPlayerID)));
         return(Task.Delay(0));
     }, "End Turn");
     MnuGame.CreateBuffers();
     MnuPlayerOptions.CreateBuffers();
     #endregion
     #region Game menu
     MnuPlayerJailOptions = new Menu();
     BtnPayJail           = new Button(Programs[ProgramID.Button],
                                       new Vector3(), Vector3.Zero, Vector3.One,
                                       Controls, Models, MnuPlayerJailOptions,
                                       128, 32, 2, Width, Height, Matrix4.Identity,
                                       new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                                       new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                                       () =>
     {
         // Pay Jail
         return(Task.Delay(0));
     }, "Roll Dice");
     BtnUseCard = new Button(Programs[ProgramID.Button],
                             new Vector3(), Vector3.Zero, Vector3.One,
                             Controls, Models, MnuPlayerJailOptions,
                             128, 32, 2, Width, Height, Matrix4.Identity,
                             new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.7f, 0.7f, 0.0f, 0.8f),
                             new Color4(0.1f, 0.1f, 0.1f, 0.6f), new Color4(0.0f, 0.6f, 0.7f, 0.8f),
                             () =>
     {
         // Use card
         return(Task.Delay(0));
     }, "Purchase");
     MnuPlayerJailOptions.CreateBuffers();
     #endregion
 }