This is the main type for your game.
Inheritance: Microsoft.Xna.Framework.Game
Exemple #1
0
        public void JoinSelectedGame(bool online)
        {
            if (OnlineGameListData == null || OnlineGameListData.Length < OnlineGameList.SelectedIndex + 1)
            {
                return;
            }

            PublicGameInfo selectedGame;

            if (online)
            {
                selectedGame = OnlineGameListData[OnlineGameList.SelectedIndex];
            }
            else
            {
                selectedGame = LocalGameListData[LocalGameList.SelectedIndex];
            }

            IPAddress host = null;

            if (!IPAddress.TryParse(selectedGame.HostAddress, out host))
            {
                return;
            }

            var overlay = MessageOverlay.ShowWaitMessage("Connecting to Game...", onCancel: () => { Ballz.The().Network.Disconnect(); });

            Ballz.The().Network.ConnectToServer(host, selectedGame.HostPort, onSuccess: () => {
                Ballz.The().Logic.OpenMenu(new LobbyMenu(isHost: false));
                overlay.Hide();
            });
        }
 public PerformanceRenderer(Ballz game) : base(game)
 {
     Enabled = false;
     Visible = false;
     //draw the overlay last, assuming we have game and menu for the very first draw calls
     DrawOrder = 3;
 }
 public PerformanceRenderer(Ballz game)
     : base(game)
 {
     Enabled = false;
     Visible = false;
     //draw the overlay last, assuming we have game and menu for the very first draw calls
     DrawOrder = 3;
 }
Exemple #4
0
        public LobbyMenu(bool isHost, MatchSettings settings = null) : base("Lobby")
        {
            if (isHost && settings == null)
            {
                throw new ArgumentNullException("settings must not be null when isHost is true");
            }

            IsHost        = isHost;
            MatchSettings = settings;

            Close += (s, e) =>
            {
                if (isHost)
                {
                    Lobby?.CloseHostedGameAsync();
                    Lobby?.Dispose();
                    Lobby = null;
                }

                Ballz.The().Network.PlayerListChanged -= UpdatePlayerList;
            };

            Open += (s, e) =>
            {
                Ballz.The().Network.PlayerListChanged += UpdatePlayerList;

                UpdatePlayerList(this, Ballz.The().Network.PlayerList);

                if (isHost)
                {
                    Lobby = new LobbyClient();
                    var gameInfo = Lobby.MakeGameInfo(MatchSettings.GameName, MatchSettings.IsPrivate);
                    Ballz.The().Network.StartServer(gameInfo);
                    Lobby.OpenGame(gameInfo, Ballz.The().Network.NetworkPeer);
                }
            };

            AddItem(new Label("Players in Lobby:"));
            PlayerList = new SelectList();
            PlayerList.LockSelection = true;
            AddItem(PlayerList);

            if (isHost)
            {
                var startGameBtn = new Button("Start Game");
                startGameBtn.OnClick += (e) =>
                {
                    Ballz.The().Network.StartNetworkGame(MatchSettings, 0);
                };
                AddItem(startGameBtn);
            }
            else
            {
                AddItem(new Label("Waiting for Host to start the Game"));
            }

            AddItem(new BackButton(text: "Leave Game"));
        }
Exemple #5
0
 public static Ballz The()
 {
     if (_instance != null)
     {
         return(_instance);
     }
     _instance = new Ballz();
     return(_instance);
 }
Exemple #6
0
        public void Hide()
        {
            if (Hidden)
            {
                return;
            }
            Hidden = true;

            Ballz.The().MessageOverlay = null;
            UserInterface.RemoveEntity(this);
            this.Visible = false;
        }
Exemple #7
0
        public static MessageOverlay Show(string header, string message = null, string buttonText = "OK", Action onButton = null, InputMessage.MessageType buttonKey = InputMessage.MessageType.ControlsAction)
        {
            if (Ballz.The().MessageOverlay != null)
            {
                return(null);
            }

            MessageOverlay overlay = new MessageOverlay(header, message, buttonText, onButton, buttonKey);

            UserInterface.AddEntity(overlay);

            return(overlay);
        }
Exemple #8
0
        public JoinByIpMenu() : base("Join by IP")
        {
            AddItem(new Label("Host IP Address:"));
            IpInput.Value = "127.0.0.1";
            AddItem(IpInput);
            AddItem(new Label("Host Port:"));

            PortInput.Value = "16116";
            AddItem(PortInput);

            JoinButton.OnClick += (e) =>
            {
                IPAddress host;

                if (!IPAddress.TryParse(IpInput.Value, out host))
                {
                    MessageOverlay.ShowError("Invalid IP Address format. Please enter a valid IP address, such as 192.168.0.13 (IPv4) or 2001:4860:4860::8844 (IPv6)");
                    return;
                }

                int port = 0;
                if (!int.TryParse(PortInput.Value, out port) || port < 0 || port > 65536)
                {
                    MessageOverlay.ShowError("Invalid Port number. Please specify a number between 0 and 65536");
                    return;
                }

                var overlay = MessageOverlay.ShowWaitMessage("Connecting", "Please Wait", onCancel: () => { Ballz.The().Network.Disconnect(); });

                Ballz.The().Network.ConnectToServer(
                    host,
                    port,
                    onSuccess: () => {
                    Ballz.The().Logic.OpenMenu(new LobbyMenu(isHost: false));
                    overlay.Hide();
                },
                    onFail: () => {
                    overlay.Hide();
                    MessageOverlay.ShowError("Could not connect to host.");
                }
                    );
            };
            AddItem(JoinButton);

            AddItem(new BackButton());
        }
Exemple #9
0
 internal static void RunGame()
 {
     game = Ballz.The();
     game.Run();
 }
Exemple #10
0
 private MenuPanel DefaultMenu()
 {
     // Music!
     Ballz.The().Services.GetService <SoundControl>().StartMusic(SoundControl.MenuMusic);
     return(new Menu.MainMenu());
 }
Exemple #11
0
 public static Ballz The()
 {
     if (_instance != null)
         return _instance;
     _instance = new Ballz();
     return _instance;
 }
Exemple #12
0
        public HostGameMenu(bool isMultiplayer) : base(isMultiplayer ? "Host Game" : "Singleplayer Game")
        {
            Skin = PanelSkin.Default;

            if (isMultiplayer)
            {
                //AddItem(new Gui.InputBox("Public Name", true));
            }


            AddItem(new Label("Game Name:"));

            GameName.Value = Ballz.The().Settings.HostGameName;
            AddItem(GameName);

            AddItem(new Label("Map:"));
            // TODO: Map Select
            ModeSelect.AddItem("TestWorld2");
            ModeSelect.AddItem("Procedural");
            ModeSelect.AddItem("Desert");
            ModeSelect.SelectedIndex = 0;
            AddItem(ModeSelect);
            AddItem(TurnBased);

            ErrorLabel.SetStyleProperty("FillColor", new StyleProperty(Color.Red));
            AddItem(ErrorLabel);

            if (isMultiplayer)
            {
                var startGameButton = new MenuButton("Open Game", () =>
                {
                    var name = GameName.Value;
                    Ballz.The().Settings.HostGameName = name;
                    if (String.IsNullOrWhiteSpace(name))
                    {
                        ErrorLabel.Text = "Invalid Game Name!";
                        return;
                    }

                    var mapName        = ModeSelect.SelectedValue;
                    var usePlayerTurns = TurnBased.Checked;

                    var settings = new MatchSettings
                    {
                        GameName       = name,
                        IsPrivate      = false,
                        GameMode       = SessionFactory.SessionFactory.AvailableFactories.First(), // Todo: Select game modes
                        UsePlayerTurns = usePlayerTurns,
                        MapName        = mapName,
                        Teams          = new List <Team>()
                    };

                    Ballz.The().Logic.OpenMenu(new LobbyMenu(true, settings));
                });

                AddItem(startGameButton);
            }
            else
            {
                AddItem(new Label("Start Game"));
            }
            AddItem(new Gui.BackButton());
        }