From 8e3097c321be79bb2339aa7219e9dc49e04f345e Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sun, 20 Oct 2024 01:29:55 +0200 Subject: [PATCH] Recast: move cross marker to the center of the highlighted tile or poly Make it easier to see where a small polygon or tile is as the cross is noticable. --- src/naveditor/Editor_TileMesh.cpp | 34 ++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/naveditor/Editor_TileMesh.cpp b/src/naveditor/Editor_TileMesh.cpp index c7d522be..bf8fcbec 100644 --- a/src/naveditor/Editor_TileMesh.cpp +++ b/src/naveditor/Editor_TileMesh.cpp @@ -56,7 +56,10 @@ class NavMeshTileTool : public EditorTool int m_selectedTraverseType; dtTileRef m_markedTileRef; + dtTileRef m_lastMarkedTileRef; + dtPolyRef m_markedPolyRef; + dtPolyRef m_lastMarkedPolyRef; enum TileToolCursorMode { @@ -96,7 +99,9 @@ public: m_selectedSide(-1), m_selectedTraverseType(-2), m_markedTileRef(0), + m_lastMarkedTileRef(0), m_markedPolyRef(0), + m_lastMarkedPolyRef(0), m_cursorMode(TT_CURSOR_MODE_DEBUG), m_textOverlayDrawMode(TO_DRAW_MODE_DISABLED), m_textOverlayDrawFlags(TO_DRAW_FLAGS_NONE), @@ -301,22 +306,34 @@ public: if (m_markedTileRef && m_editor && m_navMesh) { const dtMeshTile* tile = m_navMesh->getTileByRef(m_markedTileRef); + const dtMeshHeader* header = tile->header; - if (tile && tile->header) + if (tile && header) { + if (m_markedTileRef != m_lastMarkedTileRef) + { + m_lastMarkedTileRef = m_markedTileRef; + + float bmin[3]; + float bmax[3]; + tile->getTightBounds(bmin, bmax); + + rdVsad(m_nearestPos, bmin, bmax, 0.5f); + } + duDrawTraverseLinkParams params; duDebugDrawMeshTile(&m_editor->getDebugDraw(), *m_navMesh, 0, tile, debugDrawOffset, m_editor->getNavMeshDrawFlags(), params); const int side = (m_selectedSide != -1) ? m_selectedSide - : rdClassifyPointOutsideBounds(m_hitPos, tile->header->bmin, tile->header->bmax); + : rdClassifyPointOutsideBounds(m_hitPos, header->bmin, header->bmax); if (side != 0xff) { const int MAX_NEIS = 32; // Max neighbors dtMeshTile* neis[MAX_NEIS]; - const int nneis = m_navMesh->getNeighbourTilesAt(tile->header->x, tile->header->y, side, neis, MAX_NEIS); + const int nneis = m_navMesh->getNeighbourTilesAt(header->x, header->y, side, neis, MAX_NEIS); for (int i = 0; i < nneis; i++) { @@ -329,6 +346,17 @@ public: if (m_markedPolyRef && m_editor && m_navMesh) { + const dtMeshTile* tile; + const dtPoly* poly; + if (dtStatusSucceed(m_navMesh->getTileAndPolyByRef(m_markedPolyRef, &tile, &poly))) + { + if (m_markedPolyRef != m_lastMarkedPolyRef) + { + m_lastMarkedPolyRef = m_markedPolyRef; + rdVcopy(m_nearestPos, poly->center); + } + } + duDebugDrawNavMeshPoly(&m_editor->getDebugDraw(), *m_navMesh, m_markedPolyRef, debugDrawOffset, m_editor->getNavMeshDrawFlags(), duRGBA(255, 0, 170, 190), false); }