Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Dod gamerules round timer
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "dod_round_timer.h"
#ifdef CLIENT_DLL
#include "iclientmode.h"
#include "vgui_controls/AnimationController.h"
#endif
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
#ifdef CLIENT_DLL
// Use this proxy to flash the round timer whenever the timer is restarted
// because trapping the round start event doesn't work ( the event also flushes
// all hud events and obliterates our TimerFlash event )
static void RecvProxy_TimerPaused( const CRecvProxyData *pData, void *pStruct, void *pOut ) { CDODRoundTimer *pTimer = (CDODRoundTimer *) pStruct;
bool bTimerPaused = ( pData->m_Value.m_Int > 0 );
if ( bTimerPaused == false ) { g_pClientMode->GetViewportAnimationController()->StartAnimationSequence( "TimerFlash" ); }
pTimer->InternalSetPaused( bTimerPaused ); }
#endif
LINK_ENTITY_TO_CLASS( dod_round_timer, CDODRoundTimer );
IMPLEMENT_NETWORKCLASS_ALIASED( DODRoundTimer, DT_DODRoundTimer )
BEGIN_NETWORK_TABLE_NOBASE( CDODRoundTimer, DT_DODRoundTimer ) #ifdef CLIENT_DLL
RecvPropInt( RECVINFO( m_bTimerPaused ), 0, RecvProxy_TimerPaused ), RecvPropTime( RECVINFO( m_flTimeRemaining ) ), RecvPropTime( RECVINFO( m_flTimerEndTime ) ),
#else
SendPropBool( SENDINFO( m_bTimerPaused ) ), SendPropTime( SENDINFO( m_flTimeRemaining ) ), SendPropTime( SENDINFO( m_flTimerEndTime ) ),
#endif
END_NETWORK_TABLE()
#ifdef CLIENT_DLL
CDODRoundTimer *g_DODRoundTimer = NULL; #endif
//-----------------------------------------------------------------------------
// Purpose: constructor
//-----------------------------------------------------------------------------
CDODRoundTimer::CDODRoundTimer( void ) { #ifndef CLIENT_DLL
m_bTimerPaused = true; m_flTimeRemaining = 0; m_iTimerMaxLength = 0; #else
g_DODRoundTimer = this; #endif
}
//-----------------------------------------------------------------------------
// Purpose: destructor
//-----------------------------------------------------------------------------
CDODRoundTimer::~CDODRoundTimer( void ) { #ifdef CLIENT_DLL
g_DODRoundTimer = NULL; #endif
}
#ifndef CLIENT_DLL
//-----------------------------------------------------------------------------
// Purpose: The timer is always transmitted to clients
//-----------------------------------------------------------------------------
int CDODRoundTimer::UpdateTransmitState() { // ALWAYS transmit to all clients.
return SetTransmitState( FL_EDICT_ALWAYS ); }
#endif
//-----------------------------------------------------------------------------
// Purpose: To set the initial timer duration
//-----------------------------------------------------------------------------
void CDODRoundTimer::SetTimeRemaining( int iTimerSeconds ) { m_flTimeRemaining = (float)iTimerSeconds; m_flTimerEndTime = gpGlobals->curtime + m_flTimeRemaining; m_iTimerMaxLength = iTimerSeconds; }
//-----------------------------------------------------------------------------
// Purpose: Timer is paused at round end, stops the countdown
//-----------------------------------------------------------------------------
void CDODRoundTimer::PauseTimer( void ) { if ( m_bTimerPaused == false ) { m_bTimerPaused = true;
m_flTimeRemaining = m_flTimerEndTime - gpGlobals->curtime; } }
//-----------------------------------------------------------------------------
// Purpose: To start or re-start the timer after a pause
//-----------------------------------------------------------------------------
void CDODRoundTimer::ResumeTimer( void ) { if ( m_bTimerPaused == true ) { m_bTimerPaused = false;
m_flTimerEndTime = gpGlobals->curtime + m_flTimeRemaining; } }
//-----------------------------------------------------------------------------
// Purpose: Gets the seconds left on the timer, paused or not.
//-----------------------------------------------------------------------------
float CDODRoundTimer::GetTimeRemaining( void ) { float flSecondsRemaining;
if ( m_bTimerPaused ) { flSecondsRemaining = m_flTimeRemaining; } else { flSecondsRemaining = m_flTimerEndTime - gpGlobals->curtime; }
if ( flSecondsRemaining < 0 ) flSecondsRemaining = 0;
return flSecondsRemaining; }
//-----------------------------------------------------------------------------
// Purpose: Add seconds to the timer while it is running or paused
//-----------------------------------------------------------------------------
void CDODRoundTimer::AddTimerSeconds( int iSecondsToAdd ) { // do a hud animation indicating that time has been added
if ( m_bTimerPaused ) { m_flTimeRemaining += (float)iSecondsToAdd; } else { m_flTimerEndTime += (float)iSecondsToAdd; }
m_iTimerMaxLength += iSecondsToAdd; }
int CDODRoundTimer::GetTimerMaxLength( void ) { return m_iTimerMaxLength; }
|