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.
133 lines
3.3 KiB
133 lines
3.3 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef TEXTSTATSMGR_H |
|
#define TEXTSTATSMGR_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
|
|
#include "filesystem.h" |
|
#include "utllinkedlist.h" |
|
|
|
|
|
// Text stats get to print their stuff by implementing this type of function. |
|
typedef void (*TextStatPrintFn)( IFileSystem *pFileSys, FileHandle_t hFile, void *pUserData ); |
|
typedef void (*TextStatFileFn)(); |
|
|
|
|
|
// The CTextStatsMgr is just a collection of CTextStat's that go into the same file. |
|
class CTextStatsMgr |
|
{ |
|
public: |
|
CTextStatsMgr( void ); |
|
|
|
// Write a file with all the registered stats. |
|
bool WriteFile( IFileSystem *pFileSystem, const char *pFilename = NULL ); |
|
|
|
// Get the preset filename to write stats to, if none is specified when writing |
|
char *GetStatsFilename( void ); |
|
|
|
// Set the filename to write stats to, if none is specified when writing |
|
void SetStatsFilename( char *sFilename ); |
|
|
|
private: |
|
char m_szStatFilename[ MAX_PATH ]; |
|
}; |
|
|
|
|
|
// This is the default CTextStatsMgr, but there can be any number of them. |
|
extern CTextStatsMgr g_TextStatsMgr; |
|
|
|
|
|
|
|
// Make these to register text stat functions. |
|
class CTextStat |
|
{ |
|
friend class CTextStatsMgr; |
|
|
|
public: |
|
CTextStat(); |
|
CTextStat( TextStatPrintFn fn, void *pUserData, CTextStatsMgr *pMgr=&g_TextStatsMgr ); |
|
~CTextStat(); |
|
|
|
// This can be called if you don't want to pass parameters into the constructor. |
|
void Init( TextStatPrintFn printFn, void *pUserData, CTextStatsMgr *pMgr=&g_TextStatsMgr ); |
|
void Term(); |
|
|
|
|
|
private: |
|
|
|
// Special constructor to just tie off the linked list. |
|
CTextStat( bool bGlobalListHead ); |
|
|
|
// The global list of CTextStats. |
|
static CTextStat* GetTextStatsList(); |
|
|
|
static void RemoveFn( void *pUserData ); |
|
|
|
// Link it into the global list. |
|
CTextStat *m_pPrev; |
|
CTextStat *m_pNext; |
|
|
|
CTextStatsMgr *m_pMgr; |
|
|
|
TextStatPrintFn m_PrintFn; |
|
void *m_pUserData; |
|
}; |
|
|
|
|
|
// This class registers like a ConVar and acts like an int. When the game is shutdown, |
|
// its value will be saved in the stats file along with its name.s |
|
class CTextStatInt |
|
{ |
|
public: |
|
CTextStatInt( const char *pName, int initialValue=0, CTextStatsMgr *pMgr=&g_TextStatsMgr ); |
|
|
|
operator int() const { return m_Value; } |
|
int operator=( int val ) { m_Value = val; return m_Value; } |
|
|
|
int operator++() { m_Value++; return m_Value; } |
|
int operator--() { m_Value--; return m_Value; } |
|
int operator+=( int val ) { m_Value += val; return m_Value; } |
|
int operator-=( int val ) { m_Value -= val; return m_Value; } |
|
int operator*=( int val ) { m_Value *= val; return m_Value; } |
|
int operator/=( int val ) { m_Value /= val; return m_Value; } |
|
|
|
|
|
private: |
|
|
|
static void PrintFn( IFileSystem *pFileSys, FileHandle_t hFile, void *pUserData ); |
|
|
|
|
|
private: |
|
|
|
const char *m_pName; |
|
int m_Value; |
|
|
|
CTextStat m_Reg; // Use to register ourselves. |
|
}; |
|
|
|
|
|
// This can be registered to get a callback when the text stats mgr is saving its files. |
|
// You can write data out to your own file in here. |
|
class CTextStatFile |
|
{ |
|
public: |
|
CTextStatFile( TextStatFileFn fn ); |
|
|
|
private: |
|
friend class CTextStatsMgr; |
|
|
|
static CTextStatFile *s_pHead; |
|
CTextStatFile *m_pNext; |
|
TextStatFileFn m_pFn; |
|
}; |
|
|
|
|
|
#endif // TEXTSTATSMGR_H
|
|
|