diff options
| -rw-r--r-- | indra/newview/llfloaterpathfindingconsole.cpp | 118 | ||||
| -rw-r--r-- | indra/newview/llfloaterpathfindingconsole.h | 8 | ||||
| -rw-r--r-- | indra/newview/llpathfindingmanager.cpp | 27 | ||||
| -rw-r--r-- | indra/newview/llpathfindingmanager.h | 5 | ||||
| -rw-r--r-- | indra/newview/llpathfindingnavmesh.cpp | 65 | ||||
| -rw-r--r-- | indra/newview/llpathfindingnavmesh.h | 34 | ||||
| -rw-r--r-- | indra/newview/llpathfindingnavmeshstatus.cpp | 16 | ||||
| -rw-r--r-- | indra/newview/llpathfindingnavmeshstatus.h | 8 | ||||
| -rw-r--r-- | indra/newview/llpathfindingnavmeshzone.cpp | 130 | ||||
| -rw-r--r-- | indra/newview/llpathfindingnavmeshzone.h | 25 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_pathfinding_console.xml | 86 | 
11 files changed, 399 insertions, 123 deletions
| diff --git a/indra/newview/llfloaterpathfindingconsole.cpp b/indra/newview/llfloaterpathfindingconsole.cpp index 7e86819568..65a558b778 100644 --- a/indra/newview/llfloaterpathfindingconsole.cpp +++ b/indra/newview/llfloaterpathfindingconsole.cpp @@ -129,8 +129,11 @@ BOOL LLFloaterPathfindingConsole::postBuild()  	llassert(mFreezeButton != NULL);
  	mFreezeButton->setCommitCallback(boost::bind(&LLFloaterPathfindingConsole::onFreezeClicked, this));
 -	mPathfindingStatus = findChild<LLTextBase>("pathfinding_status");
 -	llassert(mPathfindingStatus != NULL);
 +	mPathfindingViewerStatus = findChild<LLTextBase>("pathfinding_viewer_status");
 +	llassert(mPathfindingViewerStatus != NULL);
 +
 +	mPathfindingSimulatorStatus = findChild<LLTextBase>("pathfinding_simulator_status");
 +	llassert(mPathfindingSimulatorStatus != NULL);
  	mCharacterWidthSlider = findChild<LLSliderCtrl>("character_width");
  	llassert(mCharacterWidthSlider != NULL);
 @@ -469,7 +472,8 @@ LLFloaterPathfindingConsole::LLFloaterPathfindingConsole(const LLSD& pSeed)  	mShowMaterialVolumesCheckBox(NULL),
  	mShowExclusionVolumesCheckBox(NULL),
  	mShowWorldCheckBox(NULL),
 -	mPathfindingStatus(NULL),
 +	mPathfindingViewerStatus(NULL),
 +	mPathfindingSimulatorStatus(NULL),
  	mViewCharactersButton(NULL),
  	mEditTestTabContainer(NULL),
  	mEditTab(NULL),
 @@ -731,50 +735,126 @@ void LLFloaterPathfindingConsole::updateStatusOnConsoleState()  {
  	static const LLColor4 warningColor = LLUIColorTable::instance().getColor("DrYellow");
 -	std::string statusText("");
 -	LLStyle::Params styleParams;
 +	std::string simulatorStatusText("");
 +	std::string viewerStatusText("");
 +	LLStyle::Params viewerStyleParams;
  	switch (mConsoleState)
  	{
  	case kConsoleStateUnknown :
 -		statusText = getString("navmesh_status_unknown");
 +		simulatorStatusText = getString("navmesh_simulator_status_unknown");
 +		viewerStatusText = getString("navmesh_viewer_status_unknown");
  		break;
  	case kConsoleStateLibraryNotImplemented :
 -		statusText = getString("navmesh_status_library_not_implemented");
 -		styleParams.color = warningColor;
 +		simulatorStatusText = getString("navmesh_simulator_status_unknown");
 +		viewerStatusText = getString("navmesh_viewer_status_library_not_implemented");
 +		viewerStyleParams.color = warningColor;
  		break;
  	case kConsoleStateRegionNotEnabled :
 -		statusText = getString("navmesh_status_region_not_enabled");
 -		styleParams.color = warningColor;
 +		simulatorStatusText = getString("navmesh_simulator_status_unknown");
 +		viewerStatusText = getString("navmesh_viewer_status_region_not_enabled");
 +		viewerStyleParams.color = warningColor;
  		break;
  	case kConsoleStateCheckingVersion :
 -		statusText = getString("navmesh_status_checking_version");
 +		simulatorStatusText = getString("navmesh_simulator_status_unknown");
 +		viewerStatusText = getString("navmesh_viewer_status_checking_version");
  		break;
  	case kConsoleStateDownloading :
 +		simulatorStatusText = getSimulatorStatusText();
  		if (mIsNavMeshUpdating)
  		{
 -			statusText = getString("navmesh_status_updating");
 +			viewerStatusText = getString("navmesh_viewer_status_updating");
  		}
  		else
  		{
 -			statusText = getString("navmesh_status_downloading");
 +			viewerStatusText = getString("navmesh_viewer_status_downloading");
  		}
  		break;
  	case kConsoleStateHasNavMesh :
 -		statusText = getString("navmesh_status_has_navmesh");
 +		simulatorStatusText = getSimulatorStatusText();
 +		viewerStatusText = getString("navmesh_viewer_status_has_navmesh");
  		break;
  	case kConsoleStateError :
 -		statusText = getString("navmesh_status_error");
 -		styleParams.color = warningColor;
 +		simulatorStatusText = getString("navmesh_simulator_status_unknown");
 +		viewerStatusText = getString("navmesh_viewer_status_error");
 +		viewerStyleParams.color = warningColor;
  		break;
  	default :
 -		statusText = getString("navmesh_status_unknown");
 +		simulatorStatusText = getString("navmesh_simulator_status_unknown");
 +		viewerStatusText = getString("navmesh_viewer_status_unknown");
  		llassert(0);
  		break;
  	}
 -	mPathfindingStatus->setText((LLStringExplicit)statusText, styleParams);
 +	mPathfindingViewerStatus->setText((LLStringExplicit)viewerStatusText, viewerStyleParams);
 +	mPathfindingSimulatorStatus->setText((LLStringExplicit)simulatorStatusText);
  }
 + +std::string LLFloaterPathfindingConsole::getSimulatorStatusText() const +{ +	std::string simulatorStatusText("");
 +
 +#ifdef DEPRECATED_UNVERSIONED_NAVMESH
 +	if (LLPathfindingManager::getInstance()->isPathfindingNavMeshVersioningEnabledForCurrentRegionXXX())
 +	{
 +		switch (mNavMeshZone.getNavMeshZoneStatus())
 +		{
 +		case LLPathfindingNavMeshZone::kNavMeshZonePending : 
 +			simulatorStatusText = getString("navmesh_simulator_status_pending");
 +			break;
 +		case LLPathfindingNavMeshZone::kNavMeshZoneBuilding : 
 +			simulatorStatusText = getString("navmesh_simulator_status_building");
 +			break;
 +		case LLPathfindingNavMeshZone::kNavMeshZoneSomePending : 
 +			simulatorStatusText = getString("navmesh_simulator_status_some_pending");
 +			break;
 +		case LLPathfindingNavMeshZone::kNavMeshZoneSomeBuilding : 
 +			simulatorStatusText = getString("navmesh_simulator_status_some_building");
 +			break;
 +		case LLPathfindingNavMeshZone::kNavMeshZonePendingAndBuilding : 
 +			simulatorStatusText = getString("navmesh_simulator_status_pending_and_building");
 +			break;
 +		case LLPathfindingNavMeshZone::kNavMeshZoneComplete : 
 +			simulatorStatusText = getString("navmesh_simulator_status_complete");
 +			break;
 +		default : 
 +			simulatorStatusText = getString("navmesh_simulator_status_unknown");
 +			break;
 +		}
 +	}
 +	else
 +	{
 +		simulatorStatusText = getString("navmesh_simulator_status_region_not_enabled");
 +	}
 +#else // DEPRECATED_UNVERSIONED_NAVMESH
 +	switch (mNavMeshZone.getNavMeshZoneStatus())
 +	{
 +	case LLPathfindingNavMeshZone::kNavMeshZonePending : 
 +		simulatorStatusText = getString("navmesh_simulator_status_pending");
 +		break;
 +	case LLPathfindingNavMeshZone::kNavMeshZoneBuilding : 
 +		simulatorStatusText = getString("navmesh_simulator_status_building");
 +		break;
 +	case LLPathfindingNavMeshZone::kNavMeshZoneSomePending : 
 +		simulatorStatusText = getString("navmesh_simulator_status_some_pending");
 +		break;
 +	case LLPathfindingNavMeshZone::kNavMeshZoneSomeBuilding : 
 +		simulatorStatusText = getString("navmesh_simulator_status_some_building");
 +		break;
 +	case LLPathfindingNavMeshZone::kNavMeshZonePendingAndBuilding : 
 +		simulatorStatusText = getString("navmesh_simulator_status_pending_and_building");
 +		break;
 +	case LLPathfindingNavMeshZone::kNavMeshZoneComplete : 
 +		simulatorStatusText = getString("navmesh_simulator_status_complete");
 +		break;
 +	default : 
 +		simulatorStatusText = getString("navmesh_simulator_status_unknown");
 +		break;
 +	}
 +#endif // DEPRECATED_UNVERSIONED_NAVMESH
 +
 +	return simulatorStatusText;
 +}  void LLFloaterPathfindingConsole::setAgentState(LLPathfindingManager::EAgentState pAgentState)
  {
 @@ -894,5 +974,5 @@ void LLFloaterPathfindingConsole::regionCrossingOccured()  	LLStyle::Params styleParams;	
  	styleParams.color = LLUIColorTable::instance().getColor("DrYellow");
  	statusText = getString("navmesh_update_needed");
 -	mPathfindingStatus->setText((LLStringExplicit)statusText, styleParams);
 +	mPathfindingViewerStatus->setText((LLStringExplicit)statusText, styleParams);
  }
\ No newline at end of file diff --git a/indra/newview/llfloaterpathfindingconsole.h b/indra/newview/llfloaterpathfindingconsole.h index a1973e0985..8c22e5ead7 100644 --- a/indra/newview/llfloaterpathfindingconsole.h +++ b/indra/newview/llfloaterpathfindingconsole.h @@ -147,8 +147,9 @@ private:  	void setConsoleState(EConsoleState pConsoleState); -	void updateControlsOnConsoleState(); -	void updateStatusOnConsoleState(); +	void        updateControlsOnConsoleState(); +	void        updateStatusOnConsoleState(); +	std::string getSimulatorStatusText() const;  	void setAgentState(LLPathfindingManager::EAgentState pAgentState); @@ -165,7 +166,8 @@ private:  	LLCheckBoxCtrl                                *mShowMaterialVolumesCheckBox;  	LLCheckBoxCtrl                                *mShowExclusionVolumesCheckBox;  	LLCheckBoxCtrl                                *mShowWorldCheckBox; -	LLTextBase                                    *mPathfindingStatus; +	LLTextBase                                    *mPathfindingViewerStatus; +	LLTextBase                                    *mPathfindingSimulatorStatus;  	LLButton                                      *mViewCharactersButton;  	LLTabContainer                                *mEditTestTabContainer;  	LLPanel                                       *mEditTab; diff --git a/indra/newview/llpathfindingmanager.cpp b/indra/newview/llpathfindingmanager.cpp index 46bfbe0bb0..e3242de812 100644 --- a/indra/newview/llpathfindingmanager.cpp +++ b/indra/newview/llpathfindingmanager.cpp @@ -41,7 +41,6 @@  #include "llpathfindinglinkset.h"
  #include "llpathfindinglinksetlist.h"
  #include "llhttpnode.h"
 -//#include "llpathfindingnavmeshzone.h" // XXX
  #include <boost/function.hpp>
  #include <boost/signals2.hpp>
 @@ -254,6 +253,14 @@ bool LLPathfindingManager::isPathfindingEnabledForRegion(LLViewerRegion *pRegion  	return !retrieveNavMeshURL.empty();
  }
 +#ifdef DEPRECATED_UNVERSIONED_NAVMESH
 +bool LLPathfindingManager::isPathfindingNavMeshVersioningEnabledForCurrentRegionXXX() const
 +{
 +	std::string navMeshStatusURL = getNavMeshStatusURLForRegion(getCurrentRegion());
 +	return !navMeshStatusURL.empty();
 +}
 +#endif // DEPRECATED_UNVERSIONED_NAVMESH
 +
  bool LLPathfindingManager::isAllowAlterPermanent()
  {
  	return (!isPathfindingEnabledForCurrentRegion() || (getAgentState() == kAgentStateUnfrozen));
 @@ -285,7 +292,9 @@ void LLPathfindingManager::requestGetNavMeshForRegion(LLViewerRegion *pRegion)  #ifdef DEPRECATED_UNVERSIONED_NAVMESH
  		if (navMeshStatusURL.empty())
  		{
 -			sendRequestGetNavMeshForRegion(navMeshPtr, pRegion, navMeshPtr->getNavMeshVersion() + 1U);
 +			LLPathfindingNavMeshStatus navMeshStatus = navMeshPtr->getNavMeshStatusXXX();
 +			navMeshStatus.incrementNavMeshVersionXXX();
 +			sendRequestGetNavMeshForRegion(navMeshPtr, pRegion, navMeshStatus);
  		}
  		else
  		{
 @@ -312,13 +321,13 @@ void LLPathfindingManager::handleNavMeshStatusRequest(const LLPathfindingNavMesh  	}
  	else
  	{
 -		if (navMeshPtr->hasNavMeshVersion(pNavMeshStatus.getVersion()))
 +		if (navMeshPtr->hasNavMeshVersion(pNavMeshStatus))
  		{
 -			navMeshPtr->handleRefresh(pNavMeshStatus.getVersion());
 +			navMeshPtr->handleRefresh(pNavMeshStatus);
  		}
  		else
  		{
 -			sendRequestGetNavMeshForRegion(navMeshPtr, pRegion, pNavMeshStatus.getVersion());
 +			sendRequestGetNavMeshForRegion(navMeshPtr, pRegion, pNavMeshStatus);
  		}
  	}
  }
 @@ -333,7 +342,7 @@ void LLPathfindingManager::handleNavMeshStatusUpdate(const LLPathfindingNavMeshS  	}
  	else
  	{
 -		navMeshPtr->handleNavMeshNewVersion(pNavMeshStatus.getVersion());
 +		navMeshPtr->handleNavMeshNewVersion(pNavMeshStatus);
  	}
  }
 @@ -462,7 +471,7 @@ LLPathfindingManager::ELinksetsRequestStatus LLPathfindingManager::requestSetLin  	return status;
  }
 -void LLPathfindingManager::sendRequestGetNavMeshForRegion(LLPathfindingNavMeshPtr navMeshPtr, LLViewerRegion *pRegion, U32 pNavMeshVersion)
 +void LLPathfindingManager::sendRequestGetNavMeshForRegion(LLPathfindingNavMeshPtr navMeshPtr, LLViewerRegion *pRegion, const LLPathfindingNavMeshStatus &pNavMeshStatus)
  {
  	if ((pRegion == NULL) || !pRegion->isAlive())
  	{
 @@ -478,8 +487,8 @@ void LLPathfindingManager::sendRequestGetNavMeshForRegion(LLPathfindingNavMeshPt  		}
  		else
  		{
 -			navMeshPtr->handleNavMeshStart(pNavMeshVersion);
 -			LLHTTPClient::ResponderPtr responder = new NavMeshResponder(navMeshURL, pNavMeshVersion, navMeshPtr);
 +			navMeshPtr->handleNavMeshStart(pNavMeshStatus);
 +			LLHTTPClient::ResponderPtr responder = new NavMeshResponder(navMeshURL, pNavMeshStatus.getVersion(), navMeshPtr);
  			LLSD postData;
  			LLHTTPClient::post(navMeshURL, postData, responder);
 diff --git a/indra/newview/llpathfindingmanager.h b/indra/newview/llpathfindingmanager.h index 1cfd870897..b458d6513a 100644 --- a/indra/newview/llpathfindingmanager.h +++ b/indra/newview/llpathfindingmanager.h @@ -77,6 +77,9 @@ public:  	bool isPathfindingEnabledForCurrentRegion() const;
  	bool isPathfindingEnabledForRegion(LLViewerRegion *pRegion) const;
 +#ifdef DEPRECATED_UNVERSIONED_NAVMESH
 +	bool isPathfindingNavMeshVersioningEnabledForCurrentRegionXXX() const;
 +#endif // DEPRECATED_UNVERSIONED_NAVMESH
  	bool isAllowAlterPermanent();
  	bool isAllowViewTerrainProperties() const;
 @@ -98,7 +101,7 @@ public:  protected:
  private:
 -	void sendRequestGetNavMeshForRegion(LLPathfindingNavMeshPtr navMeshPtr, LLViewerRegion *pRegion, U32 pNavMeshVersion);
 +	void sendRequestGetNavMeshForRegion(LLPathfindingNavMeshPtr navMeshPtr, LLViewerRegion *pRegion, const LLPathfindingNavMeshStatus &pNavMeshStatus);
  	LLPathfindingNavMeshPtr getNavMeshForRegion(const LLUUID &pRegionUUID);
  	LLPathfindingNavMeshPtr getNavMeshForRegion(LLViewerRegion *pRegion);
 diff --git a/indra/newview/llpathfindingnavmesh.cpp b/indra/newview/llpathfindingnavmesh.cpp index 740d1cde24..10e9abaf0c 100644 --- a/indra/newview/llpathfindingnavmesh.cpp +++ b/indra/newview/llpathfindingnavmesh.cpp @@ -28,6 +28,7 @@  #include "llviewerprecompiledheaders.h"
  #include "lluuid.h"
  #include "llpathfindingnavmesh.h"
 +#include "llpathfindingnavmeshstatus.h"
  #include "llsdserialize.h"
  #include <string>
 @@ -40,11 +41,11 @@  //---------------------------------------------------------------------------
  LLPathfindingNavMesh::LLPathfindingNavMesh(const LLUUID &pRegionUUID)
 -	: mRegionUUID(pRegionUUID),
 +	: mNavMeshStatus(pRegionUUID),
  	mNavMeshRequestStatus(kNavMeshRequestUnknown),
  	mNavMeshSignal(),
 -	mNavMeshData(),
 -	mNavMeshVersion(0U)
 +	mNavMeshData()
 +	
  {
  }
 @@ -57,16 +58,23 @@ LLPathfindingNavMesh::navmesh_slot_t LLPathfindingNavMesh::registerNavMeshListen  	return mNavMeshSignal.connect(pNavMeshCallback);
  }
 -bool LLPathfindingNavMesh::hasNavMeshVersion(U32 pNavMeshVersion) const
 +bool LLPathfindingNavMesh::hasNavMeshVersion(const LLPathfindingNavMeshStatus &pNavMeshStatus) const
  {
 -	return ((mNavMeshVersion == pNavMeshVersion) && 
 +	return ((mNavMeshStatus.getVersion() == pNavMeshStatus.getVersion()) &&
  		((mNavMeshRequestStatus == kNavMeshRequestStarted) || (mNavMeshRequestStatus == kNavMeshRequestCompleted) ||
  		((mNavMeshRequestStatus == kNavMeshRequestChecking) && !mNavMeshData.empty())));
  }
 -void LLPathfindingNavMesh::handleRefresh(U32 pNavMeshVersion)
 +void LLPathfindingNavMesh::handleNavMeshCheckVersion()
 +{
 +	setRequestStatus(kNavMeshRequestChecking);
 +}
 +
 +void LLPathfindingNavMesh::handleRefresh(const LLPathfindingNavMeshStatus &pNavMeshStatus)
  {
 -	llassert(pNavMeshVersion == mNavMeshVersion);
 +	llassert(mNavMeshStatus.getRegionUUID() == pNavMeshStatus.getRegionUUID());
 +	llassert(mNavMeshStatus.getVersion() == pNavMeshStatus.getVersion());
 +	mNavMeshStatus = pNavMeshStatus;
  	if (mNavMeshRequestStatus == kNavMeshRequestChecking)
  	{
  		llassert(!mNavMeshData.empty());
 @@ -74,28 +82,30 @@ void LLPathfindingNavMesh::handleRefresh(U32 pNavMeshVersion)  	}
  	else
  	{
 -		mNavMeshSignal(mNavMeshRequestStatus, mRegionUUID, mNavMeshVersion, mNavMeshData);
 +		sendStatus();
  	}
  }
 -void LLPathfindingNavMesh::handleNavMeshCheckVersion()
 -{
 -	setRequestStatus(kNavMeshRequestChecking);
 -}
 -
 -void LLPathfindingNavMesh::handleNavMeshNewVersion(U32 pNavMeshVersion)
 +void LLPathfindingNavMesh::handleNavMeshNewVersion(const LLPathfindingNavMeshStatus &pNavMeshStatus)
  {
 -	if (mNavMeshVersion != pNavMeshVersion)
 +	llassert(mNavMeshStatus.getRegionUUID() == pNavMeshStatus.getRegionUUID());
 +	if (mNavMeshStatus.getVersion() == pNavMeshStatus.getVersion())
 +	{
 +		mNavMeshStatus = pNavMeshStatus;
 +		sendStatus();
 +	}
 +	else
  	{
  		mNavMeshData.clear();
 -		mNavMeshVersion = pNavMeshVersion;
 +		mNavMeshStatus = pNavMeshStatus;
  		setRequestStatus(kNavMeshRequestNeedsUpdate);
  	}
  }
 -void LLPathfindingNavMesh::handleNavMeshStart(U32 pNavMeshVersion)
 +void LLPathfindingNavMesh::handleNavMeshStart(const LLPathfindingNavMeshStatus &pNavMeshStatus)
  {
 -	mNavMeshVersion = pNavMeshVersion;
 +	llassert(mNavMeshStatus.getRegionUUID() == pNavMeshStatus.getRegionUUID());
 +	mNavMeshStatus = pNavMeshStatus;
  	setRequestStatus(kNavMeshRequestStarted);
  }
 @@ -114,8 +124,9 @@ void LLPathfindingNavMesh::handleNavMeshResult(const LLSD &pContent, U32 pNavMes  		}
  	}
 -	if (mNavMeshVersion == pNavMeshVersion)
 +	if (mNavMeshStatus.getVersion() == pNavMeshVersion)
  	{
 +		ENavMeshRequestStatus status;
  		if ( pContent.has(NAVMESH_DATA_FIELD) )
  		{
  			const LLSD::Binary &value = pContent.get(NAVMESH_DATA_FIELD).asBinary();
 @@ -128,14 +139,14 @@ void LLPathfindingNavMesh::handleNavMeshResult(const LLSD &pContent, U32 pNavMes  			if ( !valid )
  			{
  				llwarns << "Unable to decompress the navmesh llsd." << llendl;
 -				setRequestStatus(kNavMeshRequestError);
 +				status = kNavMeshRequestError;
  			}
  			else
  			{
  				llassert(pUncompressedNavMeshContainer);
  				mNavMeshData.resize( decompBinSize );
  				memcpy( &mNavMeshData[0], &pUncompressedNavMeshContainer[0], decompBinSize );
 -				setRequestStatus(kNavMeshRequestCompleted);
 +				status = kNavMeshRequestCompleted;
  			}					
  			if ( pUncompressedNavMeshContainer )
  			{
 @@ -145,8 +156,9 @@ void LLPathfindingNavMesh::handleNavMeshResult(const LLSD &pContent, U32 pNavMes  		else
  		{
  			llwarns << "No mesh data received" << llendl;
 -			setRequestStatus(kNavMeshRequestError);
 +			status = kNavMeshRequestError;
  		}
 +		setRequestStatus(status);
  	}
  }
 @@ -165,7 +177,7 @@ void LLPathfindingNavMesh::handleNavMeshError()  void LLPathfindingNavMesh::handleNavMeshError(U32 pStatus, const std::string &pReason, const std::string &pURL, U32 pNavMeshVersion)
  {
  	llwarns << "error with request to URL '" << pURL << "' because " << pReason << " (statusCode:" << pStatus << ")" << llendl;
 -	if (mNavMeshVersion == pNavMeshVersion)
 +	if (mNavMeshStatus.getVersion() == pNavMeshVersion)
  	{
  		handleNavMeshError();
  	}
 @@ -174,5 +186,10 @@ void LLPathfindingNavMesh::handleNavMeshError(U32 pStatus, const std::string &pR  void LLPathfindingNavMesh::setRequestStatus(ENavMeshRequestStatus pNavMeshRequestStatus)
  {
  	mNavMeshRequestStatus = pNavMeshRequestStatus;
 -	mNavMeshSignal(mNavMeshRequestStatus, mRegionUUID, mNavMeshVersion, mNavMeshData);
 +	sendStatus();
 +}
 +
 +void LLPathfindingNavMesh::sendStatus()
 +{
 +	mNavMeshSignal(mNavMeshRequestStatus, mNavMeshStatus, mNavMeshData);
  }
 diff --git a/indra/newview/llpathfindingnavmesh.h b/indra/newview/llpathfindingnavmesh.h index 46a114439a..290f7a2cdf 100644 --- a/indra/newview/llpathfindingnavmesh.h +++ b/indra/newview/llpathfindingnavmesh.h @@ -29,7 +29,6 @@  #define LL_LLPATHFINDINGNAVMESH_H
  #include "llsd.h"
 -#include "lluuid.h"
  #include <string>
 @@ -37,14 +36,13 @@  #include <boost/function.hpp>
  #include <boost/signals2.hpp>
 -class LLSD;
 +#include "llpathfindingnavmeshstatus.h"
 +
 +class LLUUID;
  class LLPathfindingNavMesh;
  typedef boost::shared_ptr<LLPathfindingNavMesh> LLPathfindingNavMeshPtr;
 -// XXX stinson 03/12/2012 : This definition is in place to support an older version of the pathfinding simulator that does not have versioned information
 -#define DEPRECATED_UNVERSIONED_NAVMESH
 -
  class LLPathfindingNavMesh
  {
  public:
 @@ -58,9 +56,9 @@ public:  		kNavMeshRequestError
  	} ENavMeshRequestStatus;
 -	typedef boost::function<void (ENavMeshRequestStatus, const LLUUID &, U32, const LLSD::Binary &)>         navmesh_callback_t;
 -	typedef boost::signals2::signal<void (ENavMeshRequestStatus, const LLUUID &, U32, const LLSD::Binary &)> navmesh_signal_t;
 -	typedef boost::signals2::connection                                                                      navmesh_slot_t;
 +	typedef boost::function<void (ENavMeshRequestStatus, const LLPathfindingNavMeshStatus &, const LLSD::Binary &)>         navmesh_callback_t;
 +	typedef boost::signals2::signal<void (ENavMeshRequestStatus, const LLPathfindingNavMeshStatus &, const LLSD::Binary &)> navmesh_signal_t;
 +	typedef boost::signals2::connection                                                                                     navmesh_slot_t;
  	LLPathfindingNavMesh(const LLUUID &pRegionUUID);
  	virtual ~LLPathfindingNavMesh();
 @@ -68,15 +66,15 @@ public:  	navmesh_slot_t registerNavMeshListener(navmesh_callback_t pNavMeshCallback);
  #ifdef DEPRECATED_UNVERSIONED_NAVMESH
 -	U32  getNavMeshVersion() const {return mNavMeshVersion;};
 +	const LLPathfindingNavMeshStatus &getNavMeshStatusXXX() const {return mNavMeshStatus;};
  #endif // DEPRECATED_UNVERSIONED_NAVMESH
 -	bool hasNavMeshVersion(U32 pNavMeshVersion) const;
 +	bool hasNavMeshVersion(const LLPathfindingNavMeshStatus &pNavMeshStatus) const;
  	void handleNavMeshCheckVersion();
 -	void handleRefresh(U32 pNavMeshVersion);
 -	void handleNavMeshNewVersion(U32 pNavMeshVersion);
 -	void handleNavMeshStart(U32 pNavMeshVersion);
 +	void handleRefresh(const LLPathfindingNavMeshStatus &pNavMeshStatus);
 +	void handleNavMeshNewVersion(const LLPathfindingNavMeshStatus &pNavMeshStatus);
 +	void handleNavMeshStart(const LLPathfindingNavMeshStatus &pNavMeshStatus);
  	void handleNavMeshResult(const LLSD &pContent, U32 pNavMeshVersion);
  	void handleNavMeshNotEnabled();
  	void handleNavMeshError();
 @@ -86,12 +84,12 @@ protected:  private:
  	void setRequestStatus(ENavMeshRequestStatus pNavMeshRequestStatus);
 +	void sendStatus();
 -	LLUUID                mRegionUUID;
 -	ENavMeshRequestStatus mNavMeshRequestStatus;
 -	navmesh_signal_t      mNavMeshSignal;
 -	LLSD::Binary          mNavMeshData;
 -	U32                   mNavMeshVersion;
 +	LLPathfindingNavMeshStatus mNavMeshStatus;
 +	ENavMeshRequestStatus      mNavMeshRequestStatus;
 +	navmesh_signal_t           mNavMeshSignal;
 +	LLSD::Binary               mNavMeshData;
  };
  #endif // LL_LLPATHFINDINGNAVMESH_H
 diff --git a/indra/newview/llpathfindingnavmeshstatus.cpp b/indra/newview/llpathfindingnavmeshstatus.cpp index 2ef892c8cd..0ba28e0297 100644 --- a/indra/newview/llpathfindingnavmeshstatus.cpp +++ b/indra/newview/llpathfindingnavmeshstatus.cpp @@ -48,6 +48,14 @@ const std::string LLPathfindingNavMeshStatus::sStatusRepending("repending");  // LLPathfindingNavMeshStatus
  //---------------------------------------------------------------------------
 +LLPathfindingNavMeshStatus::LLPathfindingNavMeshStatus()
 +	: mIsValid(false),
 +	mRegionUUID(),
 +	mVersion(0U),
 +	mStatus(kComplete)
 +{
 +}
 +
  LLPathfindingNavMeshStatus::LLPathfindingNavMeshStatus(const LLUUID &pRegionUUID)
  	: mIsValid(false),
  	mRegionUUID(pRegionUUID),
 @@ -127,19 +135,19 @@ void LLPathfindingNavMeshStatus::parseStatus(const LLSD &pContent)  	std::string status = pContent.get(STATUS_FIELD).asString();
  #endif // DEPRECATED_STATE_FIELD
 -	if (LLStringUtil::compareStrings(status, sStatusPending))
 +	if (LLStringUtil::compareStrings(status, sStatusPending) == 0)
  	{
  		mStatus = kPending;
  	}
 -	else if (LLStringUtil::compareStrings(status, sStatusBuilding))
 +	else if (LLStringUtil::compareStrings(status, sStatusBuilding) == 0)
  	{
  		mStatus = kBuilding;
  	}
 -	else if (LLStringUtil::compareStrings(status, sStatusComplete))
 +	else if (LLStringUtil::compareStrings(status, sStatusComplete) == 0)
  	{
  		mStatus = kComplete;
  	}
 -	else if (LLStringUtil::compareStrings(status, sStatusRepending))
 +	else if (LLStringUtil::compareStrings(status, sStatusRepending) == 0)
  	{
  		mStatus = kRepending;
  	}
 diff --git a/indra/newview/llpathfindingnavmeshstatus.h b/indra/newview/llpathfindingnavmeshstatus.h index fcc876059d..7147fcdf36 100644 --- a/indra/newview/llpathfindingnavmeshstatus.h +++ b/indra/newview/llpathfindingnavmeshstatus.h @@ -32,6 +32,9 @@  #include <string>
 +// XXX stinson 03/12/2012 : This definition is in place to support an older version of the pathfinding simulator that does not have versioned information
 +#define DEPRECATED_UNVERSIONED_NAVMESH
 +
  class LLSD;
  class LLPathfindingNavMeshStatus
 @@ -45,6 +48,7 @@ public:  		kRepending
  	} ENavMeshStatus;
 +	LLPathfindingNavMeshStatus();
  	LLPathfindingNavMeshStatus(const LLUUID &pRegionUUID);
  	LLPathfindingNavMeshStatus(const LLUUID &pRegionUUID, const LLSD &pContent);
  	LLPathfindingNavMeshStatus(const LLSD &pContent);
 @@ -53,6 +57,10 @@ public:  	LLPathfindingNavMeshStatus &operator =(const LLPathfindingNavMeshStatus &pOther);
 +#ifdef DEPRECATED_UNVERSIONED_NAVMESH
 +	void incrementNavMeshVersionXXX() {++mVersion;};
 +#endif // DEPRECATED_UNVERSIONED_NAVMESH
 +
  	bool           isValid() const        {return mIsValid;};
  	const LLUUID   &getRegionUUID() const {return mRegionUUID;};
  	U32            getVersion() const     {return mVersion;};
 diff --git a/indra/newview/llpathfindingnavmeshzone.cpp b/indra/newview/llpathfindingnavmeshzone.cpp index 8e558c3b00..f871204454 100644 --- a/indra/newview/llpathfindingnavmeshzone.cpp +++ b/indra/newview/llpathfindingnavmeshzone.cpp @@ -50,6 +50,7 @@  LLPathfindingNavMeshZone::LLPathfindingNavMeshZone()
  	: mNavMeshLocationPtrs(),
 +	mNavMeshZoneRequestStatus(kNavMeshZoneRequestUnknown),
  	mNavMeshZoneSignal()
  {
  }
 @@ -132,6 +133,71 @@ void LLPathfindingNavMeshZone::refresh()  	}
  }
 +LLPathfindingNavMeshZone::ENavMeshZoneStatus LLPathfindingNavMeshZone::getNavMeshZoneStatus() const
 +{
 +	bool hasPending = false;
 +	bool hasBuilding = false;
 +	bool hasComplete = false;
 +	bool hasRepending = false;
 +
 +	for (NavMeshLocationPtrs::const_iterator navMeshLocationPtrIter = mNavMeshLocationPtrs.begin();
 +		navMeshLocationPtrIter != mNavMeshLocationPtrs.end(); ++navMeshLocationPtrIter)
 +	{
 +		const NavMeshLocationPtr navMeshLocationPtr = *navMeshLocationPtrIter;
 +
 +		switch (navMeshLocationPtr->getNavMeshStatus())
 +		{
 +		case LLPathfindingNavMeshStatus::kPending :
 +			hasPending = true;
 +			break;
 +		case LLPathfindingNavMeshStatus::kBuilding :
 +			hasBuilding = true;
 +			break;
 +		case LLPathfindingNavMeshStatus::kComplete :
 +			hasComplete = true;
 +			break;
 +		case LLPathfindingNavMeshStatus::kRepending :
 +			hasRepending = true;
 +			break;
 +		default :
 +			hasPending = true;
 +			llassert(0);
 +			break;
 +		}
 +	}
 +
 +	ENavMeshZoneStatus zoneStatus = kNavMeshZoneComplete;
 +	if (hasRepending || (hasPending && hasBuilding))
 +	{
 +		zoneStatus = kNavMeshZonePendingAndBuilding;
 +	}
 +	else if (hasComplete)
 +	{
 +		if (hasPending)
 +		{
 +			zoneStatus = kNavMeshZoneSomePending;
 +		}
 +		else if (hasBuilding)
 +		{
 +			zoneStatus = kNavMeshZoneSomeBuilding;
 +		}
 +		else
 +		{
 +			zoneStatus = kNavMeshZoneComplete;
 +		}
 +	}
 +	else if (hasPending)
 +	{
 +		zoneStatus = kNavMeshZonePending;
 +	}
 +	else if (hasBuilding)
 +	{
 +		zoneStatus = kNavMeshZoneBuilding;
 +	}
 +
 +	return zoneStatus;
 +}
 +
  void LLPathfindingNavMeshZone::handleNavMeshLocation()
  {
  	updateStatus();
 @@ -150,10 +216,10 @@ void LLPathfindingNavMeshZone::updateStatus()  #ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
  	llinfos << "STINSON DEBUG: Navmesh zone update BEGIN" << llendl;
  #endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
 -	for (NavMeshLocationPtrs::iterator navMeshLocationPtrIter = mNavMeshLocationPtrs.begin();
 +	for (NavMeshLocationPtrs::const_iterator navMeshLocationPtrIter = mNavMeshLocationPtrs.begin();
  		navMeshLocationPtrIter != mNavMeshLocationPtrs.end(); ++navMeshLocationPtrIter)
  	{
 -		NavMeshLocationPtr navMeshLocationPtr = *navMeshLocationPtrIter;
 +		const NavMeshLocationPtr navMeshLocationPtr = *navMeshLocationPtrIter;
  #ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
  		llinfos << "STINSON DEBUG:    region #" << navMeshLocationPtr->getDirection() << ": region(" << navMeshLocationPtr->getRegionUUID().asString() << ") status:" << navMeshLocationPtr->getRequestStatus() << llendl;
  #endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
 @@ -227,14 +293,6 @@ void LLPathfindingNavMeshZone::updateStatus()  	{
  		zoneRequestStatus = kNavMeshZoneRequestCompleted;
  #ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
 -		llinfos << "STINSON DEBUG: Navmesh zone update is stitching" << llendl;
 -#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
 -		llassert(LLPathingLib::getInstance() != NULL);
 -		if (LLPathingLib::getInstance() != NULL)
 -		{
 -			LLPathingLib::getInstance()->stitchNavMeshes( gSavedSettings.getBOOL("EnableVBOForNavMeshVisualization") );
 -		}
 -#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
  		llinfos << "STINSON DEBUG: Navmesh zone update is COMPLETED" << llendl;
  #endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
  	}
 @@ -254,7 +312,24 @@ void LLPathfindingNavMeshZone::updateStatus()  		llassert(0);
  	}
 -	mNavMeshZoneSignal(zoneRequestStatus);
 +	if ((mNavMeshZoneRequestStatus != kNavMeshZoneRequestCompleted) &&
 +		(zoneRequestStatus == kNavMeshZoneRequestCompleted))
 +	{
 +#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
 +		llinfos << "STINSON DEBUG: Navmesh zone update is stitching" << llendl;
 +#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
 +		llassert(LLPathingLib::getInstance() != NULL);
 +		if (LLPathingLib::getInstance() != NULL)
 +		{
 +			LLPathingLib::getInstance()->stitchNavMeshes( gSavedSettings.getBOOL("EnableVBOForNavMeshVisualization") );
 +		}
 +#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
 +		llinfos << "STINSON DEBUG: Navmesh zone update stitching is done" << llendl;
 +#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
 +	}
 +
 +	mNavMeshZoneRequestStatus = zoneRequestStatus;
 +	mNavMeshZoneSignal(mNavMeshZoneRequestStatus);
  }
  //---------------------------------------------------------------------------
 @@ -266,6 +341,7 @@ LLPathfindingNavMeshZone::NavMeshLocation::NavMeshLocation(S32 pDirection, navme  	mRegionUUID(),
  	mHasNavMesh(false),
  	mNavMeshVersion(0U),
 +	mNavMeshStatus(LLPathfindingNavMeshStatus::kComplete),
  	mLocationCallback(pLocationCallback),
  	mRequestStatus(LLPathfindingNavMesh::kNavMeshRequestUnknown),
  	mNavMeshSlot()
 @@ -288,7 +364,7 @@ void LLPathfindingNavMeshZone::NavMeshLocation::enable()  	else
  	{
  		mRegionUUID = region->getRegionID();
 -		mNavMeshSlot = LLPathfindingManager::getInstance()->registerNavMeshListenerForRegion(region, boost::bind(&LLPathfindingNavMeshZone::NavMeshLocation::handleNavMesh, this, _1, _2, _3, _4));
 +		mNavMeshSlot = LLPathfindingManager::getInstance()->registerNavMeshListenerForRegion(region, boost::bind(&LLPathfindingNavMeshZone::NavMeshLocation::handleNavMesh, this, _1, _2, _3));
  	}
  }
 @@ -299,8 +375,9 @@ void LLPathfindingNavMeshZone::NavMeshLocation::refresh()  	if (region == NULL)
  	{
  		llassert(mRegionUUID.isNull());
 +		LLPathfindingNavMeshStatus newNavMeshStatus(mRegionUUID);
  		LLSD::Binary nullData;
 -		handleNavMesh(LLPathfindingNavMesh::kNavMeshRequestNotEnabled, mRegionUUID, 0U, nullData);
 +		handleNavMesh(LLPathfindingNavMesh::kNavMeshRequestNotEnabled, newNavMeshStatus, nullData);
  	}
  	else
  	{
 @@ -319,33 +396,38 @@ LLPathfindingNavMesh::ENavMeshRequestStatus LLPathfindingNavMeshZone::NavMeshLoc  	return mRequestStatus;
  }
 -void LLPathfindingNavMeshZone::NavMeshLocation::handleNavMesh(LLPathfindingNavMesh::ENavMeshRequestStatus pNavMeshRequestStatus, const LLUUID &pRegionUUID, U32 pNavMeshVersion, const LLSD::Binary &pNavMeshData)
 +LLPathfindingNavMeshStatus::ENavMeshStatus LLPathfindingNavMeshZone::NavMeshLocation::getNavMeshStatus() const
  {
 -	llassert(mRegionUUID == pRegionUUID);
 -	if (pNavMeshRequestStatus != LLPathfindingNavMesh::kNavMeshRequestCompleted)
 -	{
 -		mRequestStatus = pNavMeshRequestStatus;
 -		mLocationCallback();
 -	}
 -	else if (!mHasNavMesh || (mNavMeshVersion != pNavMeshVersion))
 +	return mNavMeshStatus;
 +}
 +
 +void LLPathfindingNavMeshZone::NavMeshLocation::handleNavMesh(LLPathfindingNavMesh::ENavMeshRequestStatus pNavMeshRequestStatus, const LLPathfindingNavMeshStatus &pNavMeshStatus, const LLSD::Binary &pNavMeshData)
 +{
 +	llassert(mRegionUUID == pNavMeshStatus.getRegionUUID());
 +
 +	if ((pNavMeshRequestStatus == LLPathfindingNavMesh::kNavMeshRequestCompleted) &&
 +		(!mHasNavMesh || (mNavMeshVersion != pNavMeshStatus.getVersion())))
  	{
  		llassert(!pNavMeshData.empty());
 -		mRequestStatus = pNavMeshRequestStatus;
  		mHasNavMesh = true;
 -		mNavMeshVersion = pNavMeshVersion;
 +		mNavMeshVersion = pNavMeshStatus.getVersion();
  		llassert(LLPathingLib::getInstance() != NULL);
  		if (LLPathingLib::getInstance() != NULL)
  		{
  			LLPathingLib::getInstance()->extractNavMeshSrcFromLLSD(pNavMeshData, mDirection);
  		}
 -		mLocationCallback();
  	}
 +
 +	mRequestStatus = pNavMeshRequestStatus;
 +	mNavMeshStatus = pNavMeshStatus.getStatus();
 +	mLocationCallback();
  }
  void LLPathfindingNavMeshZone::NavMeshLocation::clear()
  {
  	mHasNavMesh = false;
  	mRequestStatus = LLPathfindingNavMesh::kNavMeshRequestUnknown;
 +	mNavMeshStatus = LLPathfindingNavMeshStatus::kComplete;
  	if (mNavMeshSlot.connected())
  	{
  		mNavMeshSlot.disconnect();
 diff --git a/indra/newview/llpathfindingnavmeshzone.h b/indra/newview/llpathfindingnavmeshzone.h index 7b6583a663..7f83e9d37b 100644 --- a/indra/newview/llpathfindingnavmeshzone.h +++ b/indra/newview/llpathfindingnavmeshzone.h @@ -31,6 +31,7 @@  #include "llsd.h"
  #include "lluuid.h"
  #include "llpathfindingnavmesh.h"
 +#include "llpathfindingnavmeshstatus.h"
  #include <vector>
 @@ -38,6 +39,8 @@  #include <boost/function.hpp>
  #include <boost/signals2.hpp>
 +class LLPathfindingNavMeshStatus;
 +
  //#define XXX_STINSON_DEBUG_NAVMESH_ZONE
  class LLPathfindingNavMeshZone
 @@ -53,9 +56,18 @@ public:  		kNavMeshZoneRequestError
  	} ENavMeshZoneRequestStatus;
 +	typedef enum {
 +		kNavMeshZonePending,
 +		kNavMeshZoneBuilding,
 +		kNavMeshZoneSomePending,
 +		kNavMeshZoneSomeBuilding,
 +		kNavMeshZonePendingAndBuilding,
 +		kNavMeshZoneComplete
 +	} ENavMeshZoneStatus;
 +
  	typedef boost::function<void (ENavMeshZoneRequestStatus)>         navmesh_zone_callback_t;
  	typedef boost::signals2::signal<void (ENavMeshZoneRequestStatus)> navmesh_zone_signal_t;
 -	typedef boost::signals2::connection                               navmesh_zone_slot_t;
 +	typedef boost::signals2::connection                                                   navmesh_zone_slot_t;
  	LLPathfindingNavMeshZone();
  	virtual ~LLPathfindingNavMeshZone();
 @@ -67,6 +79,8 @@ public:  	void disable();
  	void refresh();
 +	ENavMeshZoneStatus getNavMeshZoneStatus() const;
 +
  protected:
  private:
 @@ -82,6 +96,7 @@ private:  		void disable();
  		LLPathfindingNavMesh::ENavMeshRequestStatus getRequestStatus() const;
 +		LLPathfindingNavMeshStatus::ENavMeshStatus  getNavMeshStatus() const;
  #ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
  		const LLUUID &getRegionUUID() const {return mRegionUUID;};
  		S32          getDirection() const {return mDirection;};
 @@ -90,7 +105,7 @@ private:  	protected:
  	private:
 -		void           handleNavMesh(LLPathfindingNavMesh::ENavMeshRequestStatus pNavMeshRequestStatus, const LLUUID &pRegionUUID, U32 pNavMeshVersion, const LLSD::Binary &pNavMeshData);
 +		void           handleNavMesh(LLPathfindingNavMesh::ENavMeshRequestStatus pNavMeshRequestStatus, const LLPathfindingNavMeshStatus &pNavMeshStatus, const LLSD::Binary &pNavMeshData);
  		void           clear();
  		LLViewerRegion *getRegion() const;
 @@ -99,6 +114,7 @@ private:  		LLUUID                                      mRegionUUID;
  		bool                                        mHasNavMesh;
  		U32                                         mNavMeshVersion;
 +		LLPathfindingNavMeshStatus::ENavMeshStatus  mNavMeshStatus;
  		navmesh_location_callback_t                 mLocationCallback;
  		LLPathfindingNavMesh::ENavMeshRequestStatus mRequestStatus;
  		LLPathfindingNavMesh::navmesh_slot_t        mNavMeshSlot;
 @@ -110,8 +126,9 @@ private:  	void handleNavMeshLocation();
  	void updateStatus();
 -	NavMeshLocationPtrs   mNavMeshLocationPtrs;
 -	navmesh_zone_signal_t mNavMeshZoneSignal;
 +	NavMeshLocationPtrs       mNavMeshLocationPtrs;
 +	ENavMeshZoneRequestStatus mNavMeshZoneRequestStatus;
 +	navmesh_zone_signal_t     mNavMeshZoneSignal;
  };
  #endif // LL_LLPATHFINDINGNAVMESHZONE_H
 diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml index aaf94483df..0373305941 100644 --- a/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml +++ b/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml @@ -2,7 +2,7 @@  <floater      open_positioning="cascading"      can_tear_off="false" -    height="352" +    height="420"      layout="topleft"      name="floater_pathfinding_console"      help_topic="floater_pathfinding_console" @@ -11,19 +11,27 @@      single_instance="true"      title="Pathfinding edit / test"      width="456"> -  <floater.string name="navmesh_status_unknown"></floater.string> -  <floater.string name="navmesh_status_library_not_implemented">Cannot find pathing library implementation.</floater.string> -  <floater.string name="navmesh_status_region_not_enabled">This region is not enabled for pathfinding.</floater.string> -  <floater.string name="navmesh_status_checking_version">Checking the status of the navmesh ...</floater.string> -  <floater.string name="navmesh_status_downloading">Downloading the navmesh ...</floater.string> -  <floater.string name="navmesh_status_updating">The navmesh has changed on the server. Downloading the latest navmesh ...</floater.string> -  <floater.string name="navmesh_status_has_navmesh">Navmesh received.</floater.string> -  <floater.string name="navmesh_status_error">Unable to download navmesh successfully.</floater.string> +  <floater.string name="navmesh_viewer_status_unknown"></floater.string> +  <floater.string name="navmesh_viewer_status_library_not_implemented">Cannot find pathing library implementation.</floater.string> +  <floater.string name="navmesh_viewer_status_region_not_enabled">This region is not enabled for pathfinding.</floater.string> +  <floater.string name="navmesh_viewer_status_checking_version">Checking the status of the navmesh.</floater.string> +  <floater.string name="navmesh_viewer_status_downloading">Downloading the navmesh.</floater.string> +  <floater.string name="navmesh_viewer_status_updating">The navmesh has changed on the server. Downloading the latest navmesh.</floater.string> +  <floater.string name="navmesh_viewer_status_has_navmesh">Latest navmesh has been downloaded.</floater.string> +  <floater.string name="navmesh_viewer_status_error">Unable to download navmesh successfully.</floater.string> +  <floater.string name="navmesh_simulator_status_unknown"></floater.string> +  <floater.string name="navmesh_simulator_status_region_not_enabled">This region does not expose the navmesh status.</floater.string> +  <floater.string name="navmesh_simulator_status_pending">Navmesh has pending changes.</floater.string> +  <floater.string name="navmesh_simulator_status_building">Navmesh is building.</floater.string> +  <floater.string name="navmesh_simulator_status_some_pending">Some navmesh regions have pending changes.</floater.string> +  <floater.string name="navmesh_simulator_status_some_building">Some navmesh regions are building.</floater.string> +  <floater.string name="navmesh_simulator_status_pending_and_building">Some navmesh regions have pending changes and others are building.</floater.string> +  <floater.string name="navmesh_simulator_status_complete">Navmesh is up-to-date.</floater.string>    <floater.string name="pathing_choose_start_and_end_points">Please choose start and end points.</floater.string>    <floater.string name="pathing_choose_start_point">Please choose start point.</floater.string>    <floater.string name="pathing_choose_end_point">Please choose end point.</floater.string>    <floater.string name="pathing_path_valid">Path is shown in blue.</floater.string> -  <floater.string name="navmesh_update_needed">Region boundary hit, navmesh may not be accurate. Update.</floater.string> +  <floater.string name="navmesh_update_needed">Region boundary hit, navmesh may not be accurate.</floater.string>    <text        height="13"        word_wrap="true" @@ -56,7 +64,7 @@        follows="left|top"        layout="topleft"        left="35" -      width="208"> +      width="188">      Show walkability map:    </text>    <combo_box @@ -157,7 +165,51 @@          left="0"          top_pad="5"          width="200"> -      Status +      Viewer status +    </text> +    <text +        height="40" +        word_wrap="true" +        use_ellipses="false" +        type="string" +        text_color="LabelTextColor" +        length="1" +        follows="left|top" +        layout="topleft" +        left="0" +        name="pathfinding_viewer_status" +        top_pad="8" +        width="200"> +    </text> +  </panel> +  <view_border +      bevel_style="none" +      follows="top|left" +      layout="topleft" +      left="14" +      height="0" +      width="200" +      top_pad="0" +      visible="true" /> +  <panel +      border="false" +      bevel_style="none" +      follows="left|top" +      layout="topleft" +      height="73" +      width="200"> +    <text +        height="13" +        word_wrap="true" +        use_ellipses="false" +        type="string" +        text_color="LabelTextColor" +        length="1" +        layout="topleft" +        left="0" +        top_pad="5" +        width="200"> +      Simulator status      </text>      <text          height="40" @@ -169,7 +221,7 @@          follows="left|top"          layout="topleft"          left="0" -        name="pathfinding_status" +        name="pathfinding_simulator_status"          top_pad="8"          width="200">      </text> @@ -210,7 +262,7 @@        layout="topleft"        left="230"        top="35" -      height="305" +      height="373"        width="214"        visible="true" />    <tab_container @@ -220,7 +272,7 @@        name="edit_test_tab_container"        left="227"        top="14" -      height="327" +      height="395"        width="218">      <panel          border="false" @@ -294,7 +346,7 @@            line_spacing.multiple="1.5"            name="freeze_label"            top_pad="23" -          height="26" +          height="32"            width="190">          Prevent object / terrain changes and update the navmesh:        </text> @@ -306,7 +358,7 @@            label="Freeze"            layout="topleft"            name="enter_frozen_mode" -          top_pad="9" +          top_pad="3"            width="116"/>      </panel>      <panel | 
