|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
//----------------------------------------------------------------------------------------
#if defined( REPLAY_ENABLED )
#include "replay/ienginereplay.h"
#include "replay/replayutils.h"
#include "client.h"
#include "server.h"
#include "cl_demo.h"
#include "ivideomode.h"
#include "replayserver.h"
#include "cl_steamauth.h"
#include "host_state.h"
#include "globalvars_base.h"
#include "vgui_baseui_interface.h"
#include "replay_internal.h"
#include "sv_steamauth.h"
#include "lzss.h"
#include "checksum_engine.h"
#if !defined( DEDICATED )
#include "con_nprint.h"
#include "net_chan.h"
#include "download.h"
#include "audio/public/snd_device.h"
#include "audio/private/snd_wave_temp.h"
#endif
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
//-----------------------------------------------------------------------------
class CEngineReplay : public IEngineReplay { public: virtual bool IsSupportedModAndPlatform() { return Replay_IsSupportedModAndPlatform(); }
virtual const char *GetGameDir() { return com_gamedir; }
virtual float GetHostTime() { return host_time; }
virtual int GetHostTickCount() { return host_tickcount; }
virtual int TimeToTicks( float flTime ) { return TIME_TO_TICKS( flTime ); }
virtual float TicksToTime( int nTick ) { return TICKS_TO_TIME( nTick ); }
virtual void Cbuf_AddText( const char *pCmd ) { ::Cbuf_AddText( pCmd ); }
virtual void Cbuf_Execute() { ::Cbuf_Execute(); }
virtual void Host_Disconnect( bool bShowMainMenu ) { ::Host_Disconnect( bShowMainMenu ); }
virtual void HostState_Shutdown() { ::HostState_Shutdown(); }
virtual const char *GetModDir() { return COM_GetModDirectory(); }
virtual bool CopyFile( const char *pSource, const char *pDest ) { return COM_CopyFile( pSource, pDest ); }
virtual bool LZSS_Compress( char *pDest, unsigned int *pDestLen, const char *pSource, unsigned int nSourceLen ) { return COM_BufferToBufferCompress( pDest, pDestLen, pSource, nSourceLen ); }
virtual bool LZSS_Decompress( char *pDest, unsigned int *pDestLen, const char *pSource, unsigned int nSourceLen ) { return COM_BufferToBufferDecompress( pDest, pDestLen, pSource, nSourceLen ); }
virtual bool MD5_HashBuffer( unsigned char pDigest[16], const unsigned char *pBuffer, int nSize, unsigned int pSeed[4] ) { return ::MD5_Hash_Buffer( pDigest, pBuffer, nSize, pSeed != NULL, pSeed ); }
virtual bool ReadDemoHeader( const char *pFilename, demoheader_t &header ) { V_memset( &header, 0, sizeof( header ) );
CDemoFile demofile; if ( !demofile.Open( pFilename, true ) ) return false;
demofile.ReadDemoHeader();
V_memcpy( &header, &demofile.m_DemoHeader, sizeof( header ) ); return true; }
virtual IReplayServer *GetReplayServer() { return replay; }
virtual IServer *GetReplayServerAsIServer() { return replay; }
virtual IServer *GetGameServer() { if ( sv.IsDedicated() ) { return &sv; }
return NULL; }
virtual bool GetSessionRecordBuffer( uint8 **ppSessionBuffer, int *pSize ) { if ( !replay ) { AssertMsg( 0, "Why is this being called when replay is inactive?" ); *ppSessionBuffer = NULL; *pSize = 0; return false; }
*ppSessionBuffer = (uint8 *)replay->m_DemoRecorder.m_DemoFile.m_pBuffer->Base(); *pSize = replay->m_DemoRecorder.m_DemoFile.m_pBuffer->TellPut();
return true; }
virtual void ResetReplayRecordBuffer() { replay->m_DemoRecorder.m_DemoFile.m_pBuffer->SeekPut( CUtlBuffer::SEEK_HEAD, 0 ); }
virtual bool IsDedicated() { return sv.IsDedicated(); }
virtual demoheader_t *GetReplayDemoHeader() { return &replay->m_DemoRecorder.m_DemoFile.m_DemoHeader; }
virtual void RecalculateTags() { sv.RecalculateTags(); }
virtual bool NET_GetHostnameAsIP( const char *pHostname, char *pOut, int nOutSize ) { netadr_t adr; if ( !NET_StringToAdr( pHostname, &adr ) ) return false;
V_strncpy( pOut, adr.ToString( true ), nOutSize );
return true; } };
//-----------------------------------------------------------------------------
#if !defined( DEDICATED )
class CEngineClientReplay : public IEngineClientReplay { public: virtual float GetLastServerTickTime() { return TIME_TO_TICKS( cl.m_flLastServerTickTime ); }
virtual const char *GetLevelName() { return cl.m_szLevelFileName; }
virtual const char *GetLevelNameShort() { return cl.m_szLevelBaseName; }
virtual int GetPlayerSlot() { return cl.m_nPlayerSlot; }
virtual bool IsPlayingReplayDemo() { extern IDemoPlayer *g_pReplayDemoPlayer; return demoplayer == g_pReplayDemoPlayer && demoplayer->IsPlayingBack(); }
virtual INetChannel *GetNetChannel() { return cl.m_NetChannel; }
virtual bool IsConnected() { return cl.IsConnected(); }
virtual bool IsListenServer() { return sv.IsActive(); }
virtual IClientEntityList *GetClientEntityList() { extern IClientEntityList *entitylist; return entitylist; }
virtual IClientReplay *GetClientReplayInt() { extern IClientReplay *g_pClientReplay; return g_pClientReplay; } virtual uint32 GetClientSteamID() { CSteamID steamID = Steam3Client().SteamUser()->GetSteamID(); return steamID.GetAccountID(); }
void Con_NPrintf( int nPos, const char *pFormat, ... ) { va_list argptr; char szText[4096];
va_start ( argptr, pFormat ); Q_vsnprintf( szText, sizeof( szText ), pFormat, argptr ); va_end ( argptr );
::Con_NPrintf( nPos, "%s", szText ); }
virtual CGlobalVarsBase *GetClientGlobalVars() { return &g_ClientGlobalVariables; }
virtual void VGui_PlaySound( const char *pSound ) { ::VGui_PlaySound( pSound ); }
virtual void EngineVGui_ConfirmQuit() { EngineVGui()->ConfirmQuit(); }
virtual bool IsDemoPlayingBack() { return demoplayer->IsPlayingBack(); }
virtual int GetScreenWidth() { return videomode->GetModeStereoWidth(); }
virtual int GetScreenHeight() { return videomode->GetModeStereoHeight(); }
virtual bool IsGamePathValidAndSafeForDownload( const char *pGamePath ) { return CL_IsGamePathValidAndSafeForDownload( pGamePath ); }
virtual bool IsInGame() { return cl.IsActive(); }
virtual void InitSoundRecord() { extern void SND_RecordInit(); SND_RecordInit(); }
virtual void Wave_CreateTmpFile( const char *pFilename ) { ::WaveCreateTmpFile( pFilename, SOUND_DMA_SPEED, 16, 2 ); }
virtual void Wave_AppendTmpFile( const char *pFilename, void *pBuffer, int nNumSamples ) { ::WaveAppendTmpFile( pFilename, pBuffer, 16, nNumSamples ); }
virtual void Wave_FixupTmpFile( const char *pFilename ) { ::WaveFixupTmpFile( pFilename ); } };
#endif // !defined( DEDICATED )
//-----------------------------------------------------------------------------
static CEngineReplay s_EngineReplay; IEngineReplay *g_pEngineReplay = &s_EngineReplay; EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CEngineReplay, IEngineReplay, ENGINE_REPLAY_INTERFACE_VERSION, s_EngineReplay );
#if !defined( DEDICATED )
static CEngineClientReplay s_EngineClientReplay; IEngineClientReplay *g_pEngineClientReplay = &s_EngineClientReplay; EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CEngineClientReplay, IEngineClientReplay, ENGINE_REPLAY_CLIENT_INTERFACE_VERSION, s_EngineClientReplay ); #endif
//-----------------------------------------------------------------------------
#endif
|