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.
260 lines
6.3 KiB
260 lines
6.3 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
#include "quakedef.h" |
|
#include "precache.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Print out flag names |
|
// Input : flags - |
|
// Output : char const |
|
//----------------------------------------------------------------------------- |
|
char const *GetFlagString( int flags ) |
|
{ |
|
static char ret[ 512 ]; |
|
ret[ 0 ] = 0; |
|
|
|
bool first = true; |
|
|
|
if ( !flags ) |
|
return "None"; |
|
|
|
if ( flags & RES_FATALIFMISSING ) |
|
{ |
|
if ( !first ) |
|
{ |
|
Q_strncat( ret, " | ", sizeof( ret ), COPY_ALL_CHARACTERS ); |
|
} |
|
Q_strncat( ret, "RES_FATALIFMISSING", sizeof( ret ), COPY_ALL_CHARACTERS ); |
|
first = false; |
|
} |
|
|
|
if ( flags & RES_PRELOAD ) |
|
{ |
|
if ( !first ) |
|
{ |
|
Q_strncat( ret, " | ", sizeof( ret ), COPY_ALL_CHARACTERS ); |
|
} |
|
Q_strncat( ret, "RES_PRELOAD", sizeof( ret ), COPY_ALL_CHARACTERS ); |
|
first = false; |
|
} |
|
|
|
return ret; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CPrecacheItem::CPrecacheItem( void ) |
|
{ |
|
Init( TYPE_UNK, NULL ); |
|
ResetStats(); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CPrecacheItem::ResetStats( void ) |
|
{ |
|
m_uiRefcount = 0; |
|
#if DEBUG_PRECACHE |
|
m_flFirst = 0.0f; |
|
m_flMostRecent = 0.0f; |
|
#endif |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CPrecacheItem::Reference( void ) |
|
{ |
|
m_uiRefcount++; |
|
#if DEBUG_PRECACHE |
|
m_flMostRecent = realtime; |
|
if ( !m_flFirst ) |
|
{ |
|
m_flFirst = realtime; |
|
} |
|
#endif |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : type - |
|
// *ptr - |
|
//----------------------------------------------------------------------------- |
|
void CPrecacheItem::Init( int type, void const *ptr ) |
|
{ |
|
m_nType = type; |
|
u.model = ( model_t * )ptr; |
|
if ( ptr ) |
|
{ |
|
ResetStats(); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Output : model_t |
|
//----------------------------------------------------------------------------- |
|
model_t *CPrecacheItem::GetModel( void ) |
|
{ |
|
if ( !u.model ) |
|
return NULL; |
|
|
|
Assert( m_nType == TYPE_MODEL ); |
|
|
|
Reference(); |
|
|
|
return u.model; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Output : char const |
|
//----------------------------------------------------------------------------- |
|
char const *CPrecacheItem::GetGeneric( void ) |
|
{ |
|
if ( !u.generic ) |
|
return NULL; |
|
|
|
Assert( m_nType == TYPE_GENERIC ); |
|
|
|
Reference(); |
|
|
|
return u.generic; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Output : CSfxTable |
|
//----------------------------------------------------------------------------- |
|
CSfxTable *CPrecacheItem::GetSound( void ) |
|
{ |
|
if ( !u.sound ) |
|
return NULL; |
|
|
|
Assert( m_nType == TYPE_SOUND ); |
|
|
|
Reference(); |
|
|
|
return u.sound; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Output : char const |
|
//----------------------------------------------------------------------------- |
|
char const *CPrecacheItem::GetName( void ) |
|
{ |
|
if ( !u.name ) |
|
return NULL; |
|
|
|
Assert( m_nType == TYPE_SOUND ); |
|
|
|
Reference(); |
|
|
|
return u.name; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Output : char const |
|
//----------------------------------------------------------------------------- |
|
char const *CPrecacheItem::GetDecal( void ) |
|
{ |
|
if ( !u.name ) |
|
return NULL; |
|
|
|
Assert( m_nType == TYPE_DECAL ); |
|
|
|
Reference(); |
|
|
|
return u.name; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : *pmodel - |
|
//----------------------------------------------------------------------------- |
|
void CPrecacheItem::SetModel( model_t const *pmodel ) |
|
{ |
|
Init( TYPE_MODEL, pmodel ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : *pname - |
|
//----------------------------------------------------------------------------- |
|
void CPrecacheItem::SetGeneric( char const *pname ) |
|
{ |
|
Init( TYPE_GENERIC, pname ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : *psound - |
|
//----------------------------------------------------------------------------- |
|
void CPrecacheItem::SetSound( CSfxTable const *psound ) |
|
{ |
|
Init( TYPE_SOUND, psound ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : *name - |
|
//----------------------------------------------------------------------------- |
|
void CPrecacheItem::SetName( char const *name ) |
|
{ |
|
Init( TYPE_SOUND, name ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : *decalname - |
|
//----------------------------------------------------------------------------- |
|
void CPrecacheItem::SetDecal( char const *decalname ) |
|
{ |
|
Init( TYPE_DECAL, decalname ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Output : float |
|
//----------------------------------------------------------------------------- |
|
float CPrecacheItem::GetFirstReference( void ) |
|
{ |
|
#if DEBUG_PRECACHE |
|
return m_flFirst; |
|
#else |
|
return 0; |
|
#endif |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Output : float |
|
//----------------------------------------------------------------------------- |
|
float CPrecacheItem::GetMostRecentReference( void ) |
|
{ |
|
#if DEBUG_PRECACHE |
|
return m_flMostRecent; |
|
#else |
|
return 0; |
|
#endif |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Output : unsigned int |
|
//----------------------------------------------------------------------------- |
|
unsigned int CPrecacheItem::GetReferenceCount( void ) |
|
{ |
|
return m_uiRefcount; |
|
} |