Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#ifndef PORTAL_GAMESTATS_H
#define PORTAL_GAMESTATS_H
#ifdef _WIN32
#pragma once
#endif
#include "gamestats.h"
#define PORTAL_GAMESTATS_VERSION 001
//#define PORTAL_GAMESTATS_VERBOSE //verbose logging of extra stats, only a good idea during internal tests, centralized here for easy on/off
//NEVER REMOVE A STRUCTURE OR CHANGE A CHUNKID. If you need to change how a chunk works, make a new structure with a new ID
struct Portal_Gamestats_LevelStats_t //most of this is only tracked in verbose mode
{ static const unsigned short CHUNKID = 1;
//substructures
struct PlayerDeaths_t { static const unsigned short CHUNKID = 1; //subchunks start over with id's
static const unsigned short TRIMSIZE = 200; //trim logs if more than this many entries exist for a single map
Vector ptPositionOfDeath; int iDamageType; char szAttackerClassName[32]; };
struct PortalPlacement_t { static const unsigned short CHUNKID = 2; static const unsigned short TRIMSIZE = 1000; //trim logs if more than this many entries exist for a single map
Vector ptPlayerFiredFrom; Vector ptPlacementPosition; char iSuccessCode; };
struct PlayerUse_t { static const unsigned short CHUNKID = 3; static const unsigned short TRIMSIZE = 500; //trim logs if more than this many entries exist for a single map
Vector ptTraceStart; Vector vTraceDelta; char szUseEntityClassName[32]; };
struct StuckEvent_t { static const unsigned short CHUNKID = 4; static const unsigned short TRIMSIZE = 100; //trim logs if more than this many entries exist for a single map
Vector ptPlayerPosition; QAngle qPlayerAngles; bool bNearPortal; bool bDucking; };
struct JumpEvent_t { static const unsigned short CHUNKID = 5; static const unsigned short TRIMSIZE = 1000; //trim logs if more than this many entries exist for a single map
Vector ptPlayerPositionAtJumpStart; Vector vPlayerVelocityAtJumpStart; };
struct LeafTimes_t { static const unsigned short CHUNKID = 6; static const unsigned short TRIMSIZE = 10000; //trim logs if more than this many entries exist for a single map
float fTimeSpentInVisLeaf; LeafTimes_t( void ) : fTimeSpentInVisLeaf( 0.0f ) { }; };
//these are created/destroyed by parent CPortalGameStats to avoid create/copy/destroy confusion
CUtlVector<PlayerDeaths_t> *m_pDeaths; CUtlVector<PortalPlacement_t> *m_pPlacements; CUtlVector<PlayerUse_t> *m_pUseEvents; CUtlVector<StuckEvent_t> *m_pStuckSpots; CUtlVector<JumpEvent_t> *m_pJumps; CUtlVector<LeafTimes_t> *m_pTimeSpentInVisLeafs;
void AppendSubChunksToBuffer( CUtlBuffer &SaveBuffer ); void LoadSubChunksFromBuffer( CUtlBuffer &LoadBuffer, unsigned int iChunkEndPosition ); void Clear( void ); };
class CPortal_Player;
class CPortalGameStats : CBaseGameStats { typedef CBaseGameStats BaseClass;
public: ~CPortalGameStats( void ); CPortalGameStats( void );
void Clear( void );
virtual void Event_LevelInit( void ); virtual void Event_MapChange( const char *szOldMapName, const char *szNewMapName ); virtual void Event_PlayerKilled( CBasePlayer *pPlayer, const CTakeDamageInfo &info ); void Event_PortalPlacement( const Vector &ptPlayerFiredFrom, const Vector &ptAttemptedPosition, char iSuccessCode ); void Event_PlayerJump( const Vector &ptStartPosition, const Vector &vStartVelocity ); void Event_PlayerUsed( const Vector &ptTraceStart, const Vector &vTraceDelta, CBaseEntity *pUsedEntity ); void Event_PlayerStuck( CPortal_Player *pPlayer );
virtual bool StatTrackingEnabledForMod( void ) { return true; } virtual bool UserPlayedAllTheMaps( void );
#ifdef _DEBUG
virtual bool AutoUpload_OnShutdown( void ) { return false; } //don't upload while we're debugging
#endif
virtual void AppendCustomDataToSaveBuffer( CUtlBuffer &SaveBuffer ); virtual void LoadCustomDataFromBuffer( CUtlBuffer &LoadBuffer );
Portal_Gamestats_LevelStats_t *m_pCurrentMapStats;
protected: CUtlDict< Portal_Gamestats_LevelStats_t, unsigned short > m_CustomMapStats; Portal_Gamestats_LevelStats_t *FindOrAddMapStats( const char *szMapName ); };
extern CPortalGameStats g_PortalGameStats;
void CreateLevelStatPointers( Portal_Gamestats_LevelStats_t *pFillIn ); void DestroyLevelStatPointers( Portal_Gamestats_LevelStats_t *pDestroyFrom );
#endif // PORTAL_GAMESTATS_H
|