//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #include "cbase.h" #include "tf_player.h" #include "tf_team.h" #include "tf_gamerules.h" #include "tf_obj.h" #include "tf_obj_empgenerator.h" #include "ndebugoverlay.h" BEGIN_DATADESC( CObjectEMPGenerator ) DEFINE_THINKFUNC( EMPThink ), END_DATADESC() IMPLEMENT_SERVERCLASS_ST(CObjectEMPGenerator, DT_ObjectEMPGenerator) END_SEND_TABLE(); LINK_ENTITY_TO_CLASS(obj_empgenerator, CObjectEMPGenerator); PRECACHE_REGISTER(obj_empgenerator); ConVar obj_empgenerator_health( "obj_empgenerator_health","100", FCVAR_NONE, "EMP Generator health" ); //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- CObjectEMPGenerator::CObjectEMPGenerator() { UseClientSideAnimation(); } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CObjectEMPGenerator::Spawn() { BaseClass::Spawn(); Precache(); SetModel( EMPGENERATOR_MODEL ); SetSolid( SOLID_BBOX ); SetCollisionGroup( TFCOLLISION_GROUP_COMBATOBJECT ); UTIL_SetSize(this, EMPGENERATOR_MINS, EMPGENERATOR_MAXS); m_takedamage = DAMAGE_YES; m_iHealth = obj_empgenerator_health.GetInt(); SetThink( EMPThink ); SetNextThink( gpGlobals->curtime + EMPGENERATOR_RATE ); m_flExpiresAt = gpGlobals->curtime + EMPGENERATOR_LIFETIME; SetType( OBJ_EMPGENERATOR ); m_fObjectFlags |= OF_SUPPRESS_NOTIFY_UNDER_ATTACK | OF_SUPPRESS_TECH_ANALYZER | OF_DONT_AUTO_REPAIR | OF_DONT_PREVENT_BUILD_NEAR_OBJ | OF_DOESNT_NEED_POWER; } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CObjectEMPGenerator::Precache() { PrecacheModel( EMPGENERATOR_MODEL ); } //----------------------------------------------------------------------------- // Purpose: Look for enemies to EMP //----------------------------------------------------------------------------- void CObjectEMPGenerator::EMPThink( void ) { if ( !GetTeam() ) return; // Time to die? if ( gpGlobals->curtime > m_flExpiresAt ) { UTIL_Remove( this ); return; } // Look for nearby enemies to EMP CBaseEntity *pEntity = NULL; for ( CEntitySphereQuery sphere( GetAbsOrigin(), EMPGENERATOR_RADIUS ); ( pEntity = sphere.GetCurrentEntity() ) != NULL; sphere.NextEntity() ) { if ( InSameTeam( pEntity ) ) continue; if ( !pEntity->CanBePoweredUp() ) continue; pEntity->AttemptToPowerup( POWERUP_EMP, EMPGENERATOR_EMP_TIME ); } }