//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: Round timer for team gamerules // //=============================================================================// #ifndef TEAM_ROUND_TIMER_H #define TEAM_ROUND_TIMER_H #ifdef _WIN32 #pragma once #endif #ifdef CLIENT_DLL #define CTeamRoundTimer C_TeamRoundTimer #endif class CTeamRoundTimer : public CBaseEntity { public: DECLARE_CLASS( CTeamRoundTimer, CBaseEntity ); DECLARE_NETWORKCLASS(); CTeamRoundTimer(); virtual ~CTeamRoundTimer(); virtual void Spawn( void ); virtual void Precache( void ); virtual void Activate( void ); // Returns seconds to display. // When paused shows amount of time left once the timer is resumed virtual float GetTimeRemaining( void ); virtual int GetTimerMaxLength( void ); virtual bool ShowInHud( void ); virtual bool StartPaused( void ){ return m_bStartPaused; } bool ShowTimeRemaining( void ) { return m_bShowTimeRemaining; } bool IsDisabled( void ) { return m_bIsDisabled; } int GetTimerState( void ){ return m_nState; } bool IsTimerPaused( void ) { return m_bTimerPaused; } #ifdef CLIENT_DLL void InternalSetPaused( bool bPaused ) { m_bTimerPaused = bPaused; } #else void SetStopWatchTimeStamp( void ); virtual void SetTimeRemaining( int iTimerSeconds ); // Set the initial length of the timer virtual void AddTimerSeconds( int iSecondsToAdd, int iTeamResponsible = TEAM_UNASSIGNED ); // Add time to an already running ( or paused ) timer virtual void PauseTimer( void ); virtual void ResumeTimer( void ); virtual void SetAutoCountdown( bool bAuto ){ m_bAutoCountdown = bAuto; } void SetShowInHud( bool bShowInHUD ) { m_bShowInHUD = bShowInHUD; } int UpdateTransmitState(); void InputEnable( inputdata_t &input ); void InputDisable( inputdata_t &input ); void InputPause( inputdata_t &input ); void InputResume( inputdata_t &input ); void InputSetTime( inputdata_t &input ); void InputAddTime( inputdata_t &input ); void InputRestart( inputdata_t &input ); void InputShowInHUD( inputdata_t &input ); void InputRoundSpawn( inputdata_t &inputdata ); void InputSetMaxTime( inputdata_t &input ); void InputAutoCountdown( inputdata_t &input ); void InputAddTeamTime( inputdata_t &input ); void InputSetSetupTime( inputdata_t &input ); #endif void SetCaptureWatchState( bool bCaptureWatch ); bool IsWatchingTimeStamps( void ) { return m_bInCaptureWatchState; } void SetStopWatch( bool bState ) { m_bStopWatchTimer = bState; } bool IsStopWatchTimer( void ) { return m_bStopWatchTimer; } float GetStopWatchTotalTime( void ) { return m_flTotalTime; } bool IsRoundMaxTimerSet( void ) { return m_nTimerMaxLength > 0; } int GetTimerInitialLength( void ) { return m_nTimerInitialLength; } private: void CalculateOutputMessages( void ); #ifdef CLIENT_DLL virtual void ClientThink(); void OnPreDataChanged( DataUpdateType_t updateType ); void OnDataChanged( DataUpdateType_t updateType ); void SendTimeWarning( int nWarning ); const char *GetTimeWarningSound( int nWarning ); #else void SetState( int nState, bool bFireOutput = true ); void SetTimerThink( int nType ); void EXPORT RoundTimerThink( void ); void EXPORT RoundTimerSetupThink( void ); static void SetActiveTimer( CTeamRoundTimer *pNewlyActive ); #endif private: CNetworkVar( bool, m_bTimerPaused ); CNetworkVar( float, m_flTimeRemaining ); CNetworkVar( float, m_flTimerEndTime ); CNetworkVar( bool, m_bIsDisabled ); CNetworkVar( bool, m_bShowInHUD ); CNetworkVar( int, m_nTimerLength ); // current timer's length (used in the timer panel if no max length is set) CNetworkVar( int, m_nTimerInitialLength ); // initial length of the timer CNetworkVar( int, m_nTimerMaxLength ); // max time the timer can have (0 is no max) CNetworkVar( bool, m_bAutoCountdown ); // automatically count down the end of a round CNetworkVar( int, m_nSetupTimeLength ); // current timer's setup time length (setup time is the time before the round begins) CNetworkVar( int, m_nState ); // RT_STATE_SETUP or RT_STATE_NORMAL CNetworkVar( bool, m_bStartPaused ); // start the timer paused when it spawns CNetworkVar( bool, m_bShowTimeRemaining ); //show how much time is left (default) instead of how much time has passed. CNetworkVar( bool, m_bInCaptureWatchState ); CNetworkVar( float, m_flTotalTime ); CNetworkVar( bool, m_bStopWatchTimer ); bool m_bFireFinished; bool m_bFire5MinRemain; bool m_bFire4MinRemain; bool m_bFire3MinRemain; bool m_bFire2MinRemain; bool m_bFire1MinRemain; bool m_bFire30SecRemain; bool m_bFire10SecRemain; bool m_bFire5SecRemain; bool m_bFire4SecRemain; bool m_bFire3SecRemain; bool m_bFire2SecRemain; bool m_bFire1SecRemain; #ifdef CLIENT_DLL int m_nOldTimerLength; int m_nOldTimerState; #else COutputEvent m_OnRoundStart; COutputEvent m_OnFinished; COutputEvent m_On5MinRemain; COutputEvent m_On4MinRemain; COutputEvent m_On3MinRemain; COutputEvent m_On2MinRemain; COutputEvent m_On1MinRemain; COutputEvent m_On30SecRemain; COutputEvent m_On10SecRemain; COutputEvent m_On5SecRemain; COutputEvent m_On4SecRemain; COutputEvent m_On3SecRemain; COutputEvent m_On2SecRemain; COutputEvent m_On1SecRemain; COutputEvent m_OnSetupStart; COutputEvent m_OnSetupFinished; float m_flNextOvertimeNag; float m_flLastTime; DECLARE_DATADESC(); bool m_bPauseDueToWin; bool m_bResetTimeOnRoundStart; int m_nTimeToUseAfterSetupFinished; #endif }; #ifdef CLIENT_DLL extern CTeamRoundTimer *g_TeamRoundTimer; #endif #endif //TEAM_ROUND_TIMER_H