From 41d9bd0e6d018af9201f376a17ce52f59463e7b9 Mon Sep 17 00:00:00 2001
From: prep <prep@lindenlab.com>
Date: Thu, 16 Feb 2012 15:59:54 -0500
Subject: Path-278 Debug option to download multiple navmeshes to the viewer.

---
 indra/newview/app_settings/settings.xml       | 11 +++++++
 indra/newview/llfloaterpathfindingconsole.cpp | 43 +++++++++++++++++++--------
 indra/newview/llfloaterpathfindingconsole.h   |  2 +-
 3 files changed, 43 insertions(+), 13 deletions(-)

(limited to 'indra')

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 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+	<key>RetrieveNeighboringRegion</key>
+    <map>
+      <key>Comment</key>
+      <string>Download a neighboring region when visualize a navmesh (default val 99 is for the current region).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+	  <integer>6</integer>
+    </map>
 </map>
 </llsd>
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<LLViewerRegion*> regions;
 		regions.push_back( pCurrentRegion );
-		//pCurrentRegion->getNeighboringRegions( regions );
-
-		std::vector<int> shift;
-		shift.push_back( CURRENT_REGION );
-		//pCurrentRegion->getNeighboringRegionsStatus( shift );
+		std::vector<int> shiftDirections;
+		shiftDirections.push_back( CURRENT_REGION );
 
+		mNeighboringRegion = gSavedSettings.getU32("RetrieveNeighboringRegion");
+		if ( mNeighboringRegion != CURRENT_REGION )
+		{
+			//User wants to pull in a neighboring region
+			std::vector<S32> availableRegions;
+			pCurrentRegion->getNeighboringRegionsStatus( availableRegions );
+			//Is the desired region in the available list
+			std::vector<S32>::iterator foundElem = std::find(availableRegions.begin(),availableRegions.end(),mNeighboringRegion); 
+			if ( foundElem != availableRegions.end() )
+			{
+				LLViewerRegion* pCurrentRegion = gAgent.getRegion();
+				std::vector<LLViewerRegion*> 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 ( shift.size() != regions.size() )
+		if ( shiftDirections.size() != regions.size() )
 		{
-			shift.clear();regions.clear();
+			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; i<regionCnt; ++i )
 		{
 			std::string url = regions[i]->getCapability( 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;
-- 
cgit v1.2.3