From 034c0f07d44a4a4dc1ea9dc2433b177d2c99e4f2 Mon Sep 17 00:00:00 2001 From: Amos Date: Wed, 24 Jul 2024 23:53:14 +0200 Subject: [PATCH] Recast: fix navmesh query crash regression Caused in commit ce4d4aa59831fbb6a2b7c32820561b321484dc56. Need to properly free and set the navmesh pointer. --- src/naveditor/Editor.cpp | 3 +++ src/naveditor/Editor_Common.cpp | 1 - src/naveditor/Editor_TempObstacles.cpp | 1 - src/naveditor/main.cpp | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/naveditor/Editor.cpp b/src/naveditor/Editor.cpp index 82b51bcc..73fd171e 100644 --- a/src/naveditor/Editor.cpp +++ b/src/naveditor/Editor.cpp @@ -544,6 +544,9 @@ void Editor::selectNavMeshType(const NavMeshType_e navMeshType) bool Editor::loadAll(std::string path, const bool fullPath) { + dtFreeNavMesh(m_navMesh); + m_navMesh = nullptr; + const char* navMeshPath = nullptr; char buffer[256]; diff --git a/src/naveditor/Editor_Common.cpp b/src/naveditor/Editor_Common.cpp index 720b10f1..b3233818 100644 --- a/src/naveditor/Editor_Common.cpp +++ b/src/naveditor/Editor_Common.cpp @@ -404,7 +404,6 @@ void Editor_StaticTileMeshCommon::renderIntermediateTileMeshOptions() if (ImGui::Button("Load", ImVec2(123, 0))) { - dtFreeNavMesh(m_navMesh); Editor::loadAll(m_modelName.c_str()); m_navQuery->init(m_navMesh, 2048); diff --git a/src/naveditor/Editor_TempObstacles.cpp b/src/naveditor/Editor_TempObstacles.cpp index 32d49691..e6cf4b40 100644 --- a/src/naveditor/Editor_TempObstacles.cpp +++ b/src/naveditor/Editor_TempObstacles.cpp @@ -833,7 +833,6 @@ void Editor_TempObstacles::handleSettings() if (ImGui::Button("Load", ImVec2(123, 0))) { - dtFreeNavMesh(m_navMesh); Editor::loadAll(m_modelName.c_str()); m_navQuery->init(m_navMesh, 2048); diff --git a/src/naveditor/main.cpp b/src/naveditor/main.cpp index 3abf60bb..6ff91061 100644 --- a/src/naveditor/main.cpp +++ b/src/naveditor/main.cpp @@ -1026,6 +1026,7 @@ int not_main(int argc, char** argv) if (GetOpenFileNameA(&diag)) { editor->loadAll(szFile, true); + editor->getNavMeshQuery()->init(editor->getNavMesh(), 2048); } } if (ImGui::Button(meshName.empty() ? "Choose Level..." : meshName.c_str()))