summaryrefslogtreecommitdiffstats
path: root/modules/navigation/nav_mesh_generator_3d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/navigation/nav_mesh_generator_3d.cpp')
-rw-r--r--modules/navigation/nav_mesh_generator_3d.cpp17
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);