diff --git a/server/gameserver/navmeshbuilder.cc b/server/gameserver/navmeshbuilder.cc index 5acfc2e..72ea4cf 100644 --- a/server/gameserver/navmeshbuilder.cc +++ b/server/gameserver/navmeshbuilder.cc @@ -21,41 +21,31 @@ #include "navmeshhelper.h" -static const float kAgentMaxSlope = 90; -static const float kAgentHeight = 1; -static const float kAgentMaxClimb = 1; -static const float kAgentRadius = 40; - -static const float kEdgeMaxLen = 6; -static const float kEdgeMaxError = 6; - -static const float kRegionMinSize = 6; -static const float kRegionMergeSize = 6; - -static const int kVertsPerPoly = 1; - -static const int kTileSize = 48; - -static const float kDetailSampleDist = 1; -static const float kDetailSampleMaxError = 1; - -static const int kMaxTiles = 0; -static const int kMaxPolysPerTile = 0; - -void NavMeshBuilder::Init() -{ - -} - -void NavMeshBuilder::UnInit() -{ - -} - struct BuilderParams { float kCellSize = 64; - float kCellHeight = 64; + const float kCellHeight = 64; + const float kAgentMaxSlope = 90; + const float kAgentHeight = 1; + const float kAgentMaxClimb = 1; + const float kAgentRadius = 40; + + const float kEdgeMaxLen = 6; + const float kEdgeMaxError = 6; + + const float kRegionMinSize = 6; + const float kRegionMergeSize = 6; + + const int kVertsPerPoly = 1; + + const int kTileSize = 48; + + const float kDetailSampleDist = 1; + const float kDetailSampleMaxError = 1; + + const int kMaxTiles = 0; + const int kMaxPolysPerTile = 0; + const float* bmin = nullptr; const float* bmax = nullptr; rcConfig cfg; @@ -74,6 +64,16 @@ struct BuilderParams int th = 0; }; +void NavMeshBuilder::Init() +{ + +} + +void NavMeshBuilder::UnInit() +{ + +} + dtNavMesh* NavMeshBuilder::Build(MapInstance* map_instance) { BuilderParams builder_params; @@ -195,7 +195,7 @@ void NavMeshBuilder::InitBasic(BuilderParams& builder_params) builder_params.kCellSize, &builder_params.gw, &builder_params.gh); - builder_params.ts = (int)kTileSize; + builder_params.ts = (int)builder_params.kTileSize; builder_params.tw = (builder_params.gw + builder_params.ts-1) / builder_params.ts; builder_params.th = (builder_params.gh + builder_params.ts-1) / builder_params.ts; } @@ -206,21 +206,21 @@ void NavMeshBuilder::InitRcConfig(BuilderParams& builder_params) memset(&cfg, 0, sizeof(cfg)); cfg.cs = builder_params.kCellSize; cfg.ch = builder_params.kCellHeight; - cfg.walkableSlopeAngle = kAgentMaxSlope; - cfg.walkableHeight = (int)ceilf(kAgentHeight / cfg.ch); - cfg.walkableClimb = (int)floorf(kAgentMaxClimb / cfg.ch); - cfg.walkableRadius = (int)ceilf(kAgentRadius / cfg.cs); - cfg.maxEdgeLen = (int)(kEdgeMaxLen / builder_params.kCellSize); - cfg.maxSimplificationError = kEdgeMaxError; - cfg.minRegionArea = (int)rcSqr(kRegionMinSize); // Note: area = size*size - cfg.mergeRegionArea = (int)rcSqr(kRegionMergeSize); // Note: area = size*size - cfg.maxVertsPerPoly = (int)kVertsPerPoly; - cfg.tileSize = (int)kTileSize; + cfg.walkableSlopeAngle = builder_params.kAgentMaxSlope; + cfg.walkableHeight = (int)ceilf(builder_params.kAgentHeight / cfg.ch); + cfg.walkableClimb = (int)floorf(builder_params.kAgentMaxClimb / cfg.ch); + cfg.walkableRadius = (int)ceilf(builder_params.kAgentRadius / cfg.cs); + cfg.maxEdgeLen = (int)(builder_params.kEdgeMaxLen / builder_params.kCellSize); + cfg.maxSimplificationError = builder_params.kEdgeMaxError; + cfg.minRegionArea = (int)rcSqr(builder_params.kRegionMinSize); // Note: area = size*size + cfg.mergeRegionArea = (int)rcSqr(builder_params.kRegionMergeSize); // Note: area = size*size + cfg.maxVertsPerPoly = (int)builder_params.kVertsPerPoly; + cfg.tileSize = (int)builder_params.kTileSize; cfg.borderSize = cfg.walkableRadius + 3; // Reserve enough padding. cfg.width = cfg.tileSize + cfg.borderSize*2; cfg.height = cfg.tileSize + cfg.borderSize*2; - cfg.detailSampleDist = kDetailSampleDist < 0.9f ? 0 : builder_params.kCellSize * kDetailSampleDist; - cfg.detailSampleMaxError = builder_params.kCellHeight * kDetailSampleMaxError; + cfg.detailSampleDist = builder_params.kDetailSampleDist < 0.9f ? 0 : builder_params.kCellSize * builder_params.kDetailSampleDist; + cfg.detailSampleMaxError = builder_params.kCellHeight * builder_params.kDetailSampleMaxError; rcVcopy(cfg.bmin, builder_params.bmin); rcVcopy(cfg.bmax, builder_params.bmax); } @@ -233,12 +233,12 @@ void NavMeshBuilder::InitTileCacheParams(BuilderParams& builder_params) rcVcopy(tcparams.orig, builder_params.bmin); tcparams.cs = builder_params.kCellSize; tcparams.ch = builder_params.kCellHeight; - tcparams.width = (int)kTileSize; - tcparams.height = (int)kTileSize; - tcparams.walkableHeight = kAgentHeight; - tcparams.walkableRadius = kAgentRadius; - tcparams.walkableClimb = kAgentMaxClimb; - tcparams.maxSimplificationError = kEdgeMaxError; + tcparams.width = (int)builder_params.kTileSize; + tcparams.height = (int)builder_params.kTileSize; + tcparams.walkableHeight = builder_params.kAgentHeight; + tcparams.walkableRadius = builder_params.kAgentRadius; + tcparams.walkableClimb = builder_params.kAgentMaxClimb; + tcparams.maxSimplificationError = builder_params.kEdgeMaxError; tcparams.maxTiles = builder_params.tw*builder_params.th*EXPECTED_LAYERS_PER_TILE; tcparams.maxObstacles = 128; } @@ -247,10 +247,10 @@ void NavMeshBuilder::InitNavMeshParams(BuilderParams& builder_params, dtNavMeshP { memset(¶ms, 0, sizeof(params)); rcVcopy(params.orig, builder_params.bmin); - params.tileWidth = kTileSize * builder_params.kCellSize; - params.tileHeight = kTileSize * builder_params.kCellSize; - params.maxTiles = kMaxTiles; - params.maxPolys = kMaxPolysPerTile; + params.tileWidth = builder_params.kTileSize * builder_params.kCellSize; + params.tileHeight = builder_params.kTileSize * builder_params.kCellSize; + params.maxTiles = builder_params.kMaxTiles; + params.maxPolys = builder_params.kMaxPolysPerTile; } void NavMeshBuilder::BuildTiles(BuilderParams& builder_params)