//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef PRECACHE_H #define PRECACHE_H #ifdef _WIN32 #pragma once #endif #include "networkstringtabledefs.h" #define PRECACHE_USER_DATA_NUMBITS 2 // Only network two bits from flags field... #pragma pack(1) //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- struct CPrecacheUserData { unsigned char flags : PRECACHE_USER_DATA_NUMBITS; }; #pragma pack() class CSfxTable; struct model_t; //#define DEBUG_PRECACHE 1 //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CPrecacheItem { public: CPrecacheItem( void ); // accessorts model_t *GetModel( void ); char const *GetGeneric( void ); CSfxTable *GetSound( void ); char const *GetName( void ); char const *GetDecal( void ); void SetModel( model_t const *pmodel ); void SetGeneric( char const *pname ); void SetSound( CSfxTable const *psound ); void SetName( char const *pname ); void SetDecal( char const *decalname ); float GetFirstReference( void ); float GetMostRecentReference( void ); unsigned int GetReferenceCount( void ); private: enum { TYPE_UNK = 0, TYPE_MODEL, TYPE_SOUND, TYPE_GENERIC, TYPE_DECAL }; void Init( int type, void const *ptr ); void ResetStats( void ); void Reference( void ); unsigned int m_nType : 3; unsigned int m_uiRefcount : 29; union precacheptr { model_t *model; char const *generic; CSfxTable *sound; char const *name; } u; #if DEBUG_PRECACHE float m_flFirst; float m_flMostRecent; #endif }; #define MODEL_PRECACHE_TABLENAME "modelprecache" #define GENERIC_PRECACHE_TABLENAME "genericprecache" #define SOUND_PRECACHE_TABLENAME "soundprecache" #define DECAL_PRECACHE_TABLENAME "decalprecache" char const *GetFlagString( int flags ); #endif // PRECACHE_H