summaryrefslogtreecommitdiff
path: root/indra/newview/llpathfindingnavmesh.cpp
diff options
context:
space:
mode:
authorprep <none@none>2012-03-13 16:55:25 -0400
committerprep <none@none>2012-03-13 16:55:25 -0400
commit1c812c3c6734197835fd8cfaef286f1ad444ec64 (patch)
tree7c4dabb6b86ce523c3ffaadec237ff7e29194d46 /indra/newview/llpathfindingnavmesh.cpp
parentfab57eea612f34ed9d8c8559674ead1760aab42b (diff)
parenta8d5d6f45e34ff965fd9adc1d9824eb2840171a3 (diff)
merge
Diffstat (limited to 'indra/newview/llpathfindingnavmesh.cpp')
-rw-r--r--indra/newview/llpathfindingnavmesh.cpp40
1 files changed, 32 insertions, 8 deletions
diff --git a/indra/newview/llpathfindingnavmesh.cpp b/indra/newview/llpathfindingnavmesh.cpp
index 84343cf31e..138295a8cf 100644
--- a/indra/newview/llpathfindingnavmesh.cpp
+++ b/indra/newview/llpathfindingnavmesh.cpp
@@ -56,19 +56,38 @@ 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)
{
- mNavMeshData.clear();
- mNavMeshVersion = pNavMeshVersion;
- setRequestStatus(kNavMeshRequestNeedsUpdate);
+ if (mNavMeshVersion != pNavMeshVersion)
+ {
+ mNavMeshData.clear();
+ mNavMeshVersion = pNavMeshVersion;
+ setRequestStatus(kNavMeshRequestNeedsUpdate);
+ }
}
void LLPathfindingNavMesh::handleNavMeshStart(U32 pNavMeshVersion)
@@ -121,13 +140,18 @@ void LLPathfindingNavMesh::handleNavMeshNotEnabled()
setRequestStatus(kNavMeshRequestNotEnabled);
}
+void LLPathfindingNavMesh::handleNavMeshError()
+{
+ mNavMeshData.clear();
+ setRequestStatus(kNavMeshRequestError);
+}
+
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)
{
- mNavMeshData.clear();
- setRequestStatus(kNavMeshRequestError);
+ handleNavMeshError();
}
}