diff options
Diffstat (limited to 'modules/navigation/nav_mesh_generator_3d.cpp')
-rw-r--r-- | modules/navigation/nav_mesh_generator_3d.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/modules/navigation/nav_mesh_generator_3d.cpp b/modules/navigation/nav_mesh_generator_3d.cpp index 8719801c72..f20b4d25e3 100644 --- a/modules/navigation/nav_mesh_generator_3d.cpp +++ b/modules/navigation/nav_mesh_generator_3d.cpp @@ -172,11 +172,10 @@ void NavMeshGenerator3D::bake_from_source_geometry_data(Ref<NavigationMesh> p_na return; } - baking_navmesh_mutex.lock(); - if (baking_navmeshes.has(p_navigation_mesh)) { - baking_navmesh_mutex.unlock(); + if (is_baking(p_navigation_mesh)) { ERR_FAIL_MSG("NavigationMesh is already baking. Wait for current bake to finish."); } + baking_navmesh_mutex.lock(); baking_navmeshes.insert(p_navigation_mesh); baking_navmesh_mutex.unlock(); @@ -208,12 +207,11 @@ void NavMeshGenerator3D::bake_from_source_geometry_data_async(Ref<NavigationMesh return; } - baking_navmesh_mutex.lock(); - if (baking_navmeshes.has(p_navigation_mesh)) { - baking_navmesh_mutex.unlock(); + if (is_baking(p_navigation_mesh)) { ERR_FAIL_MSG("NavigationMesh is already baking. Wait for current bake to finish."); return; } + baking_navmesh_mutex.lock(); baking_navmeshes.insert(p_navigation_mesh); baking_navmesh_mutex.unlock(); @@ -228,6 +226,13 @@ void NavMeshGenerator3D::bake_from_source_geometry_data_async(Ref<NavigationMesh generator_task_mutex.unlock(); } +bool NavMeshGenerator3D::is_baking(Ref<NavigationMesh> p_navigation_mesh) { + baking_navmesh_mutex.lock(); + bool baking = baking_navmeshes.has(p_navigation_mesh); + baking_navmesh_mutex.unlock(); + return baking; +} + void NavMeshGenerator3D::generator_thread_bake(void *p_arg) { NavMeshGeneratorTask3D *generator_task = static_cast<NavMeshGeneratorTask3D *>(p_arg); |