summaryrefslogtreecommitdiff
path: root/src/net_structrw.c
diff options
context:
space:
mode:
authorSimon Howard2006-02-16 01:12:28 +0000
committerSimon Howard2006-02-16 01:12:28 +0000
commit4af352a213431e577a48dd8b3ece7822cb7168bc (patch)
tree12f055c323cb6de2c031fdfe2c1631f88be38d56 /src/net_structrw.c
parentb693c7f12dbbf367ef41c8aba08774968bfe0604 (diff)
downloadchocolate-doom-4af352a213431e577a48dd8b3ece7822cb7168bc.tar.gz
chocolate-doom-4af352a213431e577a48dd8b3ece7822cb7168bc.tar.bz2
chocolate-doom-4af352a213431e577a48dd8b3ece7822cb7168bc.zip
Define a new type net_full_ticcmd_t, a structure containing all ticcmds
for a given tic. Store received game data in a receive window. Add send queues for clients and add data from the receive window to generate complete sets of ticcmds. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 369
Diffstat (limited to 'src/net_structrw.c')
-rw-r--r--src/net_structrw.c78
1 files changed, 77 insertions, 1 deletions
diff --git a/src/net_structrw.c b/src/net_structrw.c
index a2662023..f57a9091 100644
--- a/src/net_structrw.c
+++ b/src/net_structrw.c
@@ -1,7 +1,7 @@
// Emacs style mode select -*- C++ -*-
//-----------------------------------------------------------------------------
//
-// $Id: net_structrw.c 295 2006-01-14 02:06:48Z fraggle $
+// $Id: net_structrw.c 369 2006-02-16 01:12:28Z fraggle $
//
// Copyright(C) 2005 Simon Howard
//
@@ -21,6 +21,12 @@
// 02111-1307, USA.
//
// $Log$
+// Revision 1.6 2006/02/16 01:12:28 fraggle
+// Define a new type net_full_ticcmd_t, a structure containing all ticcmds
+// for a given tic. Store received game data in a receive window. Add
+// send queues for clients and add data from the receive window to
+// generate complete sets of ticcmds.
+//
// Revision 1.5 2006/01/14 02:06:48 fraggle
// Include the game version in the settings structure.
//
@@ -47,6 +53,8 @@
#include <stdlib.h>
#include <string.h>
+#include "doomdef.h"
+
#include "net_packet.h"
#include "net_structrw.h"
@@ -213,3 +221,71 @@ void NET_TiccmdPatch(ticcmd_t *src, net_ticdiff_t *diff, ticcmd_t *dest)
dest->chatchar = 0;
}
+//
+// net_full_ticcmd_t
+//
+
+boolean NET_ReadFullTiccmd(net_packet_t *packet, net_full_ticcmd_t *cmd)
+{
+ unsigned int bitfield;
+ int i;
+
+ // Regenerate playeringame from the "header" bitfield
+
+ if (!NET_ReadInt8(packet, &bitfield))
+ {
+ return false;
+ }
+
+ for (i=0; i<MAXPLAYERS; ++i)
+ {
+ cmd->playeringame[i] = (bitfield & (1 << i)) != 0;
+ }
+
+ // Read cmds
+
+ for (i=0; i<MAXPLAYERS; ++i)
+ {
+ if (cmd->playeringame[i])
+ {
+ if (!NET_ReadTiccmdDiff(packet, &cmd->cmds[i], false))
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+void NET_WriteFullTiccmd(net_packet_t *packet, net_full_ticcmd_t *cmd)
+{
+ unsigned int bitfield;
+ int i;
+
+ // Write "header" byte indicating which players are active
+ // in this ticcmd
+
+ bitfield = 0;
+
+ for (i=0; i<MAXPLAYERS; ++i)
+ {
+ if (cmd->playeringame[i])
+ {
+ bitfield |= 1 << i;
+ }
+ }
+
+ NET_WriteInt8(packet, bitfield);
+
+ // Write player ticcmds
+
+ for (i=0; i<MAXPLAYERS; ++i)
+ {
+ if (cmd->playeringame[i])
+ {
+ NET_WriteTiccmdDiff(packet, &cmd->cmds[i], false);
+ }
+ }
+}
+