summaryrefslogtreecommitdiff
path: root/src/net_gui.c
diff options
context:
space:
mode:
authorSimon Howard2011-10-19 18:48:53 +0000
committerSimon Howard2011-10-19 18:48:53 +0000
commit845a5d31b27c15f5b61f15e1cfc5f5d305b4878c (patch)
tree852113ac1932e2d51ddd3a2fb16829a6bf50180d /src/net_gui.c
parenta4567e04c7f90f12ae7e2bedf840d80e14409283 (diff)
downloadchocolate-doom-845a5d31b27c15f5b61f15e1cfc5f5d305b4878c.tar.gz
chocolate-doom-845a5d31b27c15f5b61f15e1cfc5f5d305b4878c.tar.bz2
chocolate-doom-845a5d31b27c15f5b61f15e1cfc5f5d305b4878c.zip
Send MAXPLAYERS value for game on connect to server. Make server adapt
its player limit to match. Update GUI code to adjust waiting screen list size appropriately. Subversion-branch: /branches/v2-branch Subversion-revision: 2442
Diffstat (limited to 'src/net_gui.c')
-rw-r--r--src/net_gui.c58
1 files changed, 42 insertions, 16 deletions
diff --git a/src/net_gui.c b/src/net_gui.c
index 781d27c6..7fff33f6 100644
--- a/src/net_gui.c
+++ b/src/net_gui.c
@@ -42,6 +42,7 @@
#include "textscreen.h"
static txt_window_t *window;
+static int old_max_players;
static txt_label_t *player_labels[NET_MAXPLAYERS];
static txt_label_t *ip_labels[NET_MAXPLAYERS];
static txt_label_t *drone_label;
@@ -60,18 +61,31 @@ static void StartGame(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(settings))
NET_CL_StartGame(settings);
}
-static void BuildGUI(void)
+static void OpenWaitDialog(void)
{
- char buf[50];
- txt_table_t *table;
txt_window_action_t *cancel;
- int i;
-
- had_warning = false;
TXT_SetDesktopTitle(PACKAGE_STRING);
-
+
window = TXT_NewWindow("Waiting for game start...");
+
+ TXT_AddWidget(window, TXT_NewLabel("\nPlease wait...\n\n"));
+
+ cancel = TXT_NewWindowAction(KEY_ESCAPE, "Cancel");
+ TXT_SignalConnect(cancel, "pressed", EscapePressed, NULL);
+
+ TXT_SetWindowAction(window, TXT_HORIZ_LEFT, cancel);
+
+ old_max_players = 0;
+}
+
+static void BuildWindow(void)
+{
+ char buf[50];
+ txt_table_t *table;
+ int i;
+
+ TXT_ClearTable(window);
table = TXT_NewTable(3);
TXT_AddWidget(window, table);
@@ -82,8 +96,8 @@ static void BuildGUI(void)
TXT_AddWidget(table, TXT_NewStrut(17, 1));
// Player labels
-
- for (i=0; i<NET_MAXPLAYERS; ++i)
+
+ for (i = 0; i < net_client_wait_data.max_players; ++i)
{
sprintf(buf, " %i. ", i + 1);
TXT_AddWidget(table, TXT_NewLabel(buf));
@@ -96,11 +110,6 @@ static void BuildGUI(void)
drone_label = TXT_NewLabel("");
TXT_AddWidget(window, drone_label);
-
- cancel = TXT_NewWindowAction(KEY_ESCAPE, "Cancel");
- TXT_SignalConnect(cancel, "pressed", EscapePressed, NULL);
-
- TXT_SetWindowAction(window, TXT_HORIZ_LEFT, cancel);
}
static void UpdateGUI(net_gamesettings_t *settings)
@@ -109,7 +118,23 @@ static void UpdateGUI(net_gamesettings_t *settings)
char buf[50];
unsigned int i;
- for (i=0; i<NET_MAXPLAYERS; ++i)
+ // If the value of max_players changes, we must rebuild the
+ // contents of the window. This includes when the first
+ // waiting data packet is received.
+
+ if (net_client_received_wait_data)
+ {
+ if (net_client_wait_data.max_players != old_max_players)
+ {
+ BuildWindow();
+ }
+ }
+ else
+ {
+ return;
+ }
+
+ for (i = 0; i < net_client_wait_data.max_players; ++i)
{
txt_color_t color = TXT_COLOR_BRIGHT_WHITE;
@@ -277,7 +302,8 @@ void NET_WaitForStart(net_gamesettings_t *settings)
I_SetWindowTitle("Waiting for game start");
//I_SetWindowIcon();
- BuildGUI();
+ OpenWaitDialog();
+ had_warning = false;
while (net_waiting_for_start)
{