diff --git a/modules/navigation_2d/2d/godot_navigation_server_2d.cpp b/modules/navigation_2d/2d/godot_navigation_server_2d.cpp index b4299435958..e733a71e4b4 100644 --- a/modules/navigation_2d/2d/godot_navigation_server_2d.cpp +++ b/modules/navigation_2d/2d/godot_navigation_server_2d.cpp @@ -293,13 +293,11 @@ COMMAND_2(map_set_active, RID, p_map, bool, p_active) { if (p_active) { if (!map_is_active(p_map)) { active_maps.push_back(map); - active_maps_iteration_id.push_back(map->get_iteration_id()); } } else { int map_index = active_maps.find(map); ERR_FAIL_COND(map_index < 0); active_maps.remove_at(map_index); - active_maps_iteration_id.remove_at(map_index); } } @@ -1192,7 +1190,6 @@ COMMAND_1(free, RID, p_object) { int map_index = active_maps.find(map); if (map_index >= 0) { active_maps.remove_at(map_index); - active_maps_iteration_id.remove_at(map_index); } map_owner.free(p_object); @@ -1290,8 +1287,6 @@ void GodotNavigationServer2D::physics_process(double p_delta_time) { int _new_pm_edge_free_count = 0; int _new_pm_obstacle_count = 0; - // In c++ we can't be sure that this is performed in the main thread - // even with mutable functions. MutexLock lock(operations_mutex); for (uint32_t i(0); i < active_maps.size(); i++) { active_maps[i]->sync(); @@ -1307,13 +1302,6 @@ void GodotNavigationServer2D::physics_process(double p_delta_time) { _new_pm_edge_connection_count += active_maps[i]->get_pm_edge_connection_count(); _new_pm_edge_free_count += active_maps[i]->get_pm_edge_free_count(); _new_pm_obstacle_count += active_maps[i]->get_pm_obstacle_count(); - - // Emit a signal if a map changed. - const uint32_t new_map_iteration_id = active_maps[i]->get_iteration_id(); - if (new_map_iteration_id != active_maps_iteration_id[i]) { - emit_signal(SNAME("map_changed"), active_maps[i]->get_self()); - active_maps_iteration_id[i] = new_map_iteration_id; - } } pm_region_count = _new_pm_region_count; diff --git a/modules/navigation_2d/2d/godot_navigation_server_2d.h b/modules/navigation_2d/2d/godot_navigation_server_2d.h index 8398d3cdae5..249b758107d 100644 --- a/modules/navigation_2d/2d/godot_navigation_server_2d.h +++ b/modules/navigation_2d/2d/godot_navigation_server_2d.h @@ -84,7 +84,6 @@ class GodotNavigationServer2D : public NavigationServer2D { bool active = true; LocalVector active_maps; - LocalVector active_maps_iteration_id; #ifdef CLIPPER2_ENABLED NavMeshGenerator2D *navmesh_generator_2d = nullptr; diff --git a/modules/navigation_2d/nav_map_2d.cpp b/modules/navigation_2d/nav_map_2d.cpp index 9673f4861a0..c2020d92d04 100644 --- a/modules/navigation_2d/nav_map_2d.cpp +++ b/modules/navigation_2d/nav_map_2d.cpp @@ -40,6 +40,7 @@ #include "core/config/project_settings.h" #include "core/object/worker_thread_pool.h" +#include "servers/navigation_server_2d.h" #include @@ -418,6 +419,8 @@ void NavMap2D::sync() { } if (iteration_ready) { _sync_iteration(); + + NavigationServer2D::get_singleton()->emit_signal(SNAME("map_changed"), get_self()); } map_settings_dirty = false; diff --git a/modules/navigation_3d/3d/godot_navigation_server_3d.cpp b/modules/navigation_3d/3d/godot_navigation_server_3d.cpp index a2061f871aa..ff50b4a4827 100644 --- a/modules/navigation_3d/3d/godot_navigation_server_3d.cpp +++ b/modules/navigation_3d/3d/godot_navigation_server_3d.cpp @@ -120,13 +120,11 @@ COMMAND_2(map_set_active, RID, p_map, bool, p_active) { if (p_active) { if (!map_is_active(p_map)) { active_maps.push_back(map); - active_maps_iteration_id.push_back(map->get_iteration_id()); } } else { int map_index = active_maps.find(map); ERR_FAIL_COND(map_index < 0); active_maps.remove_at(map_index); - active_maps_iteration_id.remove_at(map_index); } } @@ -1224,7 +1222,6 @@ COMMAND_1(free, RID, p_object) { int map_index = active_maps.find(map); if (map_index >= 0) { active_maps.remove_at(map_index); - active_maps_iteration_id.remove_at(map_index); } map_owner.free(p_object); @@ -1371,8 +1368,6 @@ void GodotNavigationServer3D::physics_process(double p_delta_time) { int _new_pm_edge_free_count = 0; int _new_pm_obstacle_count = 0; - // In c++ we can't be sure that this is performed in the main thread - // even with mutable functions. MutexLock lock(operations_mutex); for (uint32_t i(0); i < active_maps.size(); i++) { active_maps[i]->sync(); @@ -1388,13 +1383,6 @@ void GodotNavigationServer3D::physics_process(double p_delta_time) { _new_pm_edge_connection_count += active_maps[i]->get_pm_edge_connection_count(); _new_pm_edge_free_count += active_maps[i]->get_pm_edge_free_count(); _new_pm_obstacle_count += active_maps[i]->get_pm_obstacle_count(); - - // Emit a signal if a map changed. - const uint32_t new_map_iteration_id = active_maps[i]->get_iteration_id(); - if (new_map_iteration_id != active_maps_iteration_id[i]) { - emit_signal(SNAME("map_changed"), active_maps[i]->get_self()); - active_maps_iteration_id[i] = new_map_iteration_id; - } } pm_region_count = _new_pm_region_count; diff --git a/modules/navigation_3d/3d/godot_navigation_server_3d.h b/modules/navigation_3d/3d/godot_navigation_server_3d.h index 35b905365d5..b1f9a746462 100644 --- a/modules/navigation_3d/3d/godot_navigation_server_3d.h +++ b/modules/navigation_3d/3d/godot_navigation_server_3d.h @@ -79,7 +79,6 @@ class GodotNavigationServer3D : public NavigationServer3D { bool active = true; LocalVector active_maps; - LocalVector active_maps_iteration_id; NavMeshGenerator3D *navmesh_generator_3d = nullptr; diff --git a/modules/navigation_3d/nav_map_3d.cpp b/modules/navigation_3d/nav_map_3d.cpp index 0ccbab23007..518c84c53fd 100644 --- a/modules/navigation_3d/nav_map_3d.cpp +++ b/modules/navigation_3d/nav_map_3d.cpp @@ -40,6 +40,7 @@ #include "core/config/project_settings.h" #include "core/object/worker_thread_pool.h" +#include "servers/navigation_server_3d.h" #include @@ -474,6 +475,8 @@ void NavMap3D::sync() { } if (iteration_ready) { _sync_iteration(); + + NavigationServer3D::get_singleton()->emit_signal(SNAME("map_changed"), get_self()); } map_settings_dirty = false;