//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- Vector RandomNavAreaPositionWithin( const Vector &mins, const Vector &maxs, float minimumarea, int maxtries ) { if( maxtries < 0 ) maxtries = 1; Vector random; CNavArea *pArea = NULL; Extent extent; for( int i = 0; i < maxtries; i++ ) { random.Init( mins.x + ((float)rand() / RAND_MAX) * (maxs.x - mins.x), mins.y + ((float)rand() / RAND_MAX) * (maxs.y - mins.y), maxs.z ); pArea = TheNavMesh->GetNearestNavArea( random, false, 10000.0f, false, false ); if( pArea ) { pArea->GetExtent( &extent ); if( extent.Area() >= minimumarea ) break; } // Reset pArea = NULL; } if( !pArea ) { if( g_pynavmesh_debug.GetBool() ) DevMsg("RandomNavAreaPosition: No area found within Mins: %f %f %f, Maxs: %f %f %f, Random: %f %f %f\n", mins.x, mins.y, mins.z, maxs.x, maxs.y, maxs.z, random.x, random.y, random.z); return vec3_origin; } Vector vRandomPoint = pArea->GetRandomPoint(); vRandomPoint.z += 32.0f; if( g_pynavmesh_debug.GetBool() ) DevMsg("RandomNavAreaPosition: Found position %f %f %f\n", vRandomPoint.x, vRandomPoint.y, vRandomPoint.z); return vRandomPoint; }