diff options
Diffstat (limited to 'indra/newview/llpathfindingnavmesh.cpp')
-rw-r--r-- | indra/newview/llpathfindingnavmesh.cpp | 198 |
1 files changed, 99 insertions, 99 deletions
diff --git a/indra/newview/llpathfindingnavmesh.cpp b/indra/newview/llpathfindingnavmesh.cpp index c297cac771..52a7383da6 100644 --- a/indra/newview/llpathfindingnavmesh.cpp +++ b/indra/newview/llpathfindingnavmesh.cpp @@ -1,4 +1,4 @@ -/** +/** * @file llpathfindingnavmesh.cpp * @brief Implementation of llpathfindingnavmesh * @author Stinson@lindenlab.com @@ -45,10 +45,10 @@ //--------------------------------------------------------------------------- LLPathfindingNavMesh::LLPathfindingNavMesh(const LLUUID &pRegionUUID) - : mNavMeshStatus(pRegionUUID), - mNavMeshRequestStatus(kNavMeshRequestUnknown), - mNavMeshSignal(), - mNavMeshData() + : mNavMeshStatus(pRegionUUID), + mNavMeshRequestStatus(kNavMeshRequestUnknown), + mNavMeshSignal(), + mNavMeshData() { } @@ -59,146 +59,146 @@ LLPathfindingNavMesh::~LLPathfindingNavMesh() LLPathfindingNavMesh::navmesh_slot_t LLPathfindingNavMesh::registerNavMeshListener(navmesh_callback_t pNavMeshCallback) { - return mNavMeshSignal.connect(pNavMeshCallback); + return mNavMeshSignal.connect(pNavMeshCallback); } bool LLPathfindingNavMesh::hasNavMeshVersion(const LLPathfindingNavMeshStatus &pNavMeshStatus) const { - return ((mNavMeshStatus.getVersion() == pNavMeshStatus.getVersion()) && - ((mNavMeshRequestStatus == kNavMeshRequestStarted) || (mNavMeshRequestStatus == kNavMeshRequestCompleted) || - ((mNavMeshRequestStatus == kNavMeshRequestChecking) && !mNavMeshData.empty()))); + return ((mNavMeshStatus.getVersion() == pNavMeshStatus.getVersion()) && + ((mNavMeshRequestStatus == kNavMeshRequestStarted) || (mNavMeshRequestStatus == kNavMeshRequestCompleted) || + ((mNavMeshRequestStatus == kNavMeshRequestChecking) && !mNavMeshData.empty()))); } void LLPathfindingNavMesh::handleNavMeshWaitForRegionLoad() { - setRequestStatus(kNavMeshRequestWaiting); + setRequestStatus(kNavMeshRequestWaiting); } void LLPathfindingNavMesh::handleNavMeshCheckVersion() { - setRequestStatus(kNavMeshRequestChecking); + setRequestStatus(kNavMeshRequestChecking); } 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(); - } + llassert(mNavMeshStatus.getRegionUUID() == pNavMeshStatus.getRegionUUID()); + llassert(mNavMeshStatus.getVersion() == pNavMeshStatus.getVersion()); + mNavMeshStatus = pNavMeshStatus; + if (mNavMeshRequestStatus == kNavMeshRequestChecking) + { + llassert(!mNavMeshData.empty()); + setRequestStatus(kNavMeshRequestCompleted); + } + else + { + sendStatus(); + } } 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); - } + llassert(mNavMeshStatus.getRegionUUID() == pNavMeshStatus.getRegionUUID()); + if (mNavMeshStatus.getVersion() == pNavMeshStatus.getVersion()) + { + mNavMeshStatus = pNavMeshStatus; + sendStatus(); + } + else + { + mNavMeshData.clear(); + mNavMeshStatus = pNavMeshStatus; + setRequestStatus(kNavMeshRequestNeedsUpdate); + } } void LLPathfindingNavMesh::handleNavMeshStart(const LLPathfindingNavMeshStatus &pNavMeshStatus) { - llassert(mNavMeshStatus.getRegionUUID() == pNavMeshStatus.getRegionUUID()); - mNavMeshStatus = pNavMeshStatus; - setRequestStatus(kNavMeshRequestStarted); + llassert(mNavMeshStatus.getRegionUUID() == pNavMeshStatus.getRegionUUID()); + mNavMeshStatus = pNavMeshStatus; + setRequestStatus(kNavMeshRequestStarted); } void LLPathfindingNavMesh::handleNavMeshResult(const LLSD &pContent, U32 pNavMeshVersion) { - llassert(pContent.has(NAVMESH_VERSION_FIELD)); - if (pContent.has(NAVMESH_VERSION_FIELD)) - { - llassert(pContent.get(NAVMESH_VERSION_FIELD).isInteger()); - llassert(pContent.get(NAVMESH_VERSION_FIELD).asInteger() >= 0); - U32 embeddedNavMeshVersion = static_cast<U32>(pContent.get(NAVMESH_VERSION_FIELD).asInteger()); - llassert(embeddedNavMeshVersion == pNavMeshVersion); // stinson 03/13/2012 : does this ever occur? - if (embeddedNavMeshVersion != pNavMeshVersion) - { - LL_WARNS() << "Mismatch between expected and embedded navmesh versions occurred" << LL_ENDL; - pNavMeshVersion = embeddedNavMeshVersion; - } - } - - if (mNavMeshStatus.getVersion() == pNavMeshVersion) - { - ENavMeshRequestStatus status; - if ( pContent.has(NAVMESH_DATA_FIELD) ) - { - const LLSD::Binary &value = pContent.get(NAVMESH_DATA_FIELD).asBinary(); - unsigned int binSize = value.size(); - std::string newStr(reinterpret_cast<const char *>(&value[0]), binSize); - std::istringstream streamdecomp( newStr ); - size_t decompBinSize = 0; - bool valid = false; - U8* pUncompressedNavMeshContainer = unzip_llsdNavMesh( valid, decompBinSize, streamdecomp, binSize ) ; - if ( !valid ) - { - LL_WARNS() << "Unable to decompress the navmesh llsd." << LL_ENDL; - status = kNavMeshRequestError; - } - else - { - llassert(pUncompressedNavMeshContainer); - mNavMeshData.resize( decompBinSize ); - memcpy( &mNavMeshData[0], &pUncompressedNavMeshContainer[0], decompBinSize ); - status = kNavMeshRequestCompleted; - } - if ( pUncompressedNavMeshContainer ) - { - free( pUncompressedNavMeshContainer ); - } - } - else - { - LL_WARNS() << "No mesh data received" << LL_ENDL; - status = kNavMeshRequestError; - } - setRequestStatus(status); - } + llassert(pContent.has(NAVMESH_VERSION_FIELD)); + if (pContent.has(NAVMESH_VERSION_FIELD)) + { + llassert(pContent.get(NAVMESH_VERSION_FIELD).isInteger()); + llassert(pContent.get(NAVMESH_VERSION_FIELD).asInteger() >= 0); + U32 embeddedNavMeshVersion = static_cast<U32>(pContent.get(NAVMESH_VERSION_FIELD).asInteger()); + llassert(embeddedNavMeshVersion == pNavMeshVersion); // stinson 03/13/2012 : does this ever occur? + if (embeddedNavMeshVersion != pNavMeshVersion) + { + LL_WARNS() << "Mismatch between expected and embedded navmesh versions occurred" << LL_ENDL; + pNavMeshVersion = embeddedNavMeshVersion; + } + } + + if (mNavMeshStatus.getVersion() == pNavMeshVersion) + { + ENavMeshRequestStatus status; + if ( pContent.has(NAVMESH_DATA_FIELD) ) + { + const LLSD::Binary &value = pContent.get(NAVMESH_DATA_FIELD).asBinary(); + unsigned int binSize = value.size(); + std::string newStr(reinterpret_cast<const char *>(&value[0]), binSize); + std::istringstream streamdecomp( newStr ); + size_t decompBinSize = 0; + bool valid = false; + U8* pUncompressedNavMeshContainer = unzip_llsdNavMesh( valid, decompBinSize, streamdecomp, binSize ) ; + if ( !valid ) + { + LL_WARNS() << "Unable to decompress the navmesh llsd." << LL_ENDL; + status = kNavMeshRequestError; + } + else + { + llassert(pUncompressedNavMeshContainer); + mNavMeshData.resize( decompBinSize ); + memcpy( &mNavMeshData[0], &pUncompressedNavMeshContainer[0], decompBinSize ); + status = kNavMeshRequestCompleted; + } + if ( pUncompressedNavMeshContainer ) + { + free( pUncompressedNavMeshContainer ); + } + } + else + { + LL_WARNS() << "No mesh data received" << LL_ENDL; + status = kNavMeshRequestError; + } + setRequestStatus(status); + } } void LLPathfindingNavMesh::handleNavMeshNotEnabled() { - mNavMeshData.clear(); - setRequestStatus(kNavMeshRequestNotEnabled); + mNavMeshData.clear(); + setRequestStatus(kNavMeshRequestNotEnabled); } void LLPathfindingNavMesh::handleNavMeshError() { - mNavMeshData.clear(); - setRequestStatus(kNavMeshRequestError); + mNavMeshData.clear(); + setRequestStatus(kNavMeshRequestError); } void LLPathfindingNavMesh::handleNavMeshError(U32 pNavMeshVersion) { - if (mNavMeshStatus.getVersion() == pNavMeshVersion) - { - handleNavMeshError(); - } + if (mNavMeshStatus.getVersion() == pNavMeshVersion) + { + handleNavMeshError(); + } } void LLPathfindingNavMesh::setRequestStatus(ENavMeshRequestStatus pNavMeshRequestStatus) { - mNavMeshRequestStatus = pNavMeshRequestStatus; - sendStatus(); + mNavMeshRequestStatus = pNavMeshRequestStatus; + sendStatus(); } void LLPathfindingNavMesh::sendStatus() { - mNavMeshSignal(mNavMeshRequestStatus, mNavMeshStatus, mNavMeshData); + mNavMeshSignal(mNavMeshRequestStatus, mNavMeshStatus, mNavMeshData); } |