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:
//
// $NoKeywords: $
//=============================================================================//
#ifndef COUNTDOWN_ANNOUNCER_H
#define COUNTDOWN_ANNOUNCER_H
#ifdef _WIN32
#pragma once
#endif
#include "mathlib/mathlib.h"
#include "tf/tf_gamerules.h"
//=============================================================================
class CCountdownAnnouncer { public: struct TimeSounds { const char *at60; const char *at30; const char *at10; const char *at5; const char *at4; const char *at3; const char *at2; const char *at1; };
CCountdownAnnouncer(const TimeSounds *pTimeSounds) : m_state( Disabled ) , m_pTimeSounds( pTimeSounds ) , m_fTimeRemain( 0 ) , m_iPrevSecondsRemain( 0 ) {}
void Disable() { m_state = Disabled; }
void Start( int durationSec ) { if ( m_state == Running ) return; m_state = Running; m_fTimeRemain = (float) durationSec; m_iPrevSecondsRemain = 1 + (int) m_fTimeRemain; Tick( 0 ); }
// returns true once when time expires
bool Tick( float delta ) { assert( delta >= 0 ); switch ( m_state ) { case Disabled: case Expired: break; case Running: { m_fTimeRemain = MAX( 0, m_fTimeRemain - delta ); const int iSecondsRemain = Ceil2Int( m_fTimeRemain ); if ( iSecondsRemain == m_iPrevSecondsRemain ) break; m_iPrevSecondsRemain = iSecondsRemain; switch( iSecondsRemain ) { case 60: BroadcastSound( m_pTimeSounds->at60 ); break; case 30: BroadcastSound( m_pTimeSounds->at30 ); break; case 10: BroadcastSound( m_pTimeSounds->at10 ); break; case 5: BroadcastSound( m_pTimeSounds->at5 ); break; case 4: BroadcastSound( m_pTimeSounds->at4 ); break; case 3: BroadcastSound( m_pTimeSounds->at3 ); break; case 2: BroadcastSound( m_pTimeSounds->at2 ); break; case 1: BroadcastSound( m_pTimeSounds->at1 ); break; default: break; }
if ( iSecondsRemain == 0 ) { Disable(); return true; } break; } } return false; }
bool IsDisabled() const { return m_state == Disabled; }
private: void BroadcastSound( const char* name ) { if ( name && *name ) TFGameRules()->BroadcastSound( 255, name ); }
enum State { Disabled, Running, Expired }; State m_state; const TimeSounds *m_pTimeSounds; float m_fTimeRemain; int m_iPrevSecondsRemain; };
#endif // COUNTDOWN_ANNOUNCER_H
|