diff --git a/server/gameserver/navmeshbuilder.cc b/server/gameserver/navmeshbuilder.cc index e0a6a82..ecd6c3d 100644 --- a/server/gameserver/navmeshbuilder.cc +++ b/server/gameserver/navmeshbuilder.cc @@ -97,11 +97,12 @@ void NavMeshBuilder::BuildTiles(BuilderParams& builder_params) rcVcopy(cfg.bmin, builder_params.gemo->GetMeshBoundsMin()); rcVcopy(cfg.bmax, builder_params.gemo->GetMeshBoundsMax()); } + for (int y = 0; y < builder_params.tile_height; ++y) { for (int x = 0; x < builder_params.tile_width; ++x) { TileCacheData tiles[MAX_LAYERS]; memset(tiles, 0, sizeof(tiles)); - int ntiles = RasterizeTileLayers(x, y, cfg, tiles, MAX_LAYERS); + int ntiles = RasterizeTileLayers(builder_params, x, y, cfg, tiles, MAX_LAYERS); for (int i = 0; i < ntiles; ++i) { TileCacheData* tile = &tiles[i]; @@ -126,37 +127,24 @@ void NavMeshBuilder::BuildTiles(BuilderParams& builder_params) } } -int NavMeshBuilder::RasterizeTileLayers(const int tx, +int NavMeshBuilder::RasterizeTileLayers(BuilderParams& builder_params, + const int tx, const int ty, const rcConfig& cfg, TileCacheData* tiles, const int maxTiles) { - #if 0 - if (!m_geom || !m_geom->getMesh() || !m_geom->getChunkyMesh()) - { - m_ctx->log(RC_LOG_ERROR, "buildTile: Input mesh is not specified."); - return 0; - } - #endif - - #if 1 - rcContext* ctx = nullptr; rcAreaModification SAMPLE_AREAMOD_GROUND(SAMPLE_POLYAREA_TYPE_GROUND, SAMPLE_POLYAREA_TYPE_MASK); - #endif FastLZCompressor comp; RasterizationContext rc; #if 1 - const float* verts = nullptr; - const int nverts = 0; - const rcChunkyTriMesh* chunkyMesh = nullptr; - #else - const float* verts = m_geom->getMesh()->getVerts(); - const int nverts = m_geom->getMesh()->getVertCount(); - const rcChunkyTriMesh* chunkyMesh = m_geom->getChunkyMesh(); + rcContext* ctx = nullptr; #endif + const float* verts = builder_params.gemo->GetVerts(); + const int nverts = builder_params.gemo->GetVertCount(); + const rcChunkyTriMesh* chunkyMesh = builder_params.gemo->GetChunkyMesh(); // Tile bounds. const float tcs = cfg.tileSize * cfg.cs; @@ -248,13 +236,8 @@ int NavMeshBuilder::RasterizeTileLayers(const int tx, } // (Optional) Mark areas. - #if 1 - const ConvexVolume* vols = nullptr; - int vol_count = 0; - #else - const ConvexVolume* vols = m_geom->getConvexVolumes(); - #endif - for (int i = 0; i < vol_count; ++i) { + const ConvexVolume* vols = builder_params.gemo->GetConvexVolumes(); + for (int i = 0; i < builder_params.gemo->GetConvexVolumeCount(); ++i) { rcMarkConvexPolyArea(ctx, vols[i].verts, vols[i].nverts, vols[i].hmin, vols[i].hmax, vols[i].areaMod, *rc.chf); diff --git a/server/gameserver/navmeshbuilder.h b/server/gameserver/navmeshbuilder.h index 6570f6d..572f495 100644 --- a/server/gameserver/navmeshbuilder.h +++ b/server/gameserver/navmeshbuilder.h @@ -24,7 +24,8 @@ public: void InitTileCacheParams(BuilderParams& builder_params, dtTileCacheParams& tcparams); void InitNavMeshParams(BuilderParams& builder_params, dtNavMeshParams& params); void BuildTiles(BuilderParams& builder_params); - int RasterizeTileLayers(const int tx, + int RasterizeTileLayers(BuilderParams& builder_params, + const int tx, const int ty, const rcConfig& cfg, TileCacheData* tiles, diff --git a/server/gameserver/navmeshhelper.h b/server/gameserver/navmeshhelper.h index 29626d9..a9eddb9 100644 --- a/server/gameserver/navmeshhelper.h +++ b/server/gameserver/navmeshhelper.h @@ -258,6 +258,11 @@ class InputGeom public: const float* GetMeshBoundsMin() const { return nullptr; } const float* GetMeshBoundsMax() const { return nullptr; } + const float* GetVerts() const { return nullptr; } + int GetVertCount() const { return 0; } + const rcChunkyTriMesh* GetChunkyMesh() { return nullptr; } + const ConvexVolume* GetConvexVolumes() { return nullptr; } + int GetConvexVolumeCount() { return 0; } }; struct BuilderParams