diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /engine/engine_replay_int.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'engine/engine_replay_int.cpp')
| -rw-r--r-- | engine/engine_replay_int.cpp | 354 |
1 files changed, 354 insertions, 0 deletions
diff --git a/engine/engine_replay_int.cpp b/engine/engine_replay_int.cpp new file mode 100644 index 0000000..1655bf7 --- /dev/null +++ b/engine/engine_replay_int.cpp @@ -0,0 +1,354 @@ +//========= 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 |