private void AddList(Manager manager)
 {
     List = new ControlList <AchievementLogItem>(manager);
     List.Init();
     List.Top    = TopPanel.Height + 4;
     List.Left   = 4;
     List.Width  = ClientWidth - (List.Left * 2);
     List.Height = ClientHeight - List.Top - 4;
     Add(List);
 }
Exemple #2
0
 private void AddList(Manager manager)
 {
     List = new ControlList <ContentPackListControl>(manager);
     List.Init();
     List.Top    = TopPanel.Height + 4;
     List.Left   = 4;
     List.Width  = ClientWidth - (List.Left * 2);
     List.Height = ClientHeight - List.Top - 12 - 32;
     Add(List);
 }
Exemple #3
0
        public LobbyWindow(Manager manager)
            : base(manager)
        {
            //Setup the window
            CaptionVisible = false;
            TopPanel.Visible = false;
            Movable = false;
            Resizable = false;
            Width = 700;
            Height = 500;
            Shadow = true;
            Center();

            //Group panels
            grpLobby = new GroupPanel(Manager) { Width = ClientWidth / 2, Height = ClientHeight - BottomPanel.Height + 2, Text = "Rooms" };
            grpLobby.Init();
            Add(grpLobby);

            grpServer = new GroupPanel(Manager) { Left = (ClientWidth / 2) - 1, Width = (ClientWidth / 2) + 1, Height = ClientHeight - BottomPanel.Height + 2, Text = "Server" };
            grpServer.Init();
            Add(grpServer);

            //Top controls
            txtSearch = new TextBox(Manager) { Left = 8, Top = 8, Width = (ClientWidth / 4) - 16, };
            txtSearch.Init();
            txtSearch.Text = searchStr;
            txtSearch.TextChanged += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                RefreshRooms();
            });
            //Show "Search..." text, but make it dissapear on focus
            txtSearch.FocusGained += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                if (txtSearch.Text.Trim() == searchStr)
                    txtSearch.Text = string.Empty;
            });
            txtSearch.FocusLost += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                if (txtSearch.Text.Trim() == string.Empty)
                    txtSearch.Text = searchStr;
            });
            grpLobby.Add(txtSearch);

            cmbSort = new ComboBox(Manager) { Left = txtSearch.Right + 8, Top = 8, Width = (ClientWidth / 4) - 16 - 20, };
            cmbSort.Init();
            cmbSort.Items.AddRange(sortFilters);
            cmbSort.ItemIndex = 0;
            cmbSort.ItemIndexChanged += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                RefreshRooms();
            });
            grpLobby.Add(cmbSort);

            btnReload = new Button(Manager) { Left = cmbSort.Right + 8, Top = 8, Width = 20, Height = 20, Text = string.Empty, };
            btnReload.Init();
            btnReload.Glyph = new Glyph(ContentPack.Textures["gui\\icons\\refresh"]);
            btnReload.ToolTip.Text = "Refresh";
            btnReload.Click += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                Game.NetManager.Send(new RequestMessage(MessageTypes.Lobby));
            });
            grpLobby.Add(btnReload);

            //Main room list
            RoomListCtrl = new ControlList<LobbyDataControl>(Manager) { Left = 8, Top = txtSearch.Bottom + 8, Width = grpLobby.Width - 16, Height = grpLobby.Height - 16 - txtSearch.Bottom - 24 };
            RoomListCtrl.Init();
            grpLobby.Add(RoomListCtrl);

            //Server info labels
            lblName = new Label(Manager) { Text = "Loading...", Top = 8, Font = FontSize.Default20, Left = 8, Alignment = Alignment.MiddleCenter, Height = 30, Width = grpServer.ClientWidth - 16 };
            lblName.Init();
            grpServer.Add(lblName);

            lblDescription = new Label(Manager) { Text = string.Empty, Top = 8 + lblName.Bottom, Left = 8, Alignment = Alignment.MiddleCenter, Width = grpServer.ClientWidth - 16 };
            lblDescription.Init();
            grpServer.Add(lblDescription);

            lblInfo = new Label(Manager) { Text = string.Empty, Top = 8 + lblDescription.Bottom, Left = 8, Alignment = Alignment.TopLeft, Width = grpServer.ClientWidth - 16, Height = grpServer.Height };
            lblInfo.Init();
            grpServer.Add(lblInfo);
            //Bottom buttons
            btnCreate = new Button(Manager) { Top = 8, Text = "Create" };
            btnCreate.Left = (ClientWidth / 2) - (btnCreate.Width / 2);
            btnCreate.Init();
            btnCreate.Click += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                CreateWorldDialog window = new CreateWorldDialog(manager, this);
                window.Init();
                Manager.Add(window);
                window.Show();
            });
            BottomPanel.Add(btnCreate);

            btnJoin = new Button(Manager) { Right = btnCreate.Left - 8, Top = 8, Text = "Join" };
            btnJoin.Init();
            btnJoin.Click += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                JoinRoom(RoomListCtrl.ItemIndex);
            });
            BottomPanel.Add(btnJoin);

            btnDisconnect = new Button(Manager) { Left = btnCreate.Right + 8, Top = 8, Text = "Quit" };
            btnDisconnect.Init();
            btnDisconnect.Click += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                Game.NetManager.Disconnect("Left Lobby");
                Game.CurrentGameState = GameState.Login;
                Interface.MainWindow.ScreenManager.SwitchScreen(new LoginScreen());
            });
            BottomPanel.Add(btnDisconnect);

            //When finished, request server send lobby data
            Game.NetManager.Send(new RequestMessage(MessageTypes.Lobby));
        }
Exemple #4
0
        public ServerWindow(Manager manager)
            : base(manager)
        {
            //Setup server pinger/query
            Pinger = new ServerPinger();
            //Setup the window
            CaptionVisible = false;
            Caption.Text = "Welcome to Bricklayer!";
            Description.Text = "An open source, fully moddable and customizable 2D\nbuilding game built with the community in mind.";
            Movable = false;
            Resizable = false;
            Width = 450;
            Height = 350;
            Shadow = true;
            Center();

            //Player config
            NameLbl = new Label(Manager) { Left = 8, Top = TopPanel.Bottom + 10, Width = 64, Text = "Username:"******"Color:" };
            ColorLbl.Init();
            Add(ColorLbl);

            BodyClr = new ColorPicker(Manager) { Left = ColorLbl.Right + 4, Top = TopPanel.Bottom + 8, Width = 128, Saturation = GlobalSettings.ColorSaturation, Value = GlobalSettings.ColorValue };
            BodyClr.Init();
            BodyClr.ValueChanged += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                BodyImg.Color = BodyClr.SelectedColor;
                Game.MyColor = BodyClr.SelectedColor;
                Game.MyHue = BodyClr.Hue;
            });
            Add(BodyClr);

            BodyImg = new ImageBox(Manager) { Left = BodyClr.Right + 6, Top = TopPanel.Bottom + 8, Width = 18, Height = 18, Color = Game.MyColor, Image = ContentPack.Textures["entity\\body"] };
            BodyImg.Init();
            Add(BodyImg);

            SmileyImg = new ImageBox(Manager) { Left = BodyClr.Right + 6, Top = TopPanel.Bottom + 8, Width = 18, Height = 18, Image = ContentPack.Textures["entity\\smileys"], SourceRect = new Rectangle(0, 0, 18, 18) };
            SmileyImg.Init();
            SmileyImg.ToolTip.Text = "I love this color!";
            Add(SmileyImg);

            BodyClr.Hue = Game.MyHue;
            //Create main server list
            ServerListCtrl = new ControlList<ServerDataControl>(manager) { Left = 8, Top = TopPanel.Bottom + 34, Width = ClientWidth - 16, Height = ClientHeight - TopPanel.Height - BottomPanel.Height - 42 };
            ServerListCtrl.Init();
            Add(ServerListCtrl);
            RefreshServerList();

            //Add BottomPanel controls
            JoinBtn = new Button(manager) { Text = "Connect", Left = 24, Top = 8, Width = 100, };
            JoinBtn.Init();
            JoinBtn.Click += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                //Logical place to save name/color settings
                IO.SaveSettings(new Settings() { Username = Game.Username, Color = Game.MyHue, ContentPack = Game.ContentPackName, Resolution = new Point(Game.Resolution.Width, Game.Resolution.Height), UseVSync = Game.MainWindow.Manager.Graphics.SynchronizeWithVerticalRetrace });
                //Connect
                if (ServerListCtrl.Items.Count > 0)
                {
                    if ((ServerListCtrl.Items[ServerListCtrl.ItemIndex] as ServerDataControl).Ping != null && (ServerListCtrl.Items[ServerListCtrl.ItemIndex] as ServerDataControl).Ping.Error)
                        return;
                    //Create a world and connect
                    JoinBtn.Enabled = false;
                    JoinBtn.Text = "Connecting...";
                    Game.NetManager.Connect(Servers[ServerListCtrl.ItemIndex].IP, Servers[ServerListCtrl.ItemIndex].Port);
                }
            });
            BottomPanel.Add(JoinBtn);

            AddBtn = new Button(manager) { Text = "Add", Left = JoinBtn.Right + 8, Top = 8, Width = 64, };
            AddBtn.Init();
            AddBtn.Click += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                AddServerDialog window = new AddServerDialog(manager, this,ServerListCtrl.ItemIndex, false, string.Empty, string.Empty);
                window.Init();
                Manager.Add(window);
                window.Show();
            });
            BottomPanel.Add(AddBtn);

            EditBtn = new Button(manager) { Text = "Edit", Left = AddBtn.Right + 8, Top = 8, Width = 64, };
            EditBtn.Init();
            EditBtn.Click += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                if (ServerListCtrl.Items.Count > 0)
                {
                    AddServerDialog window = new AddServerDialog(manager, this, ServerListCtrl.ItemIndex, true, Servers[ServerListCtrl.ItemIndex].Name, Servers[ServerListCtrl.ItemIndex].GetHostString());
                    window.Init();
                    Manager.Add(window);
                    window.Show();
                }
            });
            BottomPanel.Add(EditBtn);

            RemoveBtn = new Button(manager) { Text = "Remove", Left = EditBtn.Right + 8, Top = 8, Width = 64 };
            RemoveBtn.Init();
            RemoveBtn.Click += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                if (ServerListCtrl.Items.Count > 0)
                {
                    MessageBox confirm = new MessageBox(manager, MessageBoxType.YesNo, "Are you sure you would like to remove\nthis server from your server list?", "[color:Red]Confirm Removal[/color]");
                    confirm.Init();
                    confirm.Closed += new WindowClosedEventHandler(delegate(object sender, WindowClosedEventArgs args)
                    {
                        if ((sender as Dialog).ModalResult == ModalResult.Yes) //If user clicked yes
                        {
                            Servers.RemoveAt(ServerListCtrl.ItemIndex);
                            ServerListCtrl.Items.RemoveAt(ServerListCtrl.ItemIndex);
                            IO.WriteServers(Servers);
                            RefreshServerList();
                        }
                    });
                    Manager.Add(confirm);
                    confirm.Show();
                }
            });
            BottomPanel.Add(RemoveBtn);

            RefreshBtn = new Button(manager) { Text = "Refresh", Left = RemoveBtn.Right + 8, Top = 8, Width = 64 };
            RefreshBtn.Init();
            RefreshBtn.Click += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                RefreshServerList();
            });
            BottomPanel.Add(RefreshBtn);
            MainWindow.ScreenManager.FadeIn();
            validateUsername();
        }
Exemple #5
0
        public ServerWindow(Manager manager, ServerScreen screen) : base(manager)
        {
            this.screen = screen;
            // Setup the window
            CaptionVisible   = false;
            TopPanel.Visible = false;
            Movable          = false;
            Resizable        = false;
            Width            = 550;
            Height           = 500;
            Shadow           = true;
            Center();

            // Create main server list
            lstServers = new ControlList <ServerDataControl>(manager)
            {
                Left   = 8,
                Top    = 8,
                Width  = ClientWidth - 16,
                Height = ClientHeight - BottomPanel.Height - 16,
            };
            lstServers.Init();
            Add(lstServers);
            RefreshServerList();
            lstServers.DoubleClick += (sender, args) =>
            {
                if (lstServers.ItemIndex < 0)
                {
                    return;
                }

                var sdc = (ServerDataControl)lstServers.Items[lstServers.ItemIndex];
                // Make sure the user clicks the item and not the empty space in the list
                if (sdc.CheckPositionMouse(((MouseEventArgs)args).Position - lstServers.AbsoluteRect.Location))
                {
                    this.screen.Client.Network.SendSessionRequest(servers[lstServers.ItemIndex].Host,
                                                                  servers[lstServers.ItemIndex].Port);
                }
            };

            // Add controls to the bottom panel. (Add server, edit server, etc.)

            btnEdit = new Button(manager)
            {
                Text = "Edit", Top = 8, Width = 64
            };
            btnEdit.Init();
            btnEdit.Left   = (Width / 2) - (btnEdit.Width / 2);
            btnEdit.Click += (sender, args) =>
            {
                if (lstServers.Items.Count <= 0)
                {
                    return;
                }

                var window = new AddServerDialog(Manager, this, lstServers.ItemIndex, true,
                                                 servers[lstServers.ItemIndex].Name, servers[lstServers.ItemIndex].Host, servers[lstServers.ItemIndex].Port);
                window.Init();
                Manager.Add(window);
                window.ShowModal();
            };
            BottomPanel.Add(btnEdit);

            btnRemove = new Button(manager)
            {
                Text = "Remove", Left = btnEdit.Right + 8, Top = 8, Width = 64
            };
            btnRemove.Init();
            btnRemove.Click += (clickSender, clickArgs) =>
            {
                // Show a messagebox that asks for confirmation to delete the selected server.
                if (lstServers.Items.Count > 0)
                {
                    var confirm = new MessageBox(manager, MessageBoxType.YesNo,
                                                 "Are you sure you would like to remove\nthis server from your server list?",
                                                 "Confirm Removal");
                    confirm.Init();
                    // When the message box is closed, check if the user clicked yes, if so, removed the server from the list.
                    confirm.Closed += (closedSender, closedArgs) =>
                    {
                        var dialog = closedSender as Dialog;
                        if (dialog?.ModalResult != ModalResult.Yes)
                        {
                            return;
                        }
                        // If user clicked Yes
                        servers.RemoveAt(lstServers.ItemIndex);
                        lstServers.Items.RemoveAt(lstServers.ItemIndex);
                        screen.Client.IO.WriteServers(servers); // Write the new server list to disk.
                    };
                    Manager.Add(confirm);
                    confirm.Show();
                }
            };
            BottomPanel.Add(btnRemove);

            btnAdd = new Button(manager)
            {
                Text = "Add", Top = 8, Width = 64
            };
            btnAdd.Init();
            btnAdd.Right  = btnEdit.Left - 8;
            btnAdd.Click += (sender, args) =>
            {
                // Show add server dialog
                var window = new AddServerDialog(Manager, this, lstServers.ItemIndex, false, string.Empty,
                                                 string.Empty, Globals.Values.DefaultServerPort);
                window.Init();
                Manager.Add(window);
                window.ShowModal();
            };
            BottomPanel.Add(btnAdd);

            btnJoin = new Button(manager)
            {
                Text = "Connect", Top = 8, Width = 100
            };
            btnJoin.Init();
            btnJoin.Right  = btnAdd.Left - 8;
            btnJoin.Click += (sender, args) =>
            {
                if (lstServers.ItemIndex < 0)
                {
                    return;
                }

                btnJoin.Enabled = false;
                btnJoin.Text    = "Connecting...";
                this.screen.Client.Network.SendSessionRequest(servers[lstServers.ItemIndex].Host,
                                                              servers[lstServers.ItemIndex].Port);
            };
            BottomPanel.Add(btnJoin);

            btnRefresh = new Button(manager)
            {
                Text = "Refresh", Left = btnRemove.Right + 8, Top = 8, Width = 64
            };
            btnRefresh.Init();
            btnRefresh.Click += (sender, args) => { RefreshServerList(); };
            BottomPanel.Add(btnRefresh);

            // Listen for when init message is recieved
            screen.Client.Events.Network.Game.InitReceived.AddHandler(OnInit);

            // If user was disconnected from the server
            screen.Client.Events.Network.Game.Disconnected.AddHandler(OnDisconnect);
        }
Exemple #6
0
        /// <summary>
        /// Setup the game UI.
        /// </summary>
        public override void Add(ScreenManager screenManager)
        {
            base.Add(screenManager);

            // Status bar.
            sbStats = new StatusBar(Manager);
            sbStats.Init();
            sbStats.Bottom = Manager.ScreenHeight;
            sbStats.Left   = 0;
            sbStats.Width  = Manager.ScreenWidth;

            lblStats = new Label(Manager)
            {
                Top = 4, Left = 8, Width = Manager.ScreenWidth - 16
            };
            lblStats.Init();

            sbStats.Add(lblStats);
            Window.Add(sbStats);

            // Inventory.
            pnlInventory      = new InventoryControl(this, Manager);
            pnlInventory.Left = Manager.TargetWidth / 2 - (pnlInventory.Width / 2);
            pnlInventory.Init();
            Window.Add(pnlInventory);

            // Chat.
            txtChat = new TextBox(Manager);
            txtChat.Init();
            txtChat.Left = 8;
            txtChat.DrawFormattedText = false;
            txtChat.Bottom            = sbStats.Top - 8;
            txtChat.Width             = (int)(Manager.TargetWidth * .4f) - 16; // Remove 16 to align due to invisible scrollbar
            txtChat.Visible           = false;
            txtChat.Passive           = true;
            Window.Add(txtChat);

            lstChats = new ControlList <ChatDataControl>(Manager)
            {
                Left   = txtChat.Left,
                Width  = txtChat.Width + 16,
                Height = (int)(Manager.TargetHeight * .25f)
            };
            lstChats.Init();
            lstChats.Color          = Color.Transparent;
            lstChats.HideSelection  = true;
            lstChats.Passive        = true;
            lstChats.HideScrollbars = true;
            lstChats.Top            = txtChat.Top - lstChats.Height;
            Window.Add(lstChats);

            // Tablist.
            lstPlayers = new ControlList <PlayerListDataControl>(Manager)
            {
                Width = 256,
                Top   = 256
            };
            lstPlayers.Init();
            lstPlayers.HideSelection  = true;
            lstPlayers.Left           = Manager.TargetWidth / 2 - (lstPlayers.Width / 2);
            lstPlayers.Passive        = true;
            lstPlayers.HideScrollbars = true;
            lstPlayers.Visible        = false;
            Window.Add(lstPlayers);

            foreach (var player in Level.Players)
            {
                lstPlayers.Items.Add(new PlayerListDataControl(player, Manager, lstPlayers));
            }


            // Listen for later player joins.
            Client.Events.Network.Game.PlayerJoinReceived.AddHandler(
                args => { lstPlayers.Items.Add(new PlayerListDataControl(args.Player, Manager, lstPlayers)); });

            // Listen for ping updates for players.
            Client.Events.Network.Game.PingUpdateReceived.AddHandler(args =>
            {
                foreach (var ping in args.Pings)
                {
                    var control =
                        (PlayerListDataControl)
                        lstPlayers.Items.FirstOrDefault(i => ((PlayerListDataControl)i).User.UUID == ping.Key);
                    control?.ChangePing(ping.Value);
                }
            });


            // Hackish way to get chats to start at the bottom.
            for (var i = 0; i < (Manager.TargetHeight * 0.25f) / 18; i++)
            {
                lstChats.Items.Add(new ChatDataControl("", Manager, lstChats, this));
            }

            Client.Events.Network.Game.ChatReceived.AddHandler(args => { AddChat(args.Message, Manager, lstChats); });

            // Level event handlers.
            Client.Events.Game.Level.BlockPlaced.AddHandler(args =>
            {
                // Directly access the tile array, as we don't want to send two BlockPlaced events, as the tile indexer will
                // automatically call the event and send a network message.
                if (args.Level != null)
                {
                    args.Level.Tiles.Tiles[args.X, args.Y, args.Z] = new Tile(args.Type);
                }
            });
        }
Exemple #7
0
        public LobbyWindow(Manager manager, LobbyScreen screen)
            : base(manager)
        {
            lobbyScreen = screen;
            // Setup the window
            CaptionVisible   = false;
            TopPanel.Visible = false;
            Movable          = false;
            Resizable        = false;
            Width            = (int)(Manager.ScreenWidth * .9);
            Height           = (int)(Manager.ScreenHeight * .9);
            Shadow           = true;
            Center();

            // Group panels
            grpServer = new GroupPanel(Manager)
            {
                Left   = ClientWidth - Globals.Values.MaxBannerWidth - 1,
                Width  = Globals.Values.MaxBannerWidth,
                Height = ClientHeight - BottomPanel.Height + 2,
                Text   = "Server"
            };
            grpServer.Init();
            Add(grpServer);

            var grpLobby = new GroupPanel(Manager)
            {
                Width  = ClientWidth - grpServer.Width, // Fill remaining space
                Height = ClientHeight - BottomPanel.Height + 2,
                Text   = "Levels"
            };

            grpLobby.Init();
            Add(grpLobby);

            // Top controls
            txtSearch = new TextBox(Manager)
            {
                Left = 8, Top = 8, Width = (int)((grpLobby.Width / 2d) - 16)
            };
            txtSearch.Init();
            txtSearch.Text         = searchStr;
            txtSearch.TextChanged += (sender, args) => { RefreshLevels(); };
            // Show "Search..." text, but make it dissapear on focus
            txtSearch.FocusGained += (sender, args) =>
            {
                if (txtSearch.Text.Trim() == searchStr)
                {
                    txtSearch.Text = string.Empty;
                }
            };
            txtSearch.FocusLost += (sender, args) =>
            {
                if (txtSearch.Text.Trim() == string.Empty)
                {
                    txtSearch.Text = searchStr;
                }
            };
            grpLobby.Add(txtSearch);

            cmbSort = new ComboBox(Manager)
            {
                Left = txtSearch.Right + 8, Top = 8, Width = (grpLobby.Width / 2) - 16 - 20
            };
            cmbSort.Init();
            cmbSort.Items.AddRange(sortFilters);
            cmbSort.ItemIndex         = 0;
            cmbSort.ItemIndexChanged += (sender, args) => { RefreshLevels(); };
            grpLobby.Add(cmbSort);

            var btnReload = new Button(Manager)
            {
                Left   = cmbSort.Right + 8,
                Top    = 8,
                Width  = 20,
                Height = 20,
                Text   = string.Empty
            };

            btnReload.Init();
            btnReload.Glyph        = new Glyph(screen.Client.Content["gui.icons.refresh"]);
            btnReload.ToolTip.Text = "Refresh";
            btnReload.Click       += (sender, args) => {
                btnReload.Enabled = false;
                lobbyScreen.Client.Network.Send(new RequestMessage(MessageTypes.Init));
            };
            grpLobby.Add(btnReload);

            // Main level list
            lstLevels = new ControlList <LobbyDataControl>(Manager)
            {
                Left   = 8,
                Top    = txtSearch.Bottom + 8,
                Width  = grpLobby.Width - 16,
                Height = grpLobby.Height - 16 - txtSearch.Bottom - 24
            };
            lstLevels.Init();
            lstLevels.DoubleClick += (sender, args) =>
            {
                if (lstLevels.ItemIndex < 0)
                {
                    return;
                }

                var ldc = (LobbyDataControl)lstLevels.Items[lstLevels.ItemIndex];
                // Make sure the user clicks the item and not the empty space in the list
                if (ldc.CheckPositionMouse(((MouseEventArgs)args).Position - lstLevels.AbsoluteRect.Location))
                {
                    JoinLevel(lstLevels.ItemIndex);
                }
            };

            grpLobby.Add(lstLevels);

            // Server info labels
            lblName = new Label(Manager)
            {
                Text      = "Loading...",
                Top       = 8,
                Font      = FontSize.Default20,
                Left      = 8,
                Alignment = Alignment.MiddleCenter,
                Height    = 30,
                Width     = grpServer.ClientWidth - 16
            };
            lblName.Init();
            grpServer.Add(lblName);

            lblDescription = new Label(Manager)
            {
                Text      = string.Empty,
                Top       = 8 + lblName.Bottom,
                Left      = 8,
                Alignment = Alignment.MiddleCenter,
                Width     = grpServer.ClientWidth - 16
            };
            lblDescription.Init();
            grpServer.Add(lblDescription);

            lblInfo = new Label(Manager)
            {
                Text      = string.Empty,
                Top       = 8 + lblDescription.Bottom,
                Left      = 8,
                Alignment = Alignment.TopLeft,
                Width     = grpServer.ClientWidth - 16,
                Height    = grpServer.Height
            };
            lblInfo.Init();
            grpServer.Add(lblInfo);
            // Bottom buttons
            var btnCreate = new Button(Manager)
            {
                Top = 8, Text = "Create"
            };

            btnCreate.Left = (ClientWidth / 2) - (btnCreate.Width / 2);
            btnCreate.Init();
            btnCreate.Click += (sender, args) =>
            {
                var window = new CreateLevelDialog(manager, screen);
                window.Init();
                Manager.Add(window);
                window.ShowModal();
            };
            BottomPanel.Add(btnCreate);

            var btnJoin = new Button(Manager)
            {
                Right = btnCreate.Left - 8, Top = 8, Text = "Join"
            };

            btnJoin.Init();
            btnJoin.Click += (sender, args) => { JoinLevel(lstLevels.ItemIndex); };
            BottomPanel.Add(btnJoin);

            var btnDisconnect = new Button(Manager)
            {
                Left = btnCreate.Right + 8, Top = 8, Text = "Quit"
            };

            btnDisconnect.Init();
            btnDisconnect.Click += (sender, args) =>
            {
                lobbyScreen.Client.Network.NetClient.Disconnect("Left Lobby");
                MainWindow.ScreenManager.SwitchScreen(new LoginScreen());
            };
            BottomPanel.Add(btnDisconnect);

            // When client gets banner data from server
            screen.Client.Events.Network.Game.LobbyBannerReceived.AddHandler(LobbyBannerReceived);

            // When client receives level data after joining/creating a level
            screen.Client.Events.Network.Game.LevelDataReceived.AddHandler(LevelDataReceived);

            // When the lobby data is received (after connecting or on reload)
            screen.Client.Events.Network.Game.InitReceived.AddHandler(InitReceived);

            LoadLevels();

            screen.Client.Network.Send(new RequestMessage(MessageTypes.Banner));
        }
Exemple #8
0
        public TaskSandbox(Manager manager, MainWindow window) : base(manager)
        {
            MainWindow          = window;
            Resizable           = false;
            Movable             = false;
            CaptionVisible      = false;
            TopPanel.Visible    = false;
            BottomPanel.Visible = false;
            if (MainWindow.prgLoading != null)
            {
                MainWindow.prgLoading.Visible = MainWindow.lblLoading.Visible = MainWindow.lblLoadingDesc.Visible = false;
            }

            Top    = MainWindow.sidebar.Height + 16;
            Width  = 868;
            Left   = (MainWindow.ClientWidth / 2) - (Width / 2);
            Height = MainWindow.ClientHeight - Top - 16;
            GroupPanel MapPanel = new GroupPanel(manager)
            {
                Text = "Map List", Left = 8, Top = 8, Width = 316, Height = ClientHeight - 16,
            };

            MapPanel.Init();
            Add(MapPanel);
            GroupPanel JoinPanel = new GroupPanel(manager)
            {
                Text = "Open Map", Left = MapPanel.Left + MapPanel.Width + 8, Top = 8, Width = 512, Height = (ClientHeight / 2) - 16,
            };

            JoinPanel.Init();
            Add(JoinPanel);
            GroupPanel CreatePanel = new GroupPanel(manager)
            {
                Text = "Create Map", Left = JoinPanel.Left, Top = (ClientHeight / 2) + 8, Width = 512, Height = (ClientHeight / 2) - 16,
            };

            CreatePanel.Init();
            Add(CreatePanel);

            MapList = new ControlList <MapListItem>(Manager);
            MapList.Init();
            MapList.Left              = 8;
            MapList.Top               = 8;
            MapList.Width             = 300;
            MapList.Height            = MapPanel.ClientHeight - 16;
            MapList.ItemIndexChanged += MapList_ItemIndexChanged;
            MapPanel.Add(MapList);
            List();

            Map = new Label(manager)
            {
                Text = "No Maps Found", Left = 8, Top = 8, Font = FontSize.Default14, Width = JoinPanel.Width - 32, Height = 20
            };
            Map.Init();
            JoinPanel.Add(Map);
            Author = new Label(manager)
            {
                Text = "", Left = 8, Top = Map.Top + Map.Height + 4, Width = JoinPanel.Width - 32, Height = 12
            };
            Author.Init();
            JoinPanel.Add(Author);
            Description = new Label(manager)
            {
                Text = "", Alignment = TomShane.Neoforce.Controls.Alignment.TopLeft, Left = 8, Top = Author.Top + Author.Height + 4, Width = JoinPanel.Width - 32, Height = 12 * 4
            };
            Description.Init();
            JoinPanel.Add(Description);
            LastSaved = new Label(manager)
            {
                Text = "", Left = 8, Top = Description.Top + Description.Height + 4, Width = JoinPanel.Width - 32, Height = 12
            };
            LastSaved.Init();
            JoinPanel.Add(LastSaved);
            Version = new Label(manager)
            {
                Text = "", Left = 8, Top = LastSaved.Top + LastSaved.Height + 4, Width = JoinPanel.Width - 32, Height = 12
            };
            Version.Init();
            JoinPanel.Add(Version);
            Size = new Label(manager)
            {
                Text = "", Left = 8, Top = Version.Top + Version.Height + 4, Width = JoinPanel.Width - 32, Height = 12
            };
            Size.Init();
            JoinPanel.Add(Size);

            Seed = new Label(manager)
            {
                Text = "", Left = 8, Top = Size.Top + Size.Height + 4, Width = JoinPanel.Width - 32, Height = 12
            };
            Seed.Init();
            JoinPanel.Add(Seed);

            Rename        = new Button(manager);
            Rename.Left   = ((JoinPanel.Width) / 2) - (Rename.Width / 2);
            Rename.Top    = JoinPanel.ClientHeight - Rename.Height - 8;
            Rename.Text   = "Rename";
            Rename.Click += Rename_Click;
            JoinPanel.Add(Rename);

            Delete        = new Button(manager);
            Delete.Left   = ((JoinPanel.Width) / 2) - (Delete.Width / 2) - (Rename.Width) - 8;
            Delete.Top    = JoinPanel.ClientHeight - Delete.Height - 8;
            Delete.Text   = "Delete";
            Delete.Click += Delete_Click;
            JoinPanel.Add(Delete);

            Open        = new Button(manager);
            Open.Left   = ((JoinPanel.Width) / 2) + (Rename.Width / 2) + 8;
            Open.Top    = JoinPanel.ClientHeight - Rename.Height - 8;
            Open.Text   = "Join";
            Open.Color  = Color.LightGreen;
            Open.Click += Open_Click;
            JoinPanel.Add(Open);

            Delete.Enabled = Rename.Enabled = Open.Enabled = false;
            //---------------------------------------------

            NameLbl = new Label(manager);
            NameLbl.Init();
            NameLbl.Top   = 8;
            NameLbl.Left  = 8;
            NameLbl.Text  = "Name:";
            NameLbl.Width = CreatePanel.Width / 2 - 16;
            CreatePanel.Add(NameLbl);

            NameInput = new TextBox(manager);
            NameInput.Init();
            NameInput.Top          = NameLbl.Top + NameLbl.Height + 2;
            NameInput.Left         = 8;
            NameInput.TextChanged += NameInput_TextChanged;
            NameInput.Width        = NameLbl.Width;

            CreatePanel.Add(NameInput);
            DescriptionLbl = new Label(manager);
            DescriptionLbl.Init();
            DescriptionLbl.Width = NameLbl.Width;
            DescriptionLbl.Top   = NameInput.Top + NameInput.Height + 2;
            DescriptionLbl.Left  = 8;
            DescriptionLbl.Text  = "Description:";
            CreatePanel.Add(DescriptionLbl);
            DescriptionInput = new TextBox(manager);
            DescriptionInput.Init();

            DescriptionInput.Mode       = TextBoxMode.Multiline;
            DescriptionInput.Top        = DescriptionLbl.Top + DescriptionLbl.Height + 2;
            DescriptionInput.Left       = 8;
            DescriptionInput.Width      = NameInput.Width;
            DescriptionInput.Height     = 64;
            DescriptionInput.ScrollBars = ScrollBars.Vertical;
            DescriptionInput.Text       = "A short description\nof the level";
            SizeLbl = new Label(manager);
            SizeLbl.Init();
            SizeLbl.Top  = 8;
            SizeLbl.Left = 16 + NameInput.Width;
            SizeLbl.Text = "Size:";
            CreatePanel.Add(SizeLbl);
            CreatePanel.Add(DescriptionInput);


            SizeCmb = new ComboBox(manager);
            SizeCmb.Init();

            SizeCmb.Left   = SizeLbl.Left;
            SizeCmb.Top    = SizeLbl.Top + SizeLbl.Height + 2;
            SizeCmb.Width  = NameInput.Width;
            SizeCmb.Height = 20;
            SizeCmb.Anchor = Anchors.Left | Anchors.Top | Anchors.Right;
            SizeCmb.Items.Add("Mini 1000x300");
            SizeCmb.Items.Add("Small 2000x600");
            SizeCmb.Items.Add("Mild 3000x900");
            SizeCmb.Items.Add("Regular 4000x1200");
            SizeCmb.Items.Add("Moderate 5000x1500");
            SizeCmb.Items.Add("Big 6000x1800");
            SizeCmb.Items.Add("Immense 7000x2100");
            SizeCmb.ReadOnly      = true;
            SizeCmb.OutlineMoving = SizeCmb.OutlineResizing = false;
            SizeCmb.ItemIndex     = 0;
            SizeCmb.Detached      = false;
            CreatePanel.Add(SizeCmb);

            SeedLbl = new Label(manager);
            SeedLbl.Init();
            SeedLbl.Width        = NameLbl.Width;
            SeedLbl.Top          = SizeCmb.Top + SizeCmb.Height + 2;
            SeedLbl.Left         = SizeLbl.Left;
            SeedLbl.Text         = "Seed:";
            SeedLbl.ToolTip.Text = "Seeds are an id used to generate a unique world, using the same seed will generate the same world as anothe seed that is the same.";
            CreatePanel.Add(SeedLbl);

            SeedInput = new TextBox(manager);
            SeedInput.Init();
            SeedInput.Top          = SeedLbl.Top + SeedLbl.Height + 2;
            SeedInput.Left         = SizeLbl.Left;
            SeedInput.Width        = NameInput.Width;
            SeedInput.TextChanged += SeedInput_TextChanged;
            SeedInput.Text         = Guid.NewGuid().GetHashCode().ToString();


            GeneratorLbl = new Label(manager);
            GeneratorLbl.Init();
            GeneratorLbl.Top   = SeedInput.Top + SeedInput.Height + 4;
            GeneratorLbl.Left  = SizeLbl.Left;
            GeneratorLbl.Text  = "Generator:";
            GeneratorLbl.Width = SeedLbl.Width;
            CreatePanel.Add(GeneratorLbl);


            GeneratorCmb = new ComboBox(manager);
            GeneratorCmb.Init();
            GeneratorCmb.Detached = false;
            GeneratorCmb.Left     = SizeLbl.Left;
            GeneratorCmb.Top      = GeneratorLbl.Top + GeneratorLbl.Height + 4;
            GeneratorCmb.Width    = NameInput.Width;
            GeneratorCmb.Height   = 20;
            GeneratorCmb.Anchor   = Anchors.Left | Anchors.Top | Anchors.Right;
            GeneratorCmb.Items.Add("Normal Planet");
            GeneratorCmb.Items.Add("Flat World");
            GeneratorCmb.ItemIndex     = 0;
            GeneratorCmb.ReadOnly      = true;
            GeneratorCmb.OutlineMoving = GeneratorCmb.OutlineResizing = false;
            CreatePanel.Add(GeneratorCmb);

            CreatePanel.Add(SeedInput);
            Generate = new Button(manager);
            Generate.Init();
            Generate.Top     = DescriptionInput.Top + DescriptionInput.Height + 8;
            Generate.Left    = (CreatePanel.Width / 2) - (Generate.Width / 2);
            Generate.Click  += Generate_Click;
            Generate.Text    = "Create";
            Generate.Color   = Color.LightGreen;
            Generate.Enabled = false;
            CreatePanel.Add(Generate);

            //-----------------------------------------
            OpenFolder = new Button(manager);
            OpenFolder.Init();
            OpenFolder.Width  = 140;
            OpenFolder.Left   = ((MainWindow.ClientWidth) / 2) - (OpenFolder.Width / 2);
            OpenFolder.Top    = MainWindow.sidebar.Height + MainWindow.sidebar.Top - 58;
            OpenFolder.Text   = "[color:Gold]Open[/color] map folder";
            OpenFolder.Click += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                System.Diagnostics.Process.Start(IO.Directories["Maps"]);
            });
            MainWindow.sidebar.Add(OpenFolder);

            VisitSite = new Button(manager);
            VisitSite.Init();
            VisitSite.Width  = 140;
            VisitSite.Left   = ((MainWindow.ClientWidth) / 2) - (OpenFolder.Width / 2) - (VisitSite.Width) - 8;
            VisitSite.Top    = MainWindow.sidebar.Height + MainWindow.sidebar.Top - 58;
            VisitSite.Text   = "[color:Gold]Get[/color] maps from site";
            VisitSite.Click += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                System.Diagnostics.Process.Start(link);
            });
            VisitSite.Enabled = false; // 2018
            MainWindow.sidebar.Add(VisitSite);

            Exit = new Button(manager);
            Exit.Init();
            Exit.Width  = 140;
            Exit.Left   = ((MainWindow.ClientWidth) / 2) + (VisitSite.Width / 2) + 8;
            Exit.Top    = MainWindow.sidebar.Height + MainWindow.sidebar.Top - 58;
            Exit.Text   = "[color:Gold]Exit[/color] to main menu";
            Exit.Click += new TomShane.Neoforce.Controls.EventHandler(delegate(object o, TomShane.Neoforce.Controls.EventArgs e)
            {
                Close();
                MainWindow.InitMainScreen();
            });
            MainWindow.sidebar.Add(Exit);

            Exit.BringToFront();
            VisitSite.BringToFront();
            OpenFolder.BringToFront();

            if (MapList.Items.Count > 0)
            {
                MapList.ItemIndex = 0;
                (MapList.Items[MapList.ItemIndex] as MapListItem).sb.Color = Color.LightGreen;
            }
            Closed += TaskSandbox_Closed;
            CheckGenerate();
        }