diff options
Diffstat (limited to 'game/shared/teamplay_round_timer.h')
| -rw-r--r-- | game/shared/teamplay_round_timer.h | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/game/shared/teamplay_round_timer.h b/game/shared/teamplay_round_timer.h new file mode 100644 index 0000000..93ff1fc --- /dev/null +++ b/game/shared/teamplay_round_timer.h @@ -0,0 +1,176 @@ +//========= 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; } + int GetSetupTimeLength( void ){ return m_nSetupTimeLength; } + +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
\ No newline at end of file |