PATH-304: Adding an extra state for the pathfinding console to report that the status of the navmesh is being checked.

meow-7.2.2
Todd Stinson 2012-03-12 19:18:19 -07:00
parent b3197fc12e
commit c990cc71ce
8 changed files with 46 additions and 5 deletions

View File

@ -618,6 +618,9 @@ void LLFloaterPathfindingConsole::onNavMeshZoneCB(LLPathfindingNavMeshZone::ENav
case LLPathfindingNavMeshZone::kNavMeshZoneRequestUnknown :
setConsoleState(kConsoleStateUnknown);
break;
case LLPathfindingNavMeshZone::kNavMeshZoneRequestChecking :
setConsoleState(kConsoleStateCheckingVersion);
break;
case LLPathfindingNavMeshZone::kNavMeshZoneRequestNeedsUpdate :
mIsNavMeshUpdating = true;
mNavMeshZone.refresh();
@ -677,6 +680,7 @@ void LLFloaterPathfindingConsole::updateControlsOnConsoleState()
mHasStartPoint = false;
mHasEndPoint = false;
break;
case kConsoleStateCheckingVersion :
case kConsoleStateDownloading :
case kConsoleStateError :
mShowNavMeshCheckBox->setEnabled(FALSE);
@ -736,6 +740,9 @@ void LLFloaterPathfindingConsole::updateStatusOnConsoleState()
statusText = getString("navmesh_status_region_not_enabled");
styleParams.color = warningColor;
break;
case kConsoleStateCheckingVersion :
statusText = getString("navmesh_status_checking_version");
break;
case kConsoleStateDownloading :
if (mIsNavMeshUpdating)
{

View File

@ -120,6 +120,7 @@ private:
kConsoleStateUnknown,
kConsoleStateLibraryNotImplemented,
kConsoleStateRegionNotEnabled,
kConsoleStateCheckingVersion,
kConsoleStateDownloading,
kConsoleStateHasNavMesh,
kConsoleStateError

View File

@ -274,11 +274,13 @@ void LLPathfindingManager::requestGetNavMeshForRegion(LLViewerRegion *pRegion)
}
else
{
navMeshPtr->handleNavMeshCheckVersion();
LLHTTPClient::ResponderPtr navMeshStatusResponder = new NavMeshStatusResponder(navMeshStatusURL, pRegion);
LLHTTPClient::get(navMeshStatusURL, navMeshStatusResponder);
}
#else // DEPRECATED_UNVERSIONED_NAVMESH
llassert(!navMeshStatusURL.empty());
navMeshPtr->handleNavMeshCheckVersion();
LLHTTPClient::ResponderPtr navMeshStatusResponder = new NavMeshStatusResponder(navMeshStatusURL, pRegion);
LLHTTPClient::get(navMeshStatusURL, navMeshStatusResponder);
#endif // DEPRECATED_UNVERSIONED_NAVMESH
@ -297,7 +299,7 @@ void LLPathfindingManager::handleNavMeshStatusRequest(const LLPathfindingNavMesh
{
if (navMeshPtr->hasNavMeshVersion(pNavMeshStatus.getVersion()))
{
navMeshPtr->handleRefresh();
navMeshPtr->handleRefresh(pNavMeshStatus.getVersion());
}
else
{

View File

@ -56,12 +56,28 @@ LLPathfindingNavMesh::navmesh_slot_t LLPathfindingNavMesh::registerNavMeshListen
bool LLPathfindingNavMesh::hasNavMeshVersion(U32 pNavMeshVersion) const
{
return (((mNavMeshRequestStatus == kNavMeshRequestStarted) || (mNavMeshRequestStatus == kNavMeshRequestCompleted)) && (mNavMeshVersion == pNavMeshVersion));
return ((mNavMeshVersion == pNavMeshVersion) &&
((mNavMeshRequestStatus == kNavMeshRequestStarted) || (mNavMeshRequestStatus == kNavMeshRequestCompleted) ||
((mNavMeshRequestStatus == kNavMeshRequestChecking) && !mNavMeshData.empty())));
}
void LLPathfindingNavMesh::handleRefresh()
void LLPathfindingNavMesh::handleRefresh(U32 pNavMeshVersion)
{
mNavMeshSignal(mNavMeshRequestStatus, mRegionUUID, mNavMeshVersion, mNavMeshData);
llassert(pNavMeshVersion == mNavMeshVersion);
if (mNavMeshRequestStatus == kNavMeshRequestChecking)
{
llassert(!mNavMeshData.empty());
setRequestStatus(kNavMeshRequestCompleted);
}
else
{
mNavMeshSignal(mNavMeshRequestStatus, mRegionUUID, mNavMeshVersion, mNavMeshData);
}
}
void LLPathfindingNavMesh::handleNavMeshCheckVersion()
{
setRequestStatus(kNavMeshRequestChecking);
}
void LLPathfindingNavMesh::handleNavMeshNewVersion(U32 pNavMeshVersion)

View File

@ -50,6 +50,7 @@ class LLPathfindingNavMesh
public:
typedef enum {
kNavMeshRequestUnknown,
kNavMeshRequestChecking,
kNavMeshRequestNeedsUpdate,
kNavMeshRequestStarted,
kNavMeshRequestCompleted,
@ -72,7 +73,8 @@ public:
bool hasNavMeshVersion(U32 pNavMeshVersion) const;
void handleRefresh();
void handleNavMeshCheckVersion();
void handleRefresh(U32 pNavMeshVersion);
void handleNavMeshNewVersion(U32 pNavMeshVersion);
void handleNavMeshStart(U32 pNavMeshVersion);
void handleNavMeshResult(const LLSD &pContent, U32 pNavMeshVersion);

View File

@ -140,6 +140,7 @@ void LLPathfindingNavMeshZone::handleNavMeshLocation()
void LLPathfindingNavMeshZone::updateStatus()
{
bool hasRequestUnknown = false;
bool hasRequestChecking = false;
bool hasRequestNeedsUpdate = false;
bool hasRequestStarted = false;
bool hasRequestCompleted = false;
@ -161,6 +162,9 @@ void LLPathfindingNavMeshZone::updateStatus()
case LLPathfindingNavMesh::kNavMeshRequestUnknown :
hasRequestUnknown = true;
break;
case LLPathfindingNavMesh::kNavMeshRequestChecking :
hasRequestChecking = true;
break;
case LLPathfindingNavMesh::kNavMeshRequestNeedsUpdate :
hasRequestNeedsUpdate = true;
break;
@ -189,6 +193,13 @@ void LLPathfindingNavMeshZone::updateStatus()
zoneRequestStatus = kNavMeshZoneRequestNeedsUpdate;
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
llinfos << "STINSON DEBUG: Navmesh zone update is NEEDS UPDATE" << llendl;
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
}
else if (hasRequestChecking)
{
zoneRequestStatus = kNavMeshZoneRequestChecking;
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
llinfos << "STINSON DEBUG: Navmesh zone update is CHECKING" << llendl;
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
}
else if (hasRequestStarted)

View File

@ -45,6 +45,7 @@ class LLPathfindingNavMeshZone
public:
typedef enum {
kNavMeshZoneRequestUnknown,
kNavMeshZoneRequestChecking,
kNavMeshZoneRequestNeedsUpdate,
kNavMeshZoneRequestStarted,
kNavMeshZoneRequestCompleted,

View File

@ -14,6 +14,7 @@
<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>