shithub: choc

Download patch

ref: df4cb5af90a67d02c2e64b02462d39edfadf469f
parent: 2561fee6091fec2248a102e951cc108f3e2ea4b7
author: Simon Howard <fraggle@gmail.com>
date: Sat Oct 14 09:26:17 EDT 2006

Display drone indicator on the netgame waiting screen if drones are connected.

Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 699

--- a/src/net_client.c
+++ b/src/net_client.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: net_client.c 698 2006-10-14 12:55:02Z fraggle $
+// $Id: net_client.c 699 2006-10-14 13:26:17Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -237,8 +237,12 @@
 
 // Number of clients currently connected to the server
 
-int net_clients_in_game;
+unsigned int net_clients_in_game;
 
+// Number of drone players connected to the server
+
+unsigned int net_drones_in_game;
+
 // Names of all players
 
 char net_player_addresses[MAXPLAYERS][MAXPLAYERNAME];
@@ -645,6 +649,7 @@
 static void NET_CL_ParseWaitingData(net_packet_t *packet)
 {
     unsigned int num_players;
+    unsigned int num_drones;
     unsigned int is_controller;
     signed int player_number;
     char *player_names[MAXPLAYERS];
@@ -654,6 +659,7 @@
     size_t i;
 
     if (!NET_ReadInt8(packet, &num_players)
+     || !NET_ReadInt8(packet, &num_drones)
      || !NET_ReadInt8(packet, &is_controller)
      || !NET_ReadSInt8(packet, &player_number))
     {
@@ -699,6 +705,7 @@
     }
 
     net_clients_in_game = num_players;
+    net_drones_in_game = num_drones;
     net_client_controller = is_controller != 0;
     net_player_number = player_number;
 
--- a/src/net_client.h
+++ b/src/net_client.h
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: net_client.h 698 2006-10-14 12:55:02Z fraggle $
+// $Id: net_client.h 699 2006-10-14 13:26:17Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -86,7 +86,8 @@
 extern boolean net_client_connected;
 extern boolean net_client_received_wait_data;
 extern boolean net_client_controller;
-extern int net_clients_in_game;
+extern unsigned int net_clients_in_game;
+extern unsigned int net_drones_in_game;
 extern boolean net_waiting_for_start;
 extern char net_player_names[MAXPLAYERS][MAXPLAYERNAME];
 extern char net_player_addresses[MAXPLAYERS][MAXPLAYERNAME];
--- a/src/net_gui.c
+++ b/src/net_gui.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: net_gui.c 698 2006-10-14 12:55:02Z fraggle $
+// $Id: net_gui.c 699 2006-10-14 13:26:17Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -93,6 +93,7 @@
 static txt_window_t *window;
 static txt_label_t *player_labels[MAXPLAYERS];
 static txt_label_t *ip_labels[MAXPLAYERS];
+static txt_label_t *drone_label;
 static boolean had_warning;
 
 static void EscapePressed(TXT_UNCAST_ARG(widget), void *unused)
@@ -139,8 +140,10 @@
         TXT_AddWidget(table, ip_labels[i]);
     }
 
-    TXT_AddWidget(window, TXT_NewStrut(0, 1));
+    drone_label = TXT_NewLabel("");
 
+    TXT_AddWidget(window, drone_label);
+
     cancel = TXT_NewWindowAction(KEY_ESCAPE, "Cancel");
     TXT_SignalConnect(cancel, "pressed", EscapePressed, NULL);
 
@@ -150,13 +153,14 @@
 static void UpdateGUI(void)
 {
     txt_window_action_t *startgame;
-    int i;
+    char buf[20];
+    unsigned int i;
 
     for (i=0; i<MAXPLAYERS; ++i)
     {
         txt_color_t color = TXT_COLOR_BRIGHT_WHITE;
 
-        if (i == net_player_number)
+        if ((signed) i == net_player_number)
         {
             color = TXT_COLOR_YELLOW;
         }
@@ -174,6 +178,16 @@
             TXT_SetLabel(player_labels[i], "");
             TXT_SetLabel(ip_labels[i], "");
         }
+    }
+
+    if (net_drones_in_game > 0)
+    {
+        sprintf(buf, " (+%i observer clients)", net_drones_in_game);
+        TXT_SetLabel(drone_label, buf);
+    }
+    else
+    {
+        TXT_SetLabel(drone_label, "");
     }
 
     if (net_client_controller)
--- a/src/net_server.c
+++ b/src/net_server.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: net_server.c 698 2006-10-14 12:55:02Z fraggle $
+// $Id: net_server.c 699 2006-10-14 13:26:17Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -380,6 +380,26 @@
     return result;
 }
 
+// Returns the number of drones currently connected.
+
+static int NET_SV_NumDrones(void)
+{
+    int i;
+    int result;
+
+    result = 0;
+
+    for (i=0; i<MAXNETNODES; ++i)
+    {
+        if (ClientConnected(&clients[i]) && clients[i].drone)
+        {
+            result += 1;
+        }
+    }
+
+    return result;
+}
+
 // returns the number of clients connected
 
 static int NET_SV_NumClients(void)
@@ -1298,6 +1318,10 @@
     // include the number of players waiting
 
     NET_WriteInt8(packet, num_players);
+
+    // send the number of drone clients
+
+    NET_WriteInt8(packet, NET_SV_NumDrones());
 
     // indicate whether the client is the controller