mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-27 00:26:50 +00:00
210 lines
5.5 KiB
C++
210 lines
5.5 KiB
C++
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
#include "cbase.h"
|
||
|
|
||
|
#if defined( REPLAY_ENABLED )
|
||
|
|
||
|
#include "replay/cdll_replay.h"
|
||
|
#include "replay/replaycamera.h"
|
||
|
#include "replay/replay_ragdoll.h"
|
||
|
#include "replay/iclientreplay.h"
|
||
|
#include "replay/ireplayscreenshotsystem.h"
|
||
|
#include "replay/ireplaysystem.h"
|
||
|
#include "replay/ienginereplay.h"
|
||
|
#include "replay/ireplaymoviemanager.h"
|
||
|
#include "replay/vgui/replayconfirmquitdlg.h"
|
||
|
#include "replay/vgui/replaybrowsermainpanel.h"
|
||
|
#include "replay/vgui/replayinputpanel.h"
|
||
|
#include "replay/vgui/replayperformanceeditor.h"
|
||
|
#include "replayperformanceplaybackhandler.h"
|
||
|
#include "vgui/ILocalize.h"
|
||
|
#include "vgui/ISurface.h"
|
||
|
#include "clientmode.h"
|
||
|
#include "iviewrender.h"
|
||
|
#include "igameevents.h"
|
||
|
#include "replaycamera.h"
|
||
|
#if defined( TF_CLIENT_DLL )
|
||
|
#include "c_tf_gamestats.h"
|
||
|
#endif
|
||
|
#include "steamworks_gamestats.h"
|
||
|
#include "replay_gamestats_shared.h"
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|
||
|
|
||
|
class IReplayScreenshotSystem;
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|
||
|
|
||
|
extern void ReplayUI_OpenReplayRenderOverlay();
|
||
|
extern void ReplayUI_HideRenderOverlay();
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|
||
|
|
||
|
extern IReplayMovieManager *g_pReplayMovieManager;
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|
||
|
|
||
|
class CClientReplayImp : public IClientReplay
|
||
|
{
|
||
|
public:
|
||
|
virtual uint64 GetServerSessionId()
|
||
|
{
|
||
|
return GetSteamWorksSGameStatsUploader().GetServerSessionID();
|
||
|
}
|
||
|
|
||
|
virtual IReplayScreenshotSystem *GetReplayScreenshotSystem()
|
||
|
{
|
||
|
if ( g_pEngineReplay->IsSupportedModAndPlatform() )
|
||
|
return view->GetReplayScreenshotSystem();
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
virtual IReplayPerformancePlaybackHandler *GetPerformancePlaybackHandler()
|
||
|
{
|
||
|
return g_pReplayPerformancePlaybackHandler;
|
||
|
}
|
||
|
|
||
|
virtual bool CacheReplayRagdolls( const char* pFilename, int nStartTick )
|
||
|
{
|
||
|
return Replay_CacheRagdolls( pFilename, nStartTick );
|
||
|
}
|
||
|
|
||
|
virtual void OnSaveReplay( ReplayHandle_t hNewReplay, bool bShowInputDlg )
|
||
|
{
|
||
|
if ( bShowInputDlg )
|
||
|
{
|
||
|
// Get a name for the replay, saves to disk, add thumbnail to replay browser
|
||
|
ShowReplayInputPanel( hNewReplay );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// Just add the thumbnail if the replay browser exists
|
||
|
CReplayBrowserPanel* pReplayBrowser = ReplayUI_GetBrowserPanel();
|
||
|
if ( pReplayBrowser )
|
||
|
{
|
||
|
pReplayBrowser->OnSaveReplay( hNewReplay );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Fire a message the game DLL can intercept (for achievements, etc).
|
||
|
IGameEvent *event = gameeventmanager->CreateEvent( "replay_saved" );
|
||
|
if ( event )
|
||
|
{
|
||
|
gameeventmanager->FireEventClientSide( event );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
virtual void OnDeleteReplay( ReplayHandle_t hReplay )
|
||
|
{
|
||
|
CReplayBrowserPanel* pReplayBrowser = ReplayUI_GetBrowserPanel();
|
||
|
if ( pReplayBrowser )
|
||
|
{
|
||
|
pReplayBrowser->OnDeleteReplay( hReplay );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
virtual void DisplayReplayMessage( const char *pLocalizeStr, bool bUrgent, bool bDlg, const char *pSound )
|
||
|
{
|
||
|
// Display a message?
|
||
|
if ( !pLocalizeStr || !pLocalizeStr[0] )
|
||
|
return;
|
||
|
|
||
|
g_pClientMode->DisplayReplayMessage( pLocalizeStr, -1.0f, bUrgent, pSound, bDlg );
|
||
|
}
|
||
|
|
||
|
virtual void DisplayReplayMessage( const wchar_t *pText, bool bUrgent, bool bDlg, const char *pSound )
|
||
|
{
|
||
|
if ( !pText || !pText[0] )
|
||
|
return;
|
||
|
|
||
|
const int nLen = wcslen( pText ) + 1;
|
||
|
char *pAnsi = new char[ nLen ];
|
||
|
g_pVGuiLocalize->ConvertUnicodeToANSI( pText, pAnsi, nLen );
|
||
|
|
||
|
g_pClientMode->DisplayReplayMessage( pAnsi, -1.0f, bUrgent, pSound, bDlg );
|
||
|
}
|
||
|
|
||
|
virtual bool OnConfirmQuit()
|
||
|
{
|
||
|
return ReplayUI_ShowConfirmQuitDlg();
|
||
|
}
|
||
|
|
||
|
virtual void OnRenderStart()
|
||
|
{
|
||
|
ReplayUI_OpenReplayRenderOverlay();
|
||
|
}
|
||
|
|
||
|
virtual void OnRenderComplete( const RenderMovieParams_t &RenderParams, bool bCancelled, bool bSuccess, bool bShowBrowser )
|
||
|
{
|
||
|
ReplayUI_HideRenderOverlay();
|
||
|
|
||
|
if ( bShowBrowser )
|
||
|
{
|
||
|
ReplayUI_ReloadBrowser();
|
||
|
}
|
||
|
|
||
|
// Upload a row to the OGS now that rendering has completed
|
||
|
GetReplayGameStatsHelper().SW_ReplayStats_WriteRenderDataEnd( RenderParams, bCancelled ? "cancelled" : bSuccess ? "success" : "failed" );
|
||
|
}
|
||
|
|
||
|
virtual void InitPerformanceEditor( ReplayHandle_t hReplay )
|
||
|
{
|
||
|
ReplayUI_InitPerformanceEditor( hReplay );
|
||
|
}
|
||
|
|
||
|
virtual void HidePerformanceEditor()
|
||
|
{
|
||
|
ReplayUI_ClosePerformanceEditor();
|
||
|
}
|
||
|
|
||
|
virtual bool ShouldRender()
|
||
|
{
|
||
|
extern ConVar replay_enablerenderpreview;
|
||
|
return !g_pReplayMovieManager->IsRendering() || replay_enablerenderpreview.GetBool();
|
||
|
}
|
||
|
|
||
|
virtual void PlaySound( const char *pSound )
|
||
|
{
|
||
|
if ( g_pVGuiSurface )
|
||
|
{
|
||
|
g_pVGuiSurface->PlaySound( pSound );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
virtual void UploadOgsData( KeyValues *pData, bool bIncludeTimeField )
|
||
|
{
|
||
|
GetReplayGameStatsHelper().UploadError( pData, bIncludeTimeField );
|
||
|
}
|
||
|
|
||
|
virtual bool ShouldCompletePendingReplay( IGameEvent *pEvent )
|
||
|
{
|
||
|
#if defined( TF_CLIENT_DLL )
|
||
|
return !( pEvent->GetInt( "death_flags" ) & TF_DEATH_FEIGN_DEATH );
|
||
|
#else
|
||
|
return true;
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
virtual void OnPlaybackComplete( ReplayHandle_t hReplay, int iPerformance )
|
||
|
{
|
||
|
ReplayUI_ReloadBrowser( hReplay, iPerformance );
|
||
|
}
|
||
|
|
||
|
virtual IReplayCamera *GetReplayCamera()
|
||
|
{
|
||
|
return ReplayCamera();
|
||
|
}
|
||
|
|
||
|
virtual bool OnEndOfReplayReached()
|
||
|
{
|
||
|
CReplayPerformanceEditorPanel *pEditor = ReplayUI_GetPerformanceEditor();
|
||
|
if ( !pEditor )
|
||
|
return false;
|
||
|
|
||
|
return pEditor->OnEndOfReplayReached();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
static CClientReplayImp s_ClientReplayImp;
|
||
|
EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CClientReplayImp, IClientReplay, CLIENT_REPLAY_INTERFACE_VERSION, s_ClientReplayImp );
|
||
|
|
||
|
#endif // #if defined( REPLAY_ENABLED )
|