1
This commit is contained in:
parent
244e92f1fa
commit
e18ba7c803
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user