UTIL_EntitiesInBox

From Valve Developer Community
Jump to: navigation, search
English (en)Deutsch (de)
... Icon-Important.png

UTIL_EntitiesInBox ist ein UTIL, bereitgestellt durch den Sourcecode, um Entities innerhalb einer Box zu finden. Es nimmt eine Entity-Liste, Minimum, Maximum und Flags und liefert eine Anzahl von Entities und eine Liste der Entities.


Benutzung

//-----------------------------------------------------------------------------
// Zweck : Liefert die Anzahl der Entities in der Box plus ein Array von Pointern auf die Entities.
//          
// Input : CBaseEntity - *pList   | Ein Pointer auf ein Array, in dem die Funktion die Pointer auf die Entities speichern wird.
// Input : int - listMax     | Maximale Anzahl der zurückzugebenden Entities.
// Input : Vector - &mins    | Das Minimum der zu prüfenden Box. Weltkoordinaten.
// Input : Vector - &maxs    | Das Maximum der zu prüfenden Box. Weltkoordinaten.
// Input : int - flagmask    | 
// Output: *pList
// Output: int - Liefert die Anzahl der gefundenen Entities
//-----------------------------------------------------------------------------
inline int UTIL_EntitiesInBox( CBaseEntity **pList, int listMax, const Vector &mins, const Vector &maxs, int flagMask )
//-----------------------------------------------------------------------------
// Zweck : Liefert die Anzahl der Entities in der Box.
//          
// Input : Vector - &mins    | Das Minimum der zu prüfenden Box. Weltkoordinaten.
// Input : Vector - &maxs    | Das Maximum der zu prüfenden Box. Weltkoordinaten.
// Input : CFlaggedEntitiesEnum *pEnum    | TODO
// Output: int - Liefert die Anzahl der gefundenen Entities
//-----------------------------------------------------------------------------
int  UTIL_EntitiesInBox( const Vector &mins, const Vector &maxs, CFlaggedEntitiesEnum *pEnum  );

flagmask ist in const.h, Zeilen 97-132, verfügbar

Beispiele

//Erzeugt ein Array mit CBaseEntity-Pointern
CBaseEntity*	pList[20];

//Legt die Pointer in pList und speichert die Anzahl der Entities
int count = UTIL_EntitiesInBox( pList, 20, spawnOrigin + NAI_Hull::Mins( HULL_MEDIUM ), spawnOrigin + NAI_Hull::Maxs( HULL_MEDIUM ), 0 );

//Iteriert über alle möglichen Ziele
for ( int i = 0; i < count; i++ )
{
        //Wenn ein einzelner movetype einer Entity nicht MOVETYPE_VPHYSICS ist, wird der Rest der Schleife übersprungen und am Anfang vortgesetzt
	if ( pList[i]->GetMoveType() != MOVETYPE_VPHYSICS )
		continue;

	if ( PhysGetEntityMass( pList[i] ) > ANTLION_MAKER_BLOCKED_MASS )
	{
		bBlocked = true;
		iNumBlocked++;
		pBlocker = pList[i];

		if ( pTestHint == pNode )
		{
			bChosenHintBlocked = true;
		}

		break;
	}
}
//verwendet die überladene Funktion und liefert nur die Anzahl der Entities.
CBaseEntity *entityList[64];
Vector range(ROLLERMINE_WAKEUP_DIST,ROLLERMINE_WAKEUP_DIST,64);
int boxCount = UTIL_EntitiesInBox( entityList, ARRAYSIZE(entityList), GetAbsOrigin()-range, GetAbsOrigin()+range, FL_NPC );