From 4af352a213431e577a48dd8b3ece7822cb7168bc Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Thu, 16 Feb 2006 01:12:28 +0000 Subject: 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 --- src/net_structrw.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) (limited to 'src/net_structrw.c') 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 #include +#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; iplayeringame[i] = (bitfield & (1 << i)) != 0; + } + + // Read cmds + + for (i=0; iplayeringame[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; iplayeringame[i]) + { + bitfield |= 1 << i; + } + } + + NET_WriteInt8(packet, bitfield); + + // Write player ticcmds + + for (i=0; iplayeringame[i]) + { + NET_WriteTiccmdDiff(packet, &cmd->cmds[i], false); + } + } +} + -- cgit v1.2.3