ref: 79b77612579be43566fcbac7a153da22b4cd9dd7
parent: 1432f924ba8bce62b212b57909a69fc4fdee8270
author: Simon Howard <fraggle@gmail.com>
date: Sat Jan 7 15:08:11 EST 2006
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
--- 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 @@
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 @@
{
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 @@
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
--- 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_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 */
--- 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 @@
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 @@
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 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)
@@ -117,6 +154,8 @@
{
return;
}
+
+ NET_InitGUI();
last_tic_time = I_GetTime();
--- 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,7 +400,11 @@
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
packet = NET_NewPacket(10);
@@ -404,11 +412,28 @@
// 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