//----------------------------------------------------------------------------- // Purpose: Finds the first entity within radius distance by class name. // Input : pStartEntity - The entity to start from when doing the search. // szName - Entity class name, ie "info_target". // vecSrc - Center of search radius. // flRadius - Search radius for classname search, 0 to search everywhere. // Output : Returns a pointer to the found entity, NULL if none. //----------------------------------------------------------------------------- CBaseEntity *CGlobalEntityList::FindEntityByClassnameWithin( CBaseEntity *pStartEntity, const char *szName, const Vector &vecSrc, float flRadius ) { // // Check for matching class names within the search radius. // CBaseEntity *pEntity = pStartEntity; float flMaxDist2 = flRadius * flRadius; if (flMaxDist2 == 0) { return gEntList.FindEntityByClassname( pEntity, szName ); } while ((pEntity = gEntList.FindEntityByClassname( pEntity, szName )) != NULL) { if ( !pEntity->edict() ) continue; float flDist2 = (pEntity->GetAbsOrigin() - vecSrc).LengthSqr(); if (flMaxDist2 > flDist2) { return pEntity; } } return NULL; }
//----------------------------------------------------------------------------- // Purpose: Finds the nearest entity by target name or class name within a radius. // Input : pStartEntity - The entity to start from when doing the search. // szName - Entity name to search for. Treated as a target name first, // then as an entity class name, ie "info_target". // vecSrc - Center of search radius. // flRadius - Search radius for classname search, 0 to search everywhere. // pSearchingEntity - The entity that is doing the search. // pActivator - The activator entity if this was called from an input // or Use handler, NULL otherwise. // Output : Returns a pointer to the found entity, NULL if none. //----------------------------------------------------------------------------- CBaseEntity *CGlobalEntityList::FindEntityGenericNearest( const char *szName, const Vector &vecSrc, float flRadius, CBaseEntity *pSearchingEntity, CBaseEntity *pActivator, CBaseEntity *pCaller ) { CBaseEntity *pEntity = NULL; pEntity = gEntList.FindEntityByNameNearest( szName, vecSrc, flRadius, pSearchingEntity, pActivator, pCaller ); if (!pEntity) { pEntity = gEntList.FindEntityByClassnameNearest( szName, vecSrc, flRadius ); } return pEntity; }
//----------------------------------------------------------------------------- // Purpose: Finds the first entity by target name or class name within a radius // Input : pStartEntity - The entity to start from when doing the search. // szName - Entity name to search for. Treated as a target name first, // then as an entity class name, ie "info_target". // vecSrc - Center of search radius. // flRadius - Search radius for classname search, 0 to search everywhere. // pSearchingEntity - The entity that is doing the search. // pActivator - The activator entity if this was called from an input // or Use handler, NULL otherwise. // Output : Returns a pointer to the found entity, NULL if none. //----------------------------------------------------------------------------- CBaseEntity *CGlobalEntityList::FindEntityGenericWithin( CBaseEntity *pStartEntity, const char *szName, const Vector &vecSrc, float flRadius, CBaseEntity *pSearchingEntity, CBaseEntity *pActivator, CBaseEntity *pCaller, int brushPrecision ) { CBaseEntity *pEntity = NULL; pEntity = gEntList.FindEntityByNameWithin( pStartEntity, szName, vecSrc, flRadius, pSearchingEntity, pActivator, pCaller, brushPrecision ); if (!pEntity) { pEntity = gEntList.FindEntityByClassnameWithin( pStartEntity, szName, vecSrc, flRadius, brushPrecision ); } return pEntity; }
//----------------------------------------------------------------------------- // Purpose: Finds an entity by target name or class name. // Input : pStartEntity - The entity to start from when doing the search. // szName - Entity name to search for. Treated as a target name first, // then as an entity class name, ie "info_target". // vecSrc - Center of search radius. // flRadius - Search radius for classname search, 0 to search everywhere. // pSearchingEntity - The entity that is doing the search. // pActivator - The activator entity if this was called from an input // or Use handler, NULL otherwise. // Output : Returns a pointer to the found entity, NULL if none. //----------------------------------------------------------------------------- CBaseEntity *CGlobalEntityList::FindEntityGeneric( CBaseEntity *pStartEntity, const char *szName, CBaseEntity *pSearchingEntity, CBaseEntity *pActivator, CBaseEntity *pCaller ) { CBaseEntity *pEntity = NULL; pEntity = gEntList.FindEntityByName( pStartEntity, szName, pSearchingEntity, pActivator, pCaller ); if (!pEntity) { pEntity = gEntList.FindEntityByClassname( pStartEntity, szName ); } return pEntity; }
void FrameUpdatePostEntityThink() { g_TouchManager.FrameUpdatePostEntityThink(); if ( m_bRespawnAllEntities ) { m_bRespawnAllEntities = false; // Don't change globalstate owing to deletion here GlobalEntity_EnableStateUpdates( false ); // Remove all entities int nPlayerIndex = -1; CBaseEntity *pEnt = gEntList.FirstEnt(); while ( pEnt ) { CBaseEntity *pNextEnt = gEntList.NextEnt( pEnt ); if ( pEnt->IsPlayer() ) { nPlayerIndex = pEnt->entindex(); } if ( !pEnt->IsEFlagSet( EFL_KEEP_ON_RECREATE_ENTITIES ) ) { UTIL_Remove( pEnt ); } pEnt = pNextEnt; } gEntList.CleanupDeleteList(); GlobalEntity_EnableStateUpdates( true ); // Allows us to immediately re-use the edict indices we just freed to avoid edict overflow engine->AllowImmediateEdictReuse(); // Reset node counter used during load CNodeEnt::m_nNodeCount = 0; CRespawnEntitiesFilter filter; MapEntity_ParseAllEntities( engine->GetMapEntitiesString(), &filter, true ); // Allocate a CBasePlayer for pev, and call spawn if ( nPlayerIndex >= 0 ) { edict_t *pEdict = engine->PEntityOfEntIndex( nPlayerIndex ); ClientPutInServer( pEdict, "unnamed" ); ClientActive( pEdict, false ); CBasePlayer *pPlayer = ( CBasePlayer * )CBaseEntity::Instance( pEdict ); SceneManager_ClientActive( pPlayer ); } } }
int ListCopy( CBaseEntity *pList[], int listMax ) { int count = MIN(listMax, ListCount()); for ( int i = 0; i < count; i++ ) { int entinfoIndex = m_simThinkList[i]; const CEntInfo *pInfo = gEntList.GetEntInfoPtrByIndex( entinfoIndex ); pList[i] = (CBaseEntity *)pInfo->m_pEntity; Assert( gEntList.IsEntityPtr( pList[i] ) ); } return count; }
void ForceRepopulateList() { Clear(); CBaseEntity *pEnt = gEntList.FirstEnt(); while( pEnt ) { if( ShouldAddEntity(pEnt) ) AddEntity(pEnt); pEnt = gEntList.NextEnt( pEnt ); } }
//----------------------------------------------------------------------------- // Purpose: Finds the nearest entity by class name withing given search radius. // Input : szName - Entity name to search for. Treated as a target name first, // then as an entity class name, ie "info_target". // vecSrc - Center of search radius. // flRadius - Search radius for classname search, 0 to search everywhere. // Output : Returns a pointer to the found entity, NULL if none. //----------------------------------------------------------------------------- CBaseEntity *CGlobalEntityList::FindEntityByClassnameNearest( const char *szName, const Vector &vecSrc, float flRadius ) { CBaseEntity *pEntity = NULL; // // Check for matching class names within the search radius. // float flMaxDist2 = flRadius * flRadius; if (flMaxDist2 == 0) { flMaxDist2 = MAX_TRACE_LENGTH * MAX_TRACE_LENGTH; } CBaseEntity *pSearch = NULL; while ((pSearch = gEntList.FindEntityByClassname( pSearch, szName )) != NULL) { if ( !pSearch->edict() ) continue; float flDist2 = (pSearch->GetAbsOrigin() - vecSrc).LengthSqr(); if (flMaxDist2 > flDist2) { pEntity = pSearch; flMaxDist2 = flDist2; } } return pEntity; }
int ListCopy( CBaseEntity *pList[], int listMax ) { int count = MIN(listMax, ListCount()); int out = 0; for ( int i = 0; i < count; i++ ) { // only copy out entities that will simulate or think this frame if ( m_simThinkList[i].nextThinkTick <= gpGlobals->tickcount ) { Assert(m_simThinkList[i].nextThinkTick>=0); int entinfoIndex = m_simThinkList[i].entEntry; const CEntInfo *pInfo = gEntList.GetEntInfoPtrByIndex( entinfoIndex ); pList[out] = (CBaseEntity *)pInfo->m_pEntity; Assert(m_simThinkList[i].nextThinkTick==0 || pList[out]->GetFirstThinkTick()==m_simThinkList[i].nextThinkTick); Assert( gEntList.IsEntityPtr( pList[out] ) ); out++; } } return out; }
//----------------------------------------------------------------------------- // Purpose: Finds the first entity within radius distance by class name. // Input : pStartEntity - The entity to start from when doing the search. // szName - Entity class name, ie "info_target". // vecSrc - Center of search radius. // flRadius - Search radius for classname search, 0 to search everywhere. // Output : Returns a pointer to the found entity, NULL if none. //----------------------------------------------------------------------------- CBaseEntity *CGlobalEntityList::FindEntityByClassnameWithin( CBaseEntity *pStartEntity, const char *szName, const Vector &vecSrc, float flRadius, int brushPrecision ) { // // Check for matching class names within the search radius. // CBaseEntity *pEntity = pStartEntity; float flMaxDist2 = flRadius * flRadius; if (flMaxDist2 == 0) { return gEntList.FindEntityByClassname( pEntity, szName ); } while ((pEntity = gEntList.FindEntityByClassname( pEntity, szName )) != NULL) { if ( !pEntity->edict() ) continue; Vector origin; if ( pEntity->IsBSPModel() && pEntity->CollisionProp()) { if ( brushPrecision == BRUSHPRECISION_NEAREST ) pEntity->CollisionProp()->CalcNearestPoint(vecSrc,&origin); else origin = pEntity->CollisionProp()->GetCollisionOrigin(); } else origin = pEntity->GetAbsOrigin(); float flDist2 = (origin - vecSrc).LengthSqr(); if (flMaxDist2 > flDist2) { return pEntity; } } return NULL; }
void PostClientMessagesSent() { for ( int i = m_list.Count()-1; i >= 0; --i ) { CBaseEntity *pEntity = (CBaseEntity *)gEntList.GetEntInfoPtrByIndex( m_list[i] )->m_pEntity; if ( pEntity ) { pEntity->PostClientMessagesSent(); } } m_list.RemoveAll(); }
//----------------------------------------------------------------------------- // Purpose: Finds the nearest entity by name within a radius // Input : szName - Entity name to search for. // vecSrc - Center of search radius. // flRadius - Search radius for classname search, 0 to search everywhere. // pSearchingEntity - The entity that is doing the search. // pActivator - The activator entity if this was called from an input // or Use handler, NULL otherwise. // Output : Returns a pointer to the found entity, NULL if none. //----------------------------------------------------------------------------- CBaseEntity *CGlobalEntityList::FindEntityByNameNearest( const char *szName, const Vector &vecSrc, float flRadius, CBaseEntity *pSearchingEntity, CBaseEntity *pActivator, CBaseEntity *pCaller, int brushPrecision ) { CBaseEntity *pEntity = NULL; // // Check for matching class names within the search radius. // float flMaxDist2 = flRadius * flRadius; if (flMaxDist2 == 0) { flMaxDist2 = MAX_TRACE_LENGTH * MAX_TRACE_LENGTH; } CBaseEntity *pSearch = NULL; while ((pSearch = gEntList.FindEntityByName( pSearch, szName, pSearchingEntity, pActivator, pCaller )) != NULL) { if ( !pSearch->edict() ) continue; Vector origin; if ( pSearch->IsBSPModel() && pSearch->CollisionProp()) { if ( brushPrecision == BRUSHPRECISION_NEAREST ) pSearch->CollisionProp()->CalcNearestPoint(vecSrc,&origin); else origin = pSearch->CollisionProp()->GetCollisionOrigin(); } else origin = pSearch->GetAbsOrigin(); float flDist2 = (origin - vecSrc).LengthSqr(); if (flMaxDist2 > flDist2) { pEntity = pSearch; flMaxDist2 = flDist2; } } return pEntity; }
//----------------------------------------------------------------------------- // Purpose: Finds the first entity within an extent by class name. // Input : pStartEntity - The entity to start from when doing the search. // szName - Entity class name, ie "info_target". // vecMins - Search mins. // vecMaxs - Search maxs. // Output : Returns a pointer to the found entity, NULL if none. //----------------------------------------------------------------------------- CBaseEntity *CGlobalEntityList::FindEntityByClassnameWithin( CBaseEntity *pStartEntity, const char *szName, const Vector &vecMins, const Vector &vecMaxs ) { // // Check for matching class names within the search radius. // CBaseEntity *pEntity = pStartEntity; while ((pEntity = gEntList.FindEntityByClassname( pEntity, szName )) != NULL) { if ( !pEntity->edict() && !pEntity->IsEFlagSet( EFL_SERVER_ONLY ) ) continue; // check if the aabb intersects the search aabb. Vector entMins, entMaxs; pEntity->CollisionProp()->WorldSpaceAABB( &entMins, &entMaxs ); if ( IsBoxIntersectingBox( vecMins, vecMaxs, entMins, entMaxs ) ) { return pEntity; } } return NULL; }
void LevelShutdownPostEntity() { gEntList.RemoveListenerEntity( this ); Clear(); }
// Called by CEntityListSystem void LevelInitPreEntity() { gEntList.AddListenerEntity( this ); Clear(); }
void CNotifyList::LevelShutdownPreEntity( void ) { gEntList.RemoveListenerEntity( this ); m_notifyList.Purge(); }
void CNotifyList::LevelInitPreEntity() { gEntList.AddListenerEntity( this ); }
#include "globalstate.h" #include "datacache/imdlcache.h" #ifdef HL2_DLL #include "npc_playercompanion.h" #endif // HL2_DLL // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" CBaseEntity *FindPickerEntity( CBasePlayer *pPlayer ); void SceneManager_ClientActive( CBasePlayer *player ); static CUtlVector<IServerNetworkable*> g_DeleteList; CGlobalEntityList gEntList; CBaseEntityList *g_pEntityList = &gEntList; class CAimTargetManager : public IEntityListener { public: // Called by CEntityListSystem void LevelInitPreEntity() { gEntList.AddListenerEntity( this ); Clear(); } void LevelShutdownPostEntity() { gEntList.RemoveListenerEntity( this ); Clear();