From 1f57e552ff8af202f466cb5be66ea2ce0e4c76bc Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 13 Aug 2020 14:43:14 +0800 Subject: [PATCH] 1 --- server/gameserver/CMakeLists.txt | 5 + server/gameserver/navmeshbuilder.cc | 166 ++++++++++++++-------------- 2 files changed, 89 insertions(+), 82 deletions(-) diff --git a/server/gameserver/CMakeLists.txt b/server/gameserver/CMakeLists.txt index 3844032..610ed21 100644 --- a/server/gameserver/CMakeLists.txt +++ b/server/gameserver/CMakeLists.txt @@ -26,6 +26,7 @@ include_directories( ../../third_party/recastnavigation/Recast/Include ../../third_party/recastnavigation/Detour/Include ../../third_party/recastnavigation/DetourTileCache/Include + ../../third_party/recastnavigation/RecastDemo/Contrib/fastlz . ) @@ -47,6 +48,10 @@ aux_source_directory(../../third_party/recastnavigation/Recast/Source SRC_LIST ) +aux_source_directory(../../third_party/recastnavigation/RecastDemo/Contrib/fastlz + SRC_LIST +) + aux_source_directory(../../third_party/recastnavigation/Detour/Source SRC_LIST ) diff --git a/server/gameserver/navmeshbuilder.cc b/server/gameserver/navmeshbuilder.cc index c706a6d..d5bfb9f 100644 --- a/server/gameserver/navmeshbuilder.cc +++ b/server/gameserver/navmeshbuilder.cc @@ -11,6 +11,7 @@ #include "DetourNavMeshQuery.h" #include "DetourCommon.h" #include "DetourNavMesh.h" +#include "fastlz.h" #include "navmeshbuilder.h" #include "mapinstance.h" @@ -50,106 +51,107 @@ struct TileCacheData struct LinearAllocator : public dtTileCacheAlloc { - unsigned char* buffer; - size_t capacity; - size_t top; - size_t high; + unsigned char* buffer; + size_t capacity; + size_t top; + size_t high; - LinearAllocator(const size_t cap) : buffer(0), capacity(0), top(0), high(0) - { - resize(cap); - } + LinearAllocator(const size_t cap) : buffer(0), capacity(0), top(0), high(0) + { + resize(cap); + } - ~LinearAllocator() - { - dtFree(buffer); - } + ~LinearAllocator() + { + dtFree(buffer); + } - void resize(const size_t cap) - { - if (buffer) dtFree(buffer); - buffer = (unsigned char*)dtAlloc(cap, DT_ALLOC_PERM); - capacity = cap; - } + void resize(const size_t cap) + { + if (buffer) dtFree(buffer); + buffer = (unsigned char*)dtAlloc(cap, DT_ALLOC_PERM); + capacity = cap; + } - virtual void reset() - { - high = dtMax(high, top); - top = 0; - } + virtual void reset() + { + high = dtMax(high, top); + top = 0; + } - virtual void* alloc(const size_t size) - { - if (!buffer) - return 0; - if (top+size > capacity) - return 0; - unsigned char* mem = &buffer[top]; - top += size; - return mem; - } + virtual void* alloc(const size_t size) + { + if (!buffer) + return 0; + if (top+size > capacity) + return 0; + unsigned char* mem = &buffer[top]; + top += size; + return mem; + } - virtual void free(void* /*ptr*/) - { - // Empty - } + virtual void free(void* /*ptr*/) + { + // Empty + } }; struct FastLZCompressor : public dtTileCacheCompressor { - virtual int maxCompressedSize(const int bufferSize) - { - return (int)(bufferSize* 1.05f); - } + virtual int maxCompressedSize(const int bufferSize) + { + return (int)(bufferSize* 1.05f); + } - virtual dtStatus compress(const unsigned char* buffer, const int bufferSize, - unsigned char* compressed, const int /*maxCompressedSize*/, int* compressedSize) - { - #if 0 - *compressedSize = fastlz_compress((const void *const)buffer, bufferSize, compressed); - #endif - return DT_SUCCESS; - } + virtual dtStatus compress(const unsigned char* buffer, const int bufferSize, + unsigned char* compressed, const int /*maxCompressedSize*/, int* compressedSize) + { +#if 0 + *compressedSize = fastlz_compress((const void *const)buffer, bufferSize, compressed); +#endif + return DT_SUCCESS; + } - virtual dtStatus decompress(const unsigned char* compressed, const int compressedSize, - unsigned char* buffer, const int maxBufferSize, int* bufferSize) - { - #if 0 - *bufferSize = fastlz_decompress(compressed, compressedSize, buffer, maxBufferSize); - #endif - return *bufferSize < 0 ? DT_FAILURE : DT_SUCCESS; - } + virtual dtStatus decompress(const unsigned char* compressed, const int compressedSize, + unsigned char* buffer, const int maxBufferSize, int* bufferSize) + { +#if 0 + *bufferSize = fastlz_decompress(compressed, compressedSize, buffer, maxBufferSize); +#endif + return *bufferSize < 0 ? DT_FAILURE : DT_SUCCESS; + } }; struct MeshProcess : public dtTileCacheMeshProcess { - inline MeshProcess() - { - } + inline MeshProcess() + { + } - virtual void process(struct dtNavMeshCreateParams* params, - unsigned char* polyAreas, unsigned short* polyFlags) - { - #if 0 - // Update poly flags from areas. - for (int i = 0; i < params->polyCount; ++i) - { - polyFlags[i] = sampleAreaToFlags(polyAreas[i]); - } + virtual void process(struct dtNavMeshCreateParams* params, + unsigned char* polyAreas, + unsigned short* polyFlags) + { +#if 0 + // Update poly flags from areas. + for (int i = 0; i < params->polyCount; ++i) + { + polyFlags[i] = sampleAreaToFlags(polyAreas[i]); + } - // Pass in off-mesh connections. - if (m_geom) - { - params->offMeshConVerts = m_geom->getOffMeshConnectionVerts(); - params->offMeshConRad = m_geom->getOffMeshConnectionRads(); - params->offMeshConDir = m_geom->getOffMeshConnectionDirs(); - params->offMeshConAreas = m_geom->getOffMeshConnectionAreas(); - params->offMeshConFlags = m_geom->getOffMeshConnectionFlags(); - params->offMeshConUserID = m_geom->getOffMeshConnectionId(); - params->offMeshConCount = m_geom->getOffMeshConnectionCount(); - } - #endif - } + // Pass in off-mesh connections. + if (m_geom) + { + params->offMeshConVerts = m_geom->getOffMeshConnectionVerts(); + params->offMeshConRad = m_geom->getOffMeshConnectionRads(); + params->offMeshConDir = m_geom->getOffMeshConnectionDirs(); + params->offMeshConAreas = m_geom->getOffMeshConnectionAreas(); + params->offMeshConFlags = m_geom->getOffMeshConnectionFlags(); + params->offMeshConUserID = m_geom->getOffMeshConnectionId(); + params->offMeshConCount = m_geom->getOffMeshConnectionCount(); + } +#endif + } }; void NavMeshBuilder::Init()