summaryrefslogtreecommitdiffstats
path: root/modules/navigation/nav_mesh_generator_2d.cpp
diff options
context:
space:
mode:
authorPawel Lampe <pawel.lampe@gmail.com>2024-01-29 22:28:01 +0100
committerPawel Lampe <pawel.lampe@gmail.com>2024-02-05 22:04:22 +0100
commitc2cfc0d409b5adf892c6daa86d128f6e98633bee (patch)
treea4bd096edc45131e5da177295ddabe802b7d64be /modules/navigation/nav_mesh_generator_2d.cpp
parent4b6ad349886288405890b07d4a8da425eb3c97ec (diff)
downloadredot-engine-c2cfc0d409b5adf892c6daa86d128f6e98633bee.tar.gz
Expose `is_baking` method in navigation servers and region nodes.
Diffstat (limited to 'modules/navigation/nav_mesh_generator_2d.cpp')
-rw-r--r--modules/navigation/nav_mesh_generator_2d.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/modules/navigation/nav_mesh_generator_2d.cpp b/modules/navigation/nav_mesh_generator_2d.cpp
index 6dfafa4e91..697b434974 100644
--- a/modules/navigation/nav_mesh_generator_2d.cpp
+++ b/modules/navigation/nav_mesh_generator_2d.cpp
@@ -157,11 +157,10 @@ void NavMeshGenerator2D::bake_from_source_geometry_data(Ref<NavigationPolygon> p
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("NavigationPolygon is already baking. Wait for current bake to finish.");
}
+ baking_navmesh_mutex.lock();
baking_navmeshes.insert(p_navigation_mesh);
baking_navmesh_mutex.unlock();
@@ -193,11 +192,10 @@ void NavMeshGenerator2D::bake_from_source_geometry_data_async(Ref<NavigationPoly
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("NavigationPolygon is already baking. Wait for current bake to finish.");
}
+ baking_navmesh_mutex.lock();
baking_navmeshes.insert(p_navigation_mesh);
baking_navmesh_mutex.unlock();
@@ -212,6 +210,13 @@ void NavMeshGenerator2D::bake_from_source_geometry_data_async(Ref<NavigationPoly
generator_task_mutex.unlock();
}
+bool NavMeshGenerator2D::is_baking(Ref<NavigationPolygon> p_navigation_polygon) {
+ baking_navmesh_mutex.lock();
+ bool baking = baking_navmeshes.has(p_navigation_polygon);
+ baking_navmesh_mutex.unlock();
+ return baking;
+}
+
void NavMeshGenerator2D::generator_thread_bake(void *p_arg) {
NavMeshGeneratorTask2D *generator_task = static_cast<NavMeshGeneratorTask2D *>(p_arg);