void LLMenuOptionPathfindingRebakeNavmesh::handleNavMeshStatus(const LLPathfindingNavMeshStatus &pNavMeshStatus) { llassert(mIsInitialized); if (mIsInitialized) { ERebakeNavMeshMode rebakeNavMeshMode = kRebakeNavMesh_Default; if (pNavMeshStatus.isValid()) { switch (pNavMeshStatus.getStatus()) { case LLPathfindingNavMeshStatus::kPending : case LLPathfindingNavMeshStatus::kRepending : rebakeNavMeshMode = kRebakeNavMesh_Available; break; case LLPathfindingNavMeshStatus::kBuilding : rebakeNavMeshMode = kRebakeNavMesh_InProgress; break; case LLPathfindingNavMeshStatus::kComplete : rebakeNavMeshMode = kRebakeNavMesh_NotAvailable; break; default : rebakeNavMeshMode = kRebakeNavMesh_Default; llassert(0); break; } } setMode(rebakeNavMeshMode); } }
void LLPathfindingManager::handleNavMeshStatusUpdate(const LLPathfindingNavMeshStatus &pNavMeshStatus) { LLPathfindingNavMeshPtr navMeshPtr = getNavMeshForRegion(pNavMeshStatus.getRegionUUID()); if (!pNavMeshStatus.isValid()) { navMeshPtr->handleNavMeshError(); } else { navMeshPtr->handleNavMeshNewVersion(pNavMeshStatus); } }
void LLPathfindingNavMesh::handleNavMeshNewVersion(const LLPathfindingNavMeshStatus &pNavMeshStatus) { llassert(mNavMeshStatus.getRegionUUID() == pNavMeshStatus.getRegionUUID()); if (mNavMeshStatus.getVersion() == pNavMeshStatus.getVersion()) { mNavMeshStatus = pNavMeshStatus; sendStatus(); } else { mNavMeshData.clear(); mNavMeshStatus = pNavMeshStatus; setRequestStatus(kNavMeshRequestNeedsUpdate); } }
void LLPathfindingNavMesh::handleRefresh(const LLPathfindingNavMeshStatus &pNavMeshStatus) { llassert(mNavMeshStatus.getRegionUUID() == pNavMeshStatus.getRegionUUID()); llassert(mNavMeshStatus.getVersion() == pNavMeshStatus.getVersion()); mNavMeshStatus = pNavMeshStatus; if (mNavMeshRequestStatus == kNavMeshRequestChecking) { llassert(!mNavMeshData.empty()); setRequestStatus(kNavMeshRequestCompleted); } else { sendStatus(); } }
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()); mHasNavMesh = true; mNavMeshVersion = pNavMeshStatus.getVersion(); llassert(LLPathingLib::getInstance() != NULL); if (LLPathingLib::getInstance() != NULL) { LLPathingLib::getInstance()->extractNavMeshSrcFromLLSD(pNavMeshData, mDirection); } } mRequestStatus = pNavMeshRequestStatus; mNavMeshStatus = pNavMeshStatus.getStatus(); mLocationCallback(); }
void LLPathfindingManager::handleNavMeshStatusRequest(const LLPathfindingNavMeshStatus &pNavMeshStatus, LLViewerRegion *pRegion, bool pIsGetStatusOnly) { LLPathfindingNavMeshPtr navMeshPtr = getNavMeshForRegion(pNavMeshStatus.getRegionUUID()); if (!pNavMeshStatus.isValid()) { navMeshPtr->handleNavMeshError(); } else { if (navMeshPtr->hasNavMeshVersion(pNavMeshStatus)) { navMeshPtr->handleRefresh(pNavMeshStatus); } else if (pIsGetStatusOnly) { navMeshPtr->handleNavMeshNewVersion(pNavMeshStatus); } else { sendRequestGetNavMeshForRegion(navMeshPtr, pRegion, pNavMeshStatus); } } }
void LLPathfindingManager::sendRequestGetNavMeshForRegion(LLPathfindingNavMeshPtr navMeshPtr, LLViewerRegion *pRegion, const LLPathfindingNavMeshStatus &pNavMeshStatus) { if ((pRegion == NULL) || !pRegion->isAlive()) { navMeshPtr->handleNavMeshNotEnabled(); } else { std::string navMeshURL = getRetrieveNavMeshURLForRegion(pRegion); if (navMeshURL.empty()) { navMeshPtr->handleNavMeshNotEnabled(); } else { navMeshPtr->handleNavMeshStart(pNavMeshStatus); LLHTTPClient::ResponderPtr responder = new NavMeshResponder(navMeshURL, pNavMeshStatus.getVersion(), navMeshPtr); LLSD postData; LLHTTPClient::post(navMeshURL, postData, responder); } } }
void LLStatusBar::onNavMeshStatusChange(const LLPathfindingNavMeshStatus &pNavMeshStatus) { mIsNavMeshDirty = pNavMeshStatus.isValid() && (pNavMeshStatus.getStatus() != LLPathfindingNavMeshStatus::kComplete); refresh(); }
bool LLPathfindingNavMesh::hasNavMeshVersion(const LLPathfindingNavMeshStatus &pNavMeshStatus) const { return ((mNavMeshStatus.getVersion() == pNavMeshStatus.getVersion()) && ((mNavMeshRequestStatus == kNavMeshRequestStarted) || (mNavMeshRequestStatus == kNavMeshRequestCompleted) || ((mNavMeshRequestStatus == kNavMeshRequestChecking) && !mNavMeshData.empty()))); }
void LLPathfindingNavMesh::handleNavMeshStart(const LLPathfindingNavMeshStatus &pNavMeshStatus) { llassert(mNavMeshStatus.getRegionUUID() == pNavMeshStatus.getRegionUUID()); mNavMeshStatus = pNavMeshStatus; setRequestStatus(kNavMeshRequestStarted); }
void LLLocationInputCtrl::onNavMeshStatusChange(const LLPathfindingNavMeshStatus &pNavMeshStatus) { mIsNavMeshDirty = pNavMeshStatus.isValid() && (pNavMeshStatus.getStatus() != LLPathfindingNavMeshStatus::kComplete); refreshParcelIcons(); }