You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.2 KiB
97 lines
3.2 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef DATATABLE_RECV_ENG_H |
|
#define DATATABLE_RECV_ENG_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
|
|
#include "dt_recv.h" |
|
#include "bitbuf.h" |
|
#include "dt.h" |
|
|
|
class CStandardSendProxies; |
|
|
|
// ------------------------------------------------------------------------------------------ // |
|
// RecvTable functions. |
|
// ------------------------------------------------------------------------------------------ // |
|
|
|
// These are the module startup and shutdown routines. |
|
bool RecvTable_Init( RecvTable **pTables, int nTables ); |
|
void RecvTable_Term( bool clearall = true ); |
|
|
|
// After calling RecvTable_Init to provide the list of RecvTables, call this |
|
// as the server sends its SendTables over. When bNeedsDecoder is specified, |
|
// it will precalculate the necessary data to actually decode this type of |
|
// SendTable from the server. nDemoProtocol = 0 means current version. |
|
bool RecvTable_RecvClassInfos( bf_read *pBuf, bool bNeedsDecoder, int nDemoProtocol = 0); |
|
|
|
|
|
// After ALL the SendTables have been received, call this and it will create CRecvDecoders |
|
// for all the SendTable->RecvTable matches it finds. |
|
// Returns false if there is an unrecoverable error. |
|
// |
|
// bAllowMismatches is true when playing demos back so we can change datatables without breaking demos. |
|
// If pAnyMisMatches is non-null, it will be set to true if the client's recv tables mismatched the server's ones. |
|
bool RecvTable_CreateDecoders( const CStandardSendProxies *pSendProxies, bool bAllowMismatches, bool *pAnyMismatches=NULL ); |
|
|
|
// objectID gets passed into proxies and can be used to track data on particular objects. |
|
// NOTE: this function can ONLY decode a buffer outputted from RecvTable_MergeDeltas |
|
// or RecvTable_CopyEncoding because if the way it follows the exclude prop bits. |
|
bool RecvTable_Decode( |
|
RecvTable *pTable, |
|
void *pStruct, |
|
bf_read *pIn, |
|
int objectID, |
|
bool updateDTI = true |
|
); |
|
|
|
// This acts like a RecvTable_Decode() call where all properties are written and all their values are zero. |
|
void RecvTable_DecodeZeros( RecvTable *pTable, void *pStruct, int objectID ); |
|
|
|
// This writes all pNewState properties into pOut. |
|
// |
|
// If pOldState is non-null and contains any properties that aren't in pNewState, then |
|
// those properties are written to the output as well. Returns # of changed props |
|
int RecvTable_MergeDeltas( |
|
RecvTable *pTable, |
|
|
|
bf_read *pOldState, // this can be null |
|
bf_read *pNewState, |
|
|
|
bf_write *pOut, |
|
|
|
int objectID = - 1, |
|
|
|
int *pChangedProps = NULL, |
|
|
|
bool updateDTI = false // enclude merge from newState in the DTI reports |
|
); |
|
|
|
|
|
// Just copies the bits from the bf_read into the bf_write (this function is used |
|
// when you don't know the length of the encoded data). |
|
void RecvTable_CopyEncoding( |
|
RecvTable *pRecvTable, |
|
bf_read *pIn, |
|
bf_write *pOut, |
|
int objectID |
|
); |
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------ // |
|
// Globals |
|
// ------------------------------------------------------------------------------------------ // |
|
|
|
// This is incremented each time a property is decoded. |
|
extern int g_nPropsDecoded; |
|
|
|
|
|
#endif // DATATABLE_RECV_ENG_H
|
|
|