diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 0e26013152..631e45d0ec 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -13483,5 +13483,16 @@
Value
0
+ RetrieveNeighboringRegion
+
diff --git a/indra/newview/llfloaterpathfindingconsole.cpp b/indra/newview/llfloaterpathfindingconsole.cpp
index 1b948c442b..c54f6a1ffe 100644
--- a/indra/newview/llfloaterpathfindingconsole.cpp
+++ b/indra/newview/llfloaterpathfindingconsole.cpp
@@ -45,6 +45,7 @@
#include "llviewerregion.h"
#include "llviewerwindow.h"
#include "llviewercamera.h"
+#include "llviewercontrol.h"
#include "LLPathingLib.h"
@@ -432,7 +433,8 @@ LLFloaterPathfindingConsole::LLFloaterPathfindingConsole(const LLSD& pSeed)
mNavMeshCnt(0),
mHasStartPoint(false),
mHasEndPoint(false),
- mIsRegionFrozen(false)
+ mIsRegionFrozen(false),
+ mNeighboringRegion( CURRENT_REGION )
{
mSelfHandle.bind(this);
@@ -470,26 +472,43 @@ void LLFloaterPathfindingConsole::onOpen(const LLSD& pKey)
//make sure the region is essentially enabled for navmesh support
std::string capability = "RetrieveNavMeshSrc";
-
- //prep# neighboring navmesh support proto
+
LLViewerRegion* pCurrentRegion = gAgent.getRegion();
std::vector regions;
regions.push_back( pCurrentRegion );
- //pCurrentRegion->getNeighboringRegions( regions );
+ std::vector shiftDirections;
+ shiftDirections.push_back( CURRENT_REGION );
- std::vector shift;
- shift.push_back( CURRENT_REGION );
- //pCurrentRegion->getNeighboringRegionsStatus( shift );
-
- //If the navmesh shift ops and the total region counts do not match - use the current region, only.
- if ( shift.size() != regions.size() )
+ mNeighboringRegion = gSavedSettings.getU32("RetrieveNeighboringRegion");
+ if ( mNeighboringRegion != CURRENT_REGION )
{
- shift.clear();regions.clear();
+ //User wants to pull in a neighboring region
+ std::vector availableRegions;
+ pCurrentRegion->getNeighboringRegionsStatus( availableRegions );
+ //Is the desired region in the available list
+ std::vector::iterator foundElem = std::find(availableRegions.begin(),availableRegions.end(),mNeighboringRegion);
+ if ( foundElem != availableRegions.end() )
+ {
+ LLViewerRegion* pCurrentRegion = gAgent.getRegion();
+ std::vector regionPtrs;
+ pCurrentRegion->getNeighboringRegions( regionPtrs );
+ regions.push_back( regionPtrs[mNeighboringRegion] );
+ shiftDirections.push_back( mNeighboringRegion );
+ }
+ }
+
+
+ //If the navmesh shift ops and the total region counts do not match - use the current region, only.
+ if ( shiftDirections.size() != regions.size() )
+ {
+ shiftDirections.clear();regions.clear();
regions.push_back( pCurrentRegion );
- shift.push_back( CURRENT_REGION );
+ shiftDirections.push_back( CURRENT_REGION );
}
+
int regionCnt = regions.size();
mNavMeshCnt = regionCnt;
+
for ( int i=0; igetCapability( capability );
@@ -499,7 +518,7 @@ void LLFloaterPathfindingConsole::onOpen(const LLSD& pKey)
std::string str = getString("navmesh_fetch_inprogress");
mPathfindingStatus->setText((LLStringExplicit)str);
LLNavMeshStation::getInstance()->setNavMeshDownloadURL( url );
- int dir = shift[i];
+ int dir = shiftDirections[i];
LLNavMeshStation::getInstance()->downloadNavMeshSrc( mNavMeshDownloadObserver[mCurrentMDO].getObserverHandle(), dir );
++mCurrentMDO;
}
diff --git a/indra/newview/llfloaterpathfindingconsole.h b/indra/newview/llfloaterpathfindingconsole.h
index 10fcf26795..2068d2c53f 100644
--- a/indra/newview/llfloaterpathfindingconsole.h
+++ b/indra/newview/llfloaterpathfindingconsole.h
@@ -157,7 +157,7 @@ private:
LLNavMeshDownloadObserver mNavMeshDownloadObserver[10];
int mCurrentMDO;
int mNavMeshCnt;
-
+ U32 mNeighboringRegion;
//Container that is populated and subsequently submitted to the LLPathingSystem for processing
LLPathingLib::PathingPacket mPathData;
bool mHasStartPoint;