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 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")); }
public static Ballz The() { if (_instance != null) { return(_instance); } _instance = new Ballz(); return(_instance); }
public void Hide() { if (Hidden) { return; } Hidden = true; Ballz.The().MessageOverlay = null; UserInterface.RemoveEntity(this); this.Visible = false; }
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); }
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()); }
internal static void RunGame() { game = Ballz.The(); game.Run(); }
private MenuPanel DefaultMenu() { // Music! Ballz.The().Services.GetService <SoundControl>().StartMusic(SoundControl.MenuMusic); return(new Menu.MainMenu()); }
public static Ballz The() { if (_instance != null) return _instance; _instance = new Ballz(); return _instance; }
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()); }