From 95aa437160ef732d584868a7d37cbe55d5959fa0 Mon Sep 17 00:00:00 2001 From: prep Date: Wed, 22 Feb 2012 12:00:37 -0500 Subject: Path-305: Added support for retrieving compressed navmeshes in a LLSD. --- indra/newview/llnavmeshstation.cpp | 51 ++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 11 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llnavmeshstation.cpp b/indra/newview/llnavmeshstation.cpp index 87f7e92ddd..54a945e562 100644 --- a/indra/newview/llnavmeshstation.cpp +++ b/indra/newview/llnavmeshstation.cpp @@ -32,7 +32,7 @@ #include "llviewerregion.h" #include "llsdutil.h" #include "llfloaterpathfindingconsole.h" - +#include "llsdserialize.h" //=============================================================================== LLNavMeshStation::LLNavMeshStation() { @@ -48,8 +48,7 @@ public: } void error( U32 statusNum, const std::string& reason ) - { - //statusNum; + { llwarns << "Transport error "<extractNavMeshSrcFromLLSD( stuff, mDir ); - pObserver->getPathfindingConsole()->setHasNavMeshReceived(); + const std::vector& value = content["navmesh_data"].asBinary(); + unsigned int binSize = value.size(); + U8* pBinBuffer = new U8[binSize]; + memcpy( &pBinBuffer[0], &value[0], binSize ); + std::string newStr((char*) pBinBuffer, binSize ); + std::istringstream streamdecomp( newStr ); + unsigned int decompBinSize = 0; + bool valid = false; + if ( pBinBuffer ) + { + delete [] pBinBuffer ; + } + U8* pUncompressedNavMeshContainer = unzip_llsdNavMesh( valid, decompBinSize, streamdecomp, binSize ) ; + if ( !valid ) + { + if ( pUncompressedNavMeshContainer ) + { + free( pUncompressedNavMeshContainer ); + } + llwarns << "Unable to decompress the navmesh llsd." << llendl; + pObserver->getPathfindingConsole()->setHasNoNavMesh(); + return; + } + else + { + if ( pUncompressedNavMeshContainer ) + { + std::vector lsd; + lsd.resize( decompBinSize ); + memcpy( &lsd[0], &pUncompressedNavMeshContainer[0], decompBinSize ); + LLPathingLib::getInstance()->extractNavMeshSrcFromLLSD( lsd, mDir ); + pObserver->getPathfindingConsole()->setHasNavMeshReceived(); + free( pUncompressedNavMeshContainer ); + } + } } else { - llwarns<<"no mesh data "<getPathfindingConsole()->setHasNoNavMesh(); } } } -} - +} private: //Observer handle LLHandle mObserverHandle; -- cgit v1.2.3