foxygit / doom Log in
commit 79b77612579be43566fcbac7a153da22b4cd9dd7
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Sat Jan 7 20:08:11 2006 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Sat Jan 7 20:08:11 2006 +0000

    Send player name and address in the waiting data packets. Display these
    on the waiting screen, and improve the waiting screen appearance.

    Subversion-branch: /trunk/chocolate-doom
    Subversion-revision: 262
---
 src/net_client.c | 42 +++++++++++++++++++++++++++++++++++++++++-
 src/net_client.h | 11 ++++++++++-
 src/net_gui.c    | 49 ++++++++++++++++++++++++++++++++++++++++++++-----
 src/net_server.c | 29 +++++++++++++++++++++++++++--
 4 files changed, 122 insertions(+), 9 deletions(-)

diff --git a/src/net_client.c b/src/net_client.c
index fc3082fa..7628530e 100644
--- a/src/net_client.c
+++ b/src/net_client.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*-
 //-----------------------------------------------------------------------------
 //
-// $Id: net_client.c 252 2006-01-02 21:50:26Z fraggle $
+// $Id: net_client.c 262 2006-01-07 20:08:11Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -21,6 +21,10 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.9  2006/01/07 20:08:11  fraggle
+// Send player name and address in the waiting data packets.  Display these
+// on the waiting screen, and improve the waiting screen appearance.
+//
 // Revision 1.8  2006/01/02 21:50:26  fraggle
 // Restructure the waiting screen code.  Establish our own separate event
 // loop while waiting for the game to start, to avoid affecting the original
@@ -105,6 +109,11 @@ boolean net_client_controller = false;

 int net_clients_in_game;

+// Nmaes of all players
+
+char net_player_addresses[MAXPLAYERS][MAXPLAYERNAME];
+char net_player_names[MAXPLAYERS][MAXPLAYERNAME];
+
 // Waiting for the game to start?

 boolean net_waiting_for_start = false;
@@ -126,6 +135,9 @@ static void NET_CL_ParseWaitingData(net_packet_t *packet)
 {
     unsigned int num_players;
     unsigned int is_controller;
+    char *player_names[MAXPLAYERS];
+    char *player_addr[MAXPLAYERS];
+    int i;

     if (!NET_ReadInt8(packet, &num_players)
      || !NET_ReadInt8(packet, &is_controller))
@@ -135,8 +147,36 @@ static void NET_CL_ParseWaitingData(net_packet_t *packet)
         return;
     }

+    if (num_players > MAXPLAYERS)
+    {
+        // Invalid number of players
+
+        return;
+    }
+
+    // Read the player names
+
+    for (i=0; i<num_players; ++i)
+    {
+        player_names[i] = NET_ReadString(packet);
+        player_addr[i] = NET_ReadString(packet);
+
+        if (player_names[i] == NULL || player_addr[i] == NULL)
+        {
+            return;
+        }
+    }
+
     net_clients_in_game = num_players;
     net_client_controller = is_controller != 0;
+
+    for (i=0; i<num_players; ++i)
+    {
+        strncpy(net_player_names[i], player_names[i], MAXPLAYERNAME);
+        net_player_names[i][MAXPLAYERNAME-1] = '\0';
+        strncpy(net_player_addresses[i], player_addr[i], MAXPLAYERNAME);
+        net_player_addresses[i][MAXPLAYERNAME-1] = '\0';
+    }
 }

 // Received an ACK
diff --git a/src/net_client.h b/src/net_client.h
index 2723eab6..9200e167 100644
--- a/src/net_client.h
+++ b/src/net_client.h
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*-
 //-----------------------------------------------------------------------------
 //
-// $Id: net_client.h 252 2006-01-02 21:50:26Z fraggle $
+// $Id: net_client.h 262 2006-01-07 20:08:11Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -21,6 +21,10 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.7  2006/01/07 20:08:11  fraggle
+// Send player name and address in the waiting data packets.  Display these
+// on the waiting screen, and improve the waiting screen appearance.
+//
 // Revision 1.6  2006/01/02 21:50:26  fraggle
 // Restructure the waiting screen code.  Establish our own separate event
 // loop while waiting for the game to start, to avoid affecting the original
@@ -51,9 +55,12 @@
 #ifndef NET_CLIENT_H
 #define NET_CLIENT_H

+#include "doomdef.h"
 #include "doomtype.h"
 #include "net_defs.h"

+#define MAXPLAYERNAME 30
+
 boolean NET_CL_Connect(net_addr_t *addr);
 void NET_CL_Disconnect(void);
 void NET_CL_Run(void);
@@ -62,6 +69,8 @@ extern boolean net_client_connected;
 extern boolean net_client_controller;
 extern int net_clients_in_game;
 extern boolean net_waiting_for_start;
+extern char net_player_names[MAXPLAYERS][MAXPLAYERNAME];
+extern char net_player_addresses[MAXPLAYERS][MAXPLAYERNAME];

 #endif /* #ifndef NET_CLIENT_H */

diff --git a/src/net_gui.c b/src/net_gui.c
index c251eab9..7a41f217 100644
--- a/src/net_gui.c
+++ b/src/net_gui.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*-
 //-----------------------------------------------------------------------------
 //
-// $Id: net_gui.c 252 2006-01-02 21:50:26Z fraggle $
+// $Id: net_gui.c 262 2006-01-07 20:08:11Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -21,6 +21,10 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.3  2006/01/07 20:08:11  fraggle
+// Send player name and address in the waiting data packets.  Display these
+// on the waiting screen, and improve the waiting screen appearance.
+//
 // Revision 1.2  2006/01/02 21:50:26  fraggle
 // Restructure the waiting screen code.  Establish our own separate event
 // loop while waiting for the game to start, to avoid affecting the original
@@ -52,6 +56,9 @@
 #include "w_wad.h"
 #include "z_zone.h"

+static patch_t *player_face;
+static patch_t *player_backdrops[4];
+
 extern void M_WriteText(int x, int y, char *string);

 static void Drawer(void)
@@ -59,6 +66,7 @@ static void Drawer(void)
     patch_t *backdrop;
     int backdrop_lumpnum;
     char buf[128];
+    int i, y;

     // Use INTERPIC or TITLEPIC if we don't have it

@@ -75,17 +83,32 @@ static void Drawer(void)

     V_DrawPatch(0, 0, 0, backdrop);

-    sprintf(buf, "%i clients connected to server.", net_clients_in_game);
+    // draw players

-    M_WriteText(32, 100, buf);
+    y = 100 - 16 * net_clients_in_game - 24;
+
+    M_WriteText(32, y, "Players currently waiting:");
+
+    y += 24;
+
+    for (i=0; i<net_clients_in_game; ++i)
+    {
+        V_DrawPatch(32, y, 0, player_backdrops[i]);
+        V_DrawPatch(32, y, 0, player_face);
+        M_WriteText(80, y+12, net_player_names[i]);
+        M_WriteText(200, y+12, net_player_addresses[i]);
+        y += 32;
+    }
+
+    y += 16;

     if (net_client_controller)
     {
-        M_WriteText(32, 150, "Press space to start the game...");
+        M_WriteText(32, y, "Press space to start the game...");
     }
     else
     {
-        M_WriteText(32, 150, "Waiting for the game to start...");
+        M_WriteText(32, y, "Waiting for the game to start...");
     }
 }

@@ -104,6 +127,20 @@ static void ProcessEvents(void)
     }
 }

+static void NET_InitGUI(void)
+{
+    char buf[8];
+    int i;
+
+    player_face = W_CacheLumpName("STFST01", PU_STATIC);
+
+    for (i=0 ; i<MAXPLAYERS ; i++)
+    {
+        sprintf(buf, "STPB%d", i);
+        player_backdrops[i] = W_CacheLumpName(buf, PU_STATIC);
+    }
+}
+
 // Displays a graphical screen while waiting for the game to start.

 void NET_WaitForStart(void)
@@ -118,6 +155,8 @@ void NET_WaitForStart(void)
         return;
     }

+    NET_InitGUI();
+
     last_tic_time = I_GetTime();

     while (net_waiting_for_start)
diff --git a/src/net_server.c b/src/net_server.c
index 39e6da8a..b50d7035 100644
--- a/src/net_server.c
+++ b/src/net_server.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*-
 //-----------------------------------------------------------------------------
 //
-// $Id: net_server.c 251 2006-01-02 21:48:37Z fraggle $
+// $Id: net_server.c 262 2006-01-07 20:08:11Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -21,6 +21,10 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.11  2006/01/07 20:08:11  fraggle
+// Send player name and address in the waiting data packets.  Display these
+// on the waiting screen, and improve the waiting screen appearance.
+//
 // Revision 1.10  2006/01/02 21:48:37  fraggle
 // fix client connected function
 //
@@ -396,6 +400,10 @@ static void NET_SV_Packet(net_packet_t *packet, net_addr_t *addr)
 static void NET_SV_SendWaitingData(net_client_t *client)
 {
     net_packet_t *packet;
+    int num_clients;
+    int i;
+
+    num_clients = NET_SV_NumClients();

     // time to send the client another status packet

@@ -404,11 +412,28 @@ static void NET_SV_SendWaitingData(net_client_t *client)

     // include the number of clients waiting

-    NET_WriteInt8(packet, NET_SV_NumClients());
+    NET_WriteInt8(packet, num_clients);

     // indicate whether the client is the controller

     NET_WriteInt8(packet, NET_SV_Controller() == client);
+
+    // send the address of all players
+
+    for (i=0; i<num_clients; ++i)
+    {
+        char *addr;
+
+        // name
+
+        NET_WriteString(packet, "Player");
+
+        // address
+
+        addr = NET_AddrToString(clients[i].addr);
+
+        NET_WriteString(packet, addr);
+    }

     // send packet to client and free