//----------------------------------------------------------------------------- // Purpose: Searches for a hint node that this NPC cares about. If one is // claims that hint node for this NPC so that no other NPCs // try to use it. // // Input : nFlags - Search criterea. Can currently be one or more of the following: // bits_HINT_NODE_VISIBLE - searches for visible hint nodes. // bits_HINT_NODE_RANDOM - calls through the FindHintRandom and builds list of all matching // nodes and picks randomly from among them. Note: Depending on number of hint nodes, this // could be slower, so use with care. // // Output : Returns pointer to hint node if available hint node was found that matches the // given criterea that this NPC also cares about. Otherwise, returns NULL //----------------------------------------------------------------------------- CAI_Hint* CAI_HintManager::FindHint( CAI_BaseNPC *pNPC, Hint_e nHintType, int nFlags, float flMaxDist, const Vector *pMaxDistFrom ) { assert( pNPC != NULL ); if ( pNPC == NULL ) return NULL; CHintCriteria hintCriteria; hintCriteria.SetHintType( nHintType ); hintCriteria.SetFlag( nFlags ); // Using the NPC's hint group? if ( nFlags & bits_HINT_NODE_USE_GROUP ) { hintCriteria.SetGroup( pNPC->GetHintGroup() ); } // Add the search position Vector vecPosition = ( pMaxDistFrom != NULL ) ? (*pMaxDistFrom) : pNPC->GetAbsOrigin(); hintCriteria.AddIncludePosition( vecPosition, flMaxDist ); // If asking for a random node, use random logic instead if ( nFlags & bits_HINT_NODE_RANDOM ) return FindHintRandom( pNPC, vecPosition, hintCriteria ); return FindHint( pNPC, vecPosition, hintCriteria ); }