mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 09:49:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef DATATABLE_ENCODE_H
|
||||
#define DATATABLE_ENCODE_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
|
||||
#include "dt_send.h"
|
||||
#include "dt_recv.h"
|
||||
|
||||
|
||||
class DecodeInfo : public CRecvProxyData
|
||||
{
|
||||
public:
|
||||
|
||||
// Copy everything except val.
|
||||
void CopyVars( const DecodeInfo *pOther );
|
||||
|
||||
public:
|
||||
|
||||
//
|
||||
// NOTE: it's valid to pass in m_pRecvProp and m_pData and m_pSrtuct as null, in which
|
||||
// case the buffer is advanced but the property is not stored anywhere.
|
||||
//
|
||||
// This is used by SendTable_CompareDeltas.
|
||||
//
|
||||
void *m_pStruct; // Points at the base structure
|
||||
void *m_pData; // Points at where the variable should be encoded.
|
||||
|
||||
const SendProp *m_pProp; // Provides the client's info on how to decode and its proxy.
|
||||
bf_read *m_pIn; // The buffer to get the encoded data from.
|
||||
|
||||
char m_TempStr[DT_MAX_STRING_BUFFERSIZE]; // m_Value.m_pString is set to point to this.
|
||||
};
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
// Encode a value.
|
||||
// pStruct : points at the base structure
|
||||
// pVar : holds data in the correct type (ie: PropVirtualsInt will have DVariant::m_Int set).
|
||||
// pProp : describes the property to be encoded.
|
||||
// pOut : the buffer to encode into.
|
||||
// objectID: for debug output.
|
||||
void (*Encode)( const unsigned char *pStruct, DVariant *pVar, const SendProp *pProp, bf_write *pOut, int objectID );
|
||||
|
||||
// Decode a value.
|
||||
// See the DecodeInfo class for a description of the parameters.
|
||||
void (*Decode)( DecodeInfo *pInfo );
|
||||
|
||||
// Compare the deltas in the two buffers. The property in both buffers must be fully decoded
|
||||
int (*CompareDeltas)( const SendProp *pProp, bf_read *p1, bf_read *p2 );
|
||||
|
||||
// Used for the local single-player connection to copy the data straight from the server ent into the client ent.
|
||||
void (*FastCopy)(
|
||||
const SendProp *pSendProp,
|
||||
const RecvProp *pRecvProp,
|
||||
const unsigned char *pSendData,
|
||||
unsigned char *pRecvData,
|
||||
int objectID );
|
||||
|
||||
// Return a string with the name of the type ("DPT_Float", "DPT_Int", etc).
|
||||
const char* (*GetTypeNameString)();
|
||||
|
||||
// Returns true if the property's value is zero.
|
||||
// NOTE: this does NOT strictly mean that it would encode to zeros. If it were a float with
|
||||
// min and max values, a value of zero could encode to some other integer value.
|
||||
bool (*IsZero)( const unsigned char *pStruct, DVariant *pVar, const SendProp *pProp );
|
||||
|
||||
// This writes a zero value in (ie: a value that would make IsZero return true).
|
||||
void (*DecodeZero)( DecodeInfo *pInfo );
|
||||
|
||||
// This reades this property from stream p and returns true, if it's a zero value
|
||||
bool (*IsEncodedZero) ( const SendProp *pProp, bf_read *p );
|
||||
void (*SkipProp) ( const SendProp *pProp, bf_read *p );
|
||||
} PropTypeFns;
|
||||
|
||||
|
||||
extern PropTypeFns g_PropTypeFns[DPT_NUMSendPropTypes];
|
||||
|
||||
|
||||
// This is used for comparing packed buffers. Just extracts the raw bits for the
|
||||
// data and returns the number of bits used to encode the data.
|
||||
int DecodeBits( DecodeInfo *pInfo, unsigned char *pOut );
|
||||
|
||||
|
||||
#endif // DATATABLE_ENCODE_H
|
||||
Reference in New Issue
Block a user