//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //============================================================================= #include "cbase.h" #include "func_flag_alert.h" #include "entity_capture_flag.h" #include "tf_player.h" #include "tf_gamerules.h" // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" LINK_ENTITY_TO_CLASS( func_flag_alert, CFuncFlagAlertZone ); BEGIN_DATADESC( CFuncFlagAlertZone ) DEFINE_KEYFIELD( m_bPlaySound, FIELD_BOOLEAN, "playsound" ), DEFINE_KEYFIELD( m_nAlertDelay, FIELD_INTEGER, "alert_delay" ), DEFINE_OUTPUT( m_OnTriggeredByTeam1, "OnTriggeredByTeam1" ), DEFINE_OUTPUT( m_OnTriggeredByTeam2, "OnTriggeredByTeam2" ), END_DATADESC(); //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- CFuncFlagAlertZone::CFuncFlagAlertZone() { for ( int i = 0 ; i < TF_TEAM_COUNT ; i++ ) { m_flNextAlertTime[i] = 0.0f; } m_bPlaySound = true; m_nAlertDelay = 10; } //-----------------------------------------------------------------------------` // Purpose: //----------------------------------------------------------------------------- void CFuncFlagAlertZone::Spawn( void ) { AddSpawnFlags( SF_TRIGGER_ALLOW_ALL ); BaseClass::Spawn(); InitTrigger(); } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CFuncFlagAlertZone::StartTouch( CBaseEntity *pOther ) { if ( !m_bDisabled ) { if ( pOther && pOther->IsPlayer() && ( pOther->GetTeamNumber() != GetTeamNumber() ) ) { CTFPlayer *pPlayer = ToTFPlayer( pOther ); if ( pPlayer && pPlayer->HasTheFlag() ) { int iTeamNum = pPlayer->GetTeamNumber(); if ( gpGlobals->curtime > m_flNextAlertTime[iTeamNum] ) { if ( m_bPlaySound && TFGameRules() ) { int iBroadcastTeam = ( iTeamNum == TF_TEAM_RED ) ? TF_TEAM_BLUE : TF_TEAM_RED; TFGameRules()->BroadcastSound( iBroadcastTeam, "Announcer.SecurityAlert" ); } switch( iTeamNum ) { case TF_TEAM_RED: m_OnTriggeredByTeam1.FireOutput( this, this ); break; case TF_TEAM_BLUE: m_OnTriggeredByTeam2.FireOutput( this, this ); break; default: break; } m_flNextAlertTime[iTeamNum] = gpGlobals->curtime + m_nAlertDelay; } } } } BaseClass::StartTouch( pOther ); }