//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef PLAYERENUMERATOR_H #define PLAYERENUMERATOR_H #ifdef _WIN32 #pragma once #endif #include "utlvector.h" #include "ehandle.h" #include "ispatialpartition.h" class C_BaseEntity; class CPlayerEnumerator : public IPartitionEnumerator { DECLARE_CLASS_NOBASE( CPlayerEnumerator ); public: //Forced constructor CPlayerEnumerator( float radius, Vector vecOrigin ) { m_flRadiusSquared = radius * radius; m_vecOrigin = vecOrigin; m_Objects.RemoveAll(); } int GetObjectCount() { return m_Objects.Size(); } C_BaseEntity *GetObject( int index ) { if ( index < 0 || index >= GetObjectCount() ) return NULL; return m_Objects[ index ]; } //Actual work code virtual IterationRetval_t EnumElement( IHandleEntity *pHandleEntity ) { C_BaseEntity *pEnt = ClientEntityList().GetBaseEntityFromHandle( pHandleEntity->GetRefEHandle() ); if ( pEnt == NULL ) return ITERATION_CONTINUE; if ( !pEnt->IsPlayer() ) return ITERATION_CONTINUE; Vector deltaPos = pEnt->GetAbsOrigin() - m_vecOrigin; if ( deltaPos.LengthSqr() > m_flRadiusSquared ) return ITERATION_CONTINUE; CHandle< C_BaseEntity > h; h = pEnt; m_Objects.AddToTail( h ); return ITERATION_CONTINUE; } public: //Data members float m_flRadiusSquared; Vector m_vecOrigin; CUtlVector< CHandle< C_BaseEntity > > m_Objects; }; #endif // PLAYERENUMERATOR_H