//========= Copyright Valve Corporation, All rights reserved. ============// // //=======================================================================================// #if defined( REPLAY_ENABLED ) #ifndef REPLAYDEMOPLAYER_H #define REPLAYDEMOPLAYER_H #ifdef _WIN32 #pragma once #endif //---------------------------------------------------------------------------------------- #include "replay/ireplaydemoplayer.h" #include "replay/ireplaymovie.h" #include "cl_demo.h" #include "utlstring.h" //---------------------------------------------------------------------------------------- class CReplay; //---------------------------------------------------------------------------------------- class CReplayDemoPlayer : public CDemoPlayer, public IReplayDemoPlayer { public: typedef CDemoPlayer BaseClass; CReplayDemoPlayer(); virtual bool StartPlayback( const char *pFilename, bool bAsTimeDemo ); virtual void StopPlayback(); virtual void OnLastDemoInLoopPlayed(); virtual bool ShouldLoopDemos(); // // IReplayDemoPlayer // virtual void PlayReplay( ReplayHandle_t hReplay, int iPerformance ); virtual void PlayNextReplay(); virtual void ClearReplayList(); virtual void AddReplayToList( ReplayHandle_t hReplay, int iPerformance ); virtual CReplay *GetCurrentReplay(); virtual CReplayPerformance *GetCurrentPerformance(); virtual void PauseReplay(); virtual bool IsReplayPaused(); virtual void ResumeReplay(); virtual void OnSignonStateFull(); // // CDemoPlayer // virtual void OnStopCommand(); virtual netpacket_t *ReadPacket(); virtual float GetPlaybackTimeScale(); private: void DisplayFailedToPlayMsg( int iPerformance ); float CalcMovieLength() const; class CInStartPlaybackGuard { public: CInStartPlaybackGuard( bool &bState ) : m_bState( bState ) { m_bState = true; } ~CInStartPlaybackGuard() { m_bState = false; } bool &m_bState; }; struct PlaybackInfo_t { PlaybackInfo_t() : m_hReplay( REPLAY_HANDLE_INVALID ), m_iPerformance( -1 ), m_nStartTick( -1 ), m_nEndTick( -1 ) {} ReplayHandle_t m_hReplay; int m_iPerformance; int m_nStartTick; int m_nEndTick; }; PlaybackInfo_t *GetCurrentPlaybackInfo(); const PlaybackInfo_t *GetCurrentPlaybackInfo() const; const CReplay *GetCurrentReplay() const; CUtlVector< PlaybackInfo_t * > m_vecReplaysToPlay; IReplayMovie *m_pMovie; int m_nCurReplayIndex; bool m_bInStartPlayback; bool m_bStopCommandEncountered; // We only want to handle OnStopCommand() once per playback float m_flStartRenderTime; bool m_bFullSignonStateReached; }; //---------------------------------------------------------------------------------------- extern IDemoPlayer *g_pReplayDemoPlayer; //---------------------------------------------------------------------------------------- #endif // REPLAYDEMOPLAYER_H #endif // #if defined( REPLAY_ENABLED )