Recast: add option to draw tile cells

MSET 8 or higher only.
This commit is contained in:
Amos 2024-07-22 18:49:12 +02:00
parent 49a0ceb148
commit 99db511930
3 changed files with 31 additions and 11 deletions

View File

@ -466,6 +466,13 @@ void Editor::renderDetourDebugMenu()
if (ImGui::Checkbox("Tile ID Colors", &isEnabled))
toggleNavMeshDrawFlag(DU_DRAWNAVMESH_COLOR_TILES);
#if DT_NAVMESH_SET_VERSION >= 8
isEnabled = (getNavMeshDrawFlags() & DU_DRAWNAVMESH_CELLS);
if (ImGui::Checkbox("Tile Cells", &isEnabled))
toggleNavMeshDrawFlag(DU_DRAWNAVMESH_CELLS);
#endif
isEnabled = (getNavMeshDrawFlags() & DU_DRAWNAVMESH_VERTS);
if (ImGui::Checkbox("Vertex Points", &isEnabled))

View File

@ -31,14 +31,15 @@ enum DrawNavMeshFlags
DU_DRAWNAVMESH_PORTALS = 1 << 3, // Render portals.
DU_DRAWNAVMESH_CLOSEDLIST = 1 << 4, // Render navmesh with closed list.
DU_DRAWNAVMESH_COLOR_TILES = 1 << 5, // Render tiles colored by their ID's.
DU_DRAWNAVMESH_VERTS = 1 << 6, // Render vertex points.
DU_DRAWNAVMESH_INNERBOUND = 1 << 7, // Render inner poly boundaries.
DU_DRAWNAVMESH_OUTERBOUND = 1 << 8, // Render outer poly boundaries.
DU_DRAWNAVMESH_POLYCENTERS = 1 << 9, // Render poly centers.
DU_DRAWNAVMESH_POLYGROUPS = 1 << 10, // Render poly group by color.
DU_DRAWNAVMESH_DEPTH_MASK = 1 << 11, // Use depth mask.
DU_DRAWNAVMESH_ALPHA = 1 << 12, // Use transparency.
DU_DRAWNAVMESH_TRAVERSE_LINKS = 1 << 13, // Render traverse links.
DU_DRAWNAVMESH_CELLS = 1 << 6, // Render tile cells.
DU_DRAWNAVMESH_VERTS = 1 << 7, // Render vertex points.
DU_DRAWNAVMESH_INNERBOUND = 1 << 8, // Render inner poly boundaries.
DU_DRAWNAVMESH_OUTERBOUND = 1 << 9, // Render outer poly boundaries.
DU_DRAWNAVMESH_POLYCENTERS = 1 << 10, // Render poly centers.
DU_DRAWNAVMESH_POLYGROUPS = 1 << 11, // Render poly group by color.
DU_DRAWNAVMESH_DEPTH_MASK = 1 << 12, // Use depth mask.
DU_DRAWNAVMESH_ALPHA = 1 << 13, // Use transparency.
DU_DRAWNAVMESH_TRAVERSE_LINKS = 1 << 14, // Render traverse links.
};
void duDebugDrawNavMesh(struct duDebugDraw* dd, const dtNavMesh& mesh, const float* offset, unsigned int flags, const int linkTypes = -1);

View File

@ -194,6 +194,17 @@ static void drawTraverseLinks(duDebugDraw* dd, const dtNavMesh& mesh, const dtNa
}
}
static void drawTileCells(duDebugDraw* dd, const dtMeshTile* tile, const float* offset)
{
#if DT_NAVMESH_SET_VERSION >= 8
for (int i = 0; i < tile->header->maxCellCount; i++)
{
const dtCell& probe = tile->cells[i];
duDebugDrawCross(dd, probe.pos[0], probe.pos[1], probe.pos[2], 25.f, duRGBA(255,0,0,255), 2, offset);
}
#endif
}
static void drawMeshTile(duDebugDraw* dd, const dtNavMesh& mesh, const dtNavMeshQuery* query,
const dtMeshTile* tile, const float* offset, unsigned int flags, const int linkTypes)
{
@ -256,6 +267,9 @@ static void drawMeshTile(duDebugDraw* dd, const dtNavMesh& mesh, const dtNavMesh
if (flags & DU_DRAWNAVMESH_TRAVERSE_LINKS)
drawTraverseLinks(dd, mesh, query, tile, offset, linkTypes);
if (flags & DU_DRAWNAVMESH_CELLS)
drawTileCells(dd, tile, offset);
if (flags & DU_DRAWNAVMESH_OFFMESHCONS)
{
dd->begin(DU_DRAW_LINES, 2.0f, offset);
@ -270,10 +284,8 @@ static void drawMeshTile(duDebugDraw* dd, const dtNavMesh& mesh, const dtNavMesh
unsigned int col;
if (query && query->isInClosedList(base | (dtPolyRef)i))
col = duRGBA(255,196,0,220);
else if (con->unk1 == 1)
col = duDarkenCol(duTransCol(duRGBA(0,0,255,255), 220));
else
col = duDarkenCol(duTransCol(duRGBA(255,0,255,255), 220));
col = duDarkenCol(duTransCol(duRGBA(0,0,255,255), 220));
const float* va = &tile->verts[p->verts[0]*3];
const float* vb = &tile->verts[p->verts[1]*3];