/** * Build trivial path when start and goal are in the same nav area */ bool CNavPath::BuildTrivialPath( const Vector *start, const Vector *goal ) { m_segmentCount = 0; CNavArea *startArea = TheNavAreaGrid.GetNearestNavArea( start ); if (startArea == NULL) return false; CNavArea *goalArea = TheNavAreaGrid.GetNearestNavArea( goal ); if (goalArea == NULL) return false; m_segmentCount = 2; m_path[0].area = startArea; m_path[0].pos.x = start->x; m_path[0].pos.y = start->y; m_path[0].pos.z = startArea->GetZ( start ); m_path[0].ladder = NULL; m_path[0].how = NUM_TRAVERSE_TYPES; m_path[1].area = goalArea; m_path[1].pos.x = goal->x; m_path[1].pos.y = goal->y; m_path[1].pos.z = goalArea->GetZ( goal ); m_path[1].ladder = NULL; m_path[1].how = NUM_TRAVERSE_TYPES; return true; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- Vector NavMeshGetPositionNearestNavArea( const Vector &pos, float beneathlimit, bool bCheckBlocked ) { CNavArea *pArea; //pArea = TheNavMesh->GetNearestNavArea(pos, false, 64.0f); pArea = TheNavMesh->GetNavArea(pos, beneathlimit, bCheckBlocked); if( pArea ) { Vector vAreaPos(pos); vAreaPos.z = pArea->GetZ(pos); return vAreaPos; } return vec3_origin; }