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.
99 lines
3.0 KiB
99 lines
3.0 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
//=======================================================================================// |
|
|
|
#include "replaysystem.h" |
|
#include "cl_replaymanager.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
//---------------------------------------------------------------------------------------- |
|
|
|
void OnReplayEnableChanged( IConVar *pVar, const char *pOldValue, float flOldValue ); |
|
void OnReplayRecordingChanged( IConVar *pVar, const char *pOldValue, float flOldValue ); |
|
|
|
//---------------------------------------------------------------------------------------- |
|
|
|
// Replicated |
|
ConVar replay_enable( "replay_enable", "0", FCVAR_REPLICATED | FCVAR_DONTRECORD, "Enable Replay recording on server", true, 0, true, 1, OnReplayEnableChanged ); |
|
ConVar replay_recording( "replay_recording", "0", FCVAR_REPLICATED | FCVAR_DONTRECORD | FCVAR_HIDDEN, "", true, 0, true, 1, OnReplayRecordingChanged ); |
|
|
|
ConVar replay_flushinterval( "replay_flushinterval", "15", FCVAR_DONTRECORD | FCVAR_ARCHIVE, "Replay system will flush to disk a maximum of every replay_flushinterval seconds.", true, 1.0f, true, 60.0f ); |
|
|
|
//---------------------------------------------------------------------------------------- |
|
|
|
// |
|
// A little class to keep OnReplayEnableChanged() from recursing unnecessarily |
|
// |
|
class CSimpleCounter |
|
{ |
|
public: |
|
CSimpleCounter() { ++m_nCounter; } |
|
~CSimpleCounter() { --m_nCounter; } |
|
|
|
int GetCounter() const { return m_nCounter; } |
|
|
|
private: |
|
static int m_nCounter; |
|
}; |
|
|
|
int CSimpleCounter::m_nCounter = 0; |
|
|
|
//---------------------------------------------------------------------------------------- |
|
|
|
void OnReplayEnableChanged( IConVar *pVar, const char *pOldValue, float flOldValue ) |
|
{ |
|
// We want to avoid recursing when we SetValue() on replay_enable (ie 'var') |
|
CSimpleCounter counter; |
|
if ( counter.GetCounter() != 1 ) |
|
return; |
|
|
|
if ( !g_pEngine->IsDedicated() ) |
|
return; |
|
|
|
ConVarRef var( pVar ); |
|
if ( (int)flOldValue == var.GetInt() ) |
|
return; |
|
|
|
/* |
|
ConVarRef tv_enable( "tv_enable" ); |
|
if ( var.GetBool() && tv_enable.IsValid() && tv_enable.GetBool() ) |
|
{ |
|
var.SetValue( 0 ); |
|
Warning( "Error: SourceTV is enabled. Please disable SourceTV if you wish to enable Replay.\n" ); |
|
return; |
|
} |
|
*/ |
|
|
|
const int nNewValue = var.GetInt(); |
|
if ( nNewValue ) |
|
{ |
|
g_pServerReplayContext->FlagForConVarSanityCheck(); |
|
} |
|
else |
|
{ |
|
// Reset value - note that the recursion depth counter will keep this from being dumb. |
|
var.SetValue( 0 ); |
|
|
|
// End recording, which will clear the value again. |
|
g_pReplay->SV_EndRecordingSession( false ); |
|
} |
|
|
|
g_pEngine->RecalculateTags(); |
|
} |
|
|
|
void OnReplayRecordingChanged( IConVar *pVar, const char *pOldValue, float flOldValue ) |
|
{ |
|
if ( g_pEngine->IsDedicated() ) |
|
return; |
|
|
|
#if !defined( DEDICATED ) |
|
// If we're playing back a replay, we don't care |
|
if ( g_pEngineClient->IsPlayingReplayDemo() ) |
|
return; |
|
|
|
// Client-only |
|
CL_GetReplayManager()->OnReplayRecordingCvarChanged(); |
|
#endif |
|
}
|
|
|