Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

190 lines
5.6 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
//=======================================================================================//
#ifndef CL_REPLAYCONTEXT_H
#define CL_REPLAYCONTEXT_H
#ifdef _WIN32
#pragma once
#endif
//----------------------------------------------------------------------------------------
#include "shared_replaycontext.h"
#include "replay/iclientreplaycontext.h"
#include "igameevents.h"
#include "cl_recordingsessionmanager.h"
#include "cl_replaymoviemanager.h"
#include "cl_recordingsessionblockmanager.h"
#include "cl_performancemanager.h"
#include "cl_performancecontroller.h"
#include "errorsystem.h"
//----------------------------------------------------------------------------------------
class IReplayMovieRenderer;
class CScreenshotManager;
class CReplayManager;
class CReplayMovieManager;
class CClientRecordingSessionManager;
class CReplayPerformanceManager;
class CHttpDownloader;
class CSessionBlockDownloader;
class CClientRecordingSession;
class CPerformanceController;
class CRenderQueue;
//----------------------------------------------------------------------------------------
class CClientReplayContext : public IClientReplayContext,
public IErrorReporter
{
public:
LINK_TO_SHARED_REPLAYCONTEXT_IMP();
CClientReplayContext();
~CClientReplayContext();
virtual bool Init( CreateInterfaceFn fnFactory );
virtual void Shutdown();
virtual void Think(); // Called by engine
bool ReconstructReplayIfNecessary( CReplay *pReplay );
void DisableReplayOnClient( bool bDisable );
bool IsClientSideReplayDisabled() const { return m_bClientSideReplayDisabled; }
//
// IClientReplayContext
//
virtual CReplay *GetReplay( ReplayHandle_t hReplay );
virtual IReplayManager *GetReplayManager();
virtual IReplayMovieRenderer *GetMovieRenderer();
virtual IReplayMovieManager *GetMovieManager();
virtual IReplayScreenshotManager *GetScreenshotManager();
virtual IReplayPerformanceManager *GetPerformanceManager();
virtual IReplayPerformanceController *GetPerformanceController();
virtual IReplayRenderQueue *GetRenderQueue();
virtual void SetMovieRenderer( IReplayMovieRenderer *pMovieRenderer );
virtual void OnSignonStateFull();
virtual void OnClientSideDisconnect();
virtual void PlayReplay( ReplayHandle_t hReplay, int iPerformance, bool bPlaySound );
virtual void OnPlayerSpawn();
virtual void OnPlayerClassChanged();
virtual void GetPlaybackTimes( float &flOutTime, float &flOutLength, const CReplay *pReplay, const CReplayPerformance *pPerformance );
virtual uint64 GetServerSessionId( ReplayHandle_t hReplay );
virtual void CleanupUnneededBlocks();
//
// IErrorReporter
//
virtual void ReportErrorsToUser( wchar_t *pErrorText );
void TestDownloader( const char *pURL );
CReplayManager *m_pReplayManager;
CScreenshotManager *m_pScreenshotManager;
IReplayMovieRenderer *m_pMovieRenderer;
CReplayMovieManager *m_pMovieManager;
CReplayPerformanceManager *m_pPerformanceManager;
CPerformanceController *m_pPerformanceController;
CSessionBlockDownloader *m_pSessionBlockDownloader;
CRenderQueue *m_pRenderQueue;
CHttpDownloader *m_pTestDownloader;
private:
void DebugThink();
void ReplayThink();
bool m_bClientSideReplayDisabled;
};
//----------------------------------------------------------------------------------------
extern CClientReplayContext *g_pClientReplayContextInternal;
//----------------------------------------------------------------------------------------
//
// Helpers
//
inline const char *CL_GetBasePath()
{
return g_pClientReplayContextInternal->m_pShared->m_strBasePath;
}
inline const char *CL_GetRelativeBasePath()
{
return g_pClientReplayContextInternal->m_pShared->m_strRelativeBasePath.Get();
}
inline CReplayManager *CL_GetReplayManager()
{
return g_pClientReplayContextInternal->m_pReplayManager;
}
inline CClientRecordingSessionBlockManager *CL_GetRecordingSessionBlockManager()
{
return static_cast< CClientRecordingSessionBlockManager * >( g_pClientReplayContextInternal->GetRecordingSessionBlockManager() );
}
inline CScreenshotManager *CL_GetScreenshotManager()
{
return g_pClientReplayContextInternal->m_pScreenshotManager;
}
inline IReplayMovieRenderer *CL_GetMovieRenderer()
{
return g_pClientReplayContextInternal->m_pMovieRenderer;
}
inline CReplayMovieManager *CL_GetMovieManager()
{
return g_pClientReplayContextInternal->m_pMovieManager;
}
inline const char *CL_GetReplayBaseDir()
{
return g_pClientReplayContextInternal->m_pShared->m_strBasePath;
}
inline CErrorSystem *CL_GetErrorSystem()
{
return g_pClientReplayContextInternal->m_pShared->m_pErrorSystem;
}
inline CSessionBlockDownloader *CL_GetSessionBlockDownloader()
{
return g_pClientReplayContextInternal->m_pSessionBlockDownloader;
}
inline CReplayPerformanceManager *CL_GetPerformanceManager()
{
return g_pClientReplayContextInternal->m_pPerformanceManager;
}
inline CPerformanceController *CL_GetPerformanceController()
{
return g_pClientReplayContextInternal->m_pPerformanceController;
}
inline IThreadPool *CL_GetThreadPool()
{
return g_pClientReplayContextInternal->m_pShared->m_pThreadPool;
}
inline CRenderQueue *CL_GetRenderQueue()
{
return g_pClientReplayContextInternal->m_pRenderQueue;
}
//----------------------------------------------------------------------------------------
CClientRecordingSessionManager *CL_GetRecordingSessionManager();
CClientRecordingSession *CL_GetRecordingSessionInProgress();
//----------------------------------------------------------------------------------------
#endif // CL_REPLAYCONTEXT_H