summaryrefslogtreecommitdiff
path: root/game/client/replay/cdll_replay.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/replay/cdll_replay.cpp')
-rw-r--r--game/client/replay/cdll_replay.cpp210
1 files changed, 210 insertions, 0 deletions
diff --git a/game/client/replay/cdll_replay.cpp b/game/client/replay/cdll_replay.cpp
new file mode 100644
index 0000000..618edfa
--- /dev/null
+++ b/game/client/replay/cdll_replay.cpp
@@ -0,0 +1,210 @@
+//========= 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 ) \ No newline at end of file