Pull and merge from ssh://hg@bitbucket.org/stinson_linden/viewer-development-havokai.

meow-7.2.2
Todd Stinson 2012-02-16 17:12:05 -08:00
commit 29bcae2afe
3 changed files with 44 additions and 14 deletions

View File

@ -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>

View File

@ -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> shiftDirections;
shiftDirections.push_back( CURRENT_REGION );
std::vector<int> 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<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 ( 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; 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;
}

View File

@ -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;