diff options
Diffstat (limited to 'replay/cl_replaymanager.h')
| -rw-r--r-- | replay/cl_replaymanager.h | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/replay/cl_replaymanager.h b/replay/cl_replaymanager.h new file mode 100644 index 0000000..6c83e99 --- /dev/null +++ b/replay/cl_replaymanager.h @@ -0,0 +1,128 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +//=======================================================================================// + +#ifndef CL_REPLAYMANAGER_H +#define CL_REPLAYMANAGER_H +#ifdef _WIN32 +#pragma once +#endif + +//---------------------------------------------------------------------------------------- + +#include "genericpersistentmanager.h" +#include "replay/ireplaymanager.h" +#include "cl_replaycontext.h" +#include "replay/replay.h" + +//---------------------------------------------------------------------------------------- + +class IReplayFactory; + +//---------------------------------------------------------------------------------------- + +// +// Manages and serializes all replays on the client. +// +class CReplayManager : public CGenericPersistentManager< CReplay >, + public IReplayManager +{ + typedef CGenericPersistentManager< CReplay > BaseClass; + +public: + CReplayManager(); + ~CReplayManager(); + + virtual bool Init( CreateInterfaceFn fnCreateFactory ); + void Shutdown(); + + void OnSessionStart(); + void OnSessionEnd(); + int GetNumReplaysDependentOnSession( ReplayHandle_t hSession ); + + // IReplayManager + virtual CReplay *GetReplay( ReplayHandle_t hReplay ); + virtual void FlagReplayForFlush( CReplay *pReplay, bool bForceImmediate ); + virtual int GetUnrenderedReplayCount(); + virtual void DeleteReplay( ReplayHandle_t hReplay, bool bNotifyUI ); + virtual CReplay *GetPlayingReplay(); + virtual CReplay *GetReplayForCurrentLife(); + virtual void GetReplays( CUtlLinkedList< CReplay *, int > &lstReplays ); + virtual void GetReplaysAsQueryableItems( CUtlLinkedList< IQueryableReplayItem *, int > &lstReplays ); + virtual int GetReplayCount() const { return Count(); } + virtual float GetDownloadProgress( const CReplay *pReplay ); + virtual const char *GetReplaysDir() const; + + void CommitPendingReplayAndBeginDownload(); + void CompletePendingReplay(); + void AddEventsForListen(); + void ClearPendingReplay(); + void SanityCheckReplay( CReplay *pReplay ); + void SaveDanglingReplay(); + void OnClientSideDisconnect(); + + inline ObjContainer_t &Replays() { return m_vecObjs; } + + bool Commit( CReplay *pNewReplay ); + + void UpdateCurrentReplayDataFromServer(); + void OnReplayRecordingCvarChanged(); + void AttemptToSetupNewReplay(); + + CReplay *m_pReplayThisLife; // Valid only between replay completion (ie player death) and player respawn, otherwise NULL + + // + // CGenericPersistentManager + // + virtual const char *GetRelativeIndexPath() const; + +private: + // + // CGenericPersistentManager + // + virtual const char *GetDebugName() const { return "replay manager"; } + virtual const char *GetIndexFilename() const { return "replays." GENERIC_FILE_EXTENSION; } + virtual CReplay *Create(); + virtual int GetVersion() const; + virtual void Think(); + virtual IReplayContext *GetReplayContext() const; + virtual bool ShouldLoadObj( const CReplay *pReplay ) const; + virtual void OnObjLoaded( CReplay *pReplay ); + + // + // CBaseThinker + // + virtual float GetNextThinkTime() const; + + void DebugThink(); + void InitReplay( CReplay *pReplay ); + IReplayFactory *GetReplayFactory( CreateInterfaceFn fnCreateFactory ); + void CleanupReplay( CReplay *&pReplay ); + void FreeLifeIfNotSaved( CReplay *&pReplay ); + CReplay *CreatePendingReplay(); + + CReplay *m_pPendingReplay; // This is the replay we're currently recording - one which will + // either be committed (via Commit()) or not, depending on whether + // the player chooses to save the replay. + + CReplay *m_pReplayLastLife; // The previous life (ie between the player's previous spawn and the current spawn), if any (otherwise NULL) + float m_flPlayerSpawnCreateReplayFailTime; + IReplayFactory *m_pReplayFactory; +}; + +//---------------------------------------------------------------------------------------- + +inline CReplay *GetReplay( ReplayHandle_t hReplay ) +{ + extern CClientReplayContext *g_pClientReplayContextInternal; + return g_pClientReplayContextInternal->m_pReplayManager->GetReplay( hReplay ); +} + +//---------------------------------------------------------------------------------------- + +#define FOR_EACH_REPLAY( _i ) FOR_EACH_OBJ( CL_GetReplayManager(), _i ) +#define GET_REPLAY_AT( _i ) CL_GetReplayManager()->m_vecObjs[ _i ] + +//---------------------------------------------------------------------------------------- + +#endif // CL_REPLAYMANAGER_H |