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.
94 lines
2.5 KiB
94 lines
2.5 KiB
//========= 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 ); |
|
}
|
|
|