//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef PREDICTABLEID_H #define PREDICTABLEID_H #ifdef _WIN32 #pragma once #endif #if !defined( NO_ENTITY_PREDICTION ) //----------------------------------------------------------------------------- // Purpose: Wraps 32bit predictID to allow access and creation //----------------------------------------------------------------------------- class CPredictableId { public: // Construction CPredictableId( void ); static void ResetInstanceCounters( void ); // Is the Id being used bool IsActive( void ) const; // Call this to set from data void Init( int player, int command, const char *classname, const char *module, int line ); // Get player index int GetPlayer( void ) const; // Get hash value int GetHash( void ) const; // Get index number int GetInstanceNumber( void ) const; // Get command number int GetCommandNumber( void ) const; // Check command number // bool IsCommandNumberEqual( int testNumber ) const; // Client only void SetAcknowledged( bool ack ); bool GetAcknowledged( void ) const; // For conversion to/from integer int GetRaw( void ) const; void SetRaw( int raw ); char const *Describe( void ) const; // Equality test bool operator ==( const CPredictableId& other ) const; bool operator !=( const CPredictableId& other ) const; private: void SetCommandNumber( int commandNumber ); void SetPlayer( int playerIndex ); void SetInstanceNumber( int counter ); // Encoding bits, should total 32 struct bitfields { unsigned int ack : 1; // 1 unsigned int player : 5; // 6 unsigned int command : 10; // 16 unsigned int hash : 12; // 28 unsigned int instance : 4; // 32 } m_PredictableID; }; // This can be empty, the class has a proper constructor FORCEINLINE void NetworkVarConstruct( CPredictableId &x ) {} #endif #endif // PREDICTABLEID_H