diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-08-16 23:45:10 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-08-16 23:45:10 +0200 |
commit | dbf4be308cf3766946e27b31685e29e26554d1da (patch) | |
tree | 296f6a1c08db8a925d0febd339a7523e2e0cfbd2 | |
parent | 28f14102d9da421341d6207677d83ca3cdc08f89 (diff) | |
parent | f9876d3a8897fb70edb1cc20fed851c259889350 (diff) | |
download | redot-engine-dbf4be308cf3766946e27b31685e29e26554d1da.tar.gz |
Merge pull request #93583 from smix8/obstacle_monitor
Add navigation obstacles to performance monitor stats
-rw-r--r-- | doc/classes/NavigationServer3D.xml | 3 | ||||
-rw-r--r-- | doc/classes/Performance.xml | 5 | ||||
-rw-r--r-- | main/performance.cpp | 5 | ||||
-rw-r--r-- | main/performance.h | 1 | ||||
-rw-r--r-- | modules/navigation/3d/godot_navigation_server_3d.cpp | 6 | ||||
-rw-r--r-- | modules/navigation/3d/godot_navigation_server_3d.h | 1 | ||||
-rw-r--r-- | modules/navigation/nav_map.cpp | 2 | ||||
-rw-r--r-- | modules/navigation/nav_map.h | 2 | ||||
-rw-r--r-- | servers/navigation_server_3d.cpp | 1 | ||||
-rw-r--r-- | servers/navigation_server_3d.h | 1 |
10 files changed, 26 insertions, 1 deletions
diff --git a/doc/classes/NavigationServer3D.xml b/doc/classes/NavigationServer3D.xml index ff3e6fd8a6..42f6235f8b 100644 --- a/doc/classes/NavigationServer3D.xml +++ b/doc/classes/NavigationServer3D.xml @@ -1167,5 +1167,8 @@ <constant name="INFO_EDGE_FREE_COUNT" value="8" enum="ProcessInfo"> Constant to get the number of navigation mesh polygon edges that could not be merged but may be still connected by edge proximity or with links. </constant> + <constant name="INFO_OBSTACLE_COUNT" value="9" enum="ProcessInfo"> + Constant to get the number of active navigation obstacles. + </constant> </constants> </class> diff --git a/doc/classes/Performance.xml b/doc/classes/Performance.xml index 4d01fe1760..6bb71932dd 100644 --- a/doc/classes/Performance.xml +++ b/doc/classes/Performance.xml @@ -221,7 +221,10 @@ <constant name="NAVIGATION_EDGE_FREE_COUNT" value="32" enum="Monitor"> Number of navigation mesh polygon edges that could not be merged in the [NavigationServer3D]. The edges still may be connected by edge proximity or with links. </constant> - <constant name="MONITOR_MAX" value="33" enum="Monitor"> + <constant name="NAVIGATION_OBSTACLE_COUNT" value="33" enum="Monitor"> + Number of active navigation obstacles in the [NavigationServer3D]. + </constant> + <constant name="MONITOR_MAX" value="34" enum="Monitor"> Represents the size of the [enum Monitor] enum. </constant> </constants> diff --git a/main/performance.cpp b/main/performance.cpp index 8eda697b16..0547b3bff0 100644 --- a/main/performance.cpp +++ b/main/performance.cpp @@ -91,6 +91,7 @@ void Performance::_bind_methods() { BIND_ENUM_CONSTANT(NAVIGATION_EDGE_MERGE_COUNT); BIND_ENUM_CONSTANT(NAVIGATION_EDGE_CONNECTION_COUNT); BIND_ENUM_CONSTANT(NAVIGATION_EDGE_FREE_COUNT); + BIND_ENUM_CONSTANT(NAVIGATION_OBSTACLE_COUNT); BIND_ENUM_CONSTANT(MONITOR_MAX); } @@ -141,6 +142,7 @@ String Performance::get_monitor_name(Monitor p_monitor) const { PNAME("navigation/edges_merged"), PNAME("navigation/edges_connected"), PNAME("navigation/edges_free"), + PNAME("navigation/obstacles"), }; @@ -225,6 +227,8 @@ double Performance::get_monitor(Monitor p_monitor) const { return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_CONNECTION_COUNT); case NAVIGATION_EDGE_FREE_COUNT: return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_FREE_COUNT); + case NAVIGATION_OBSTACLE_COUNT: + return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_OBSTACLE_COUNT); default: { } @@ -272,6 +276,7 @@ Performance::MonitorType Performance::get_monitor_type(Monitor p_monitor) const MONITOR_TYPE_QUANTITY, MONITOR_TYPE_QUANTITY, MONITOR_TYPE_QUANTITY, + MONITOR_TYPE_QUANTITY, }; diff --git a/main/performance.h b/main/performance.h index 34162b2da9..05d678fe55 100644 --- a/main/performance.h +++ b/main/performance.h @@ -100,6 +100,7 @@ public: NAVIGATION_EDGE_MERGE_COUNT, NAVIGATION_EDGE_CONNECTION_COUNT, NAVIGATION_EDGE_FREE_COUNT, + NAVIGATION_OBSTACLE_COUNT, MONITOR_MAX }; diff --git a/modules/navigation/3d/godot_navigation_server_3d.cpp b/modules/navigation/3d/godot_navigation_server_3d.cpp index 430d527844..fc96506795 100644 --- a/modules/navigation/3d/godot_navigation_server_3d.cpp +++ b/modules/navigation/3d/godot_navigation_server_3d.cpp @@ -1298,6 +1298,7 @@ void GodotNavigationServer3D::process(real_t p_delta_time) { int _new_pm_edge_merge_count = 0; int _new_pm_edge_connection_count = 0; 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. @@ -1315,6 +1316,7 @@ void GodotNavigationServer3D::process(real_t p_delta_time) { _new_pm_edge_merge_count += active_maps[i]->get_pm_edge_merge_count(); _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(); @@ -1332,6 +1334,7 @@ void GodotNavigationServer3D::process(real_t p_delta_time) { pm_edge_merge_count = _new_pm_edge_merge_count; pm_edge_connection_count = _new_pm_edge_connection_count; pm_edge_free_count = _new_pm_edge_free_count; + pm_obstacle_count = _new_pm_obstacle_count; } void GodotNavigationServer3D::init() { @@ -1566,6 +1569,9 @@ int GodotNavigationServer3D::get_process_info(ProcessInfo p_info) const { case INFO_EDGE_FREE_COUNT: { return pm_edge_free_count; } break; + case INFO_OBSTACLE_COUNT: { + return pm_obstacle_count; + } break; } return 0; diff --git a/modules/navigation/3d/godot_navigation_server_3d.h b/modules/navigation/3d/godot_navigation_server_3d.h index 5ba7ed1088..12a1132f07 100644 --- a/modules/navigation/3d/godot_navigation_server_3d.h +++ b/modules/navigation/3d/godot_navigation_server_3d.h @@ -95,6 +95,7 @@ class GodotNavigationServer3D : public NavigationServer3D { int pm_edge_merge_count = 0; int pm_edge_connection_count = 0; int pm_edge_free_count = 0; + int pm_obstacle_count = 0; public: GodotNavigationServer3D(); diff --git a/modules/navigation/nav_map.cpp b/modules/navigation/nav_map.cpp index f917c988ea..9796fa350d 100644 --- a/modules/navigation/nav_map.cpp +++ b/modules/navigation/nav_map.cpp @@ -907,6 +907,7 @@ void NavMap::sync() { int _new_pm_edge_merge_count = pm_edge_merge_count; int _new_pm_edge_connection_count = pm_edge_connection_count; int _new_pm_edge_free_count = pm_edge_free_count; + int _new_pm_obstacle_count = obstacles.size(); // Check if we need to update the links. if (regenerate_polygons) { @@ -1219,6 +1220,7 @@ void NavMap::sync() { pm_edge_merge_count = _new_pm_edge_merge_count; pm_edge_connection_count = _new_pm_edge_connection_count; pm_edge_free_count = _new_pm_edge_free_count; + pm_obstacle_count = _new_pm_obstacle_count; } void NavMap::_update_rvo_obstacles_tree_2d() { diff --git a/modules/navigation/nav_map.h b/modules/navigation/nav_map.h index d6215ea57f..3dd6db21dd 100644 --- a/modules/navigation/nav_map.h +++ b/modules/navigation/nav_map.h @@ -123,6 +123,7 @@ class NavMap : public NavRid { int pm_edge_merge_count = 0; int pm_edge_connection_count = 0; int pm_edge_free_count = 0; + int pm_obstacle_count = 0; public: NavMap(); @@ -216,6 +217,7 @@ public: int get_pm_edge_merge_count() const { return pm_edge_merge_count; } int get_pm_edge_connection_count() const { return pm_edge_connection_count; } int get_pm_edge_free_count() const { return pm_edge_free_count; } + int get_pm_obstacle_count() const { return pm_obstacle_count; } private: void compute_single_step(uint32_t index, NavAgent **agent); diff --git a/servers/navigation_server_3d.cpp b/servers/navigation_server_3d.cpp index b21c6b60f0..398ff1e1f3 100644 --- a/servers/navigation_server_3d.cpp +++ b/servers/navigation_server_3d.cpp @@ -216,6 +216,7 @@ void NavigationServer3D::_bind_methods() { BIND_ENUM_CONSTANT(INFO_EDGE_MERGE_COUNT); BIND_ENUM_CONSTANT(INFO_EDGE_CONNECTION_COUNT); BIND_ENUM_CONSTANT(INFO_EDGE_FREE_COUNT); + BIND_ENUM_CONSTANT(INFO_OBSTACLE_COUNT); } NavigationServer3D *NavigationServer3D::get_singleton() { diff --git a/servers/navigation_server_3d.h b/servers/navigation_server_3d.h index 17c0771732..cdacf8e7e4 100644 --- a/servers/navigation_server_3d.h +++ b/servers/navigation_server_3d.h @@ -369,6 +369,7 @@ public: INFO_EDGE_MERGE_COUNT, INFO_EDGE_CONNECTION_COUNT, INFO_EDGE_FREE_COUNT, + INFO_OBSTACLE_COUNT, }; virtual int get_process_info(ProcessInfo p_info) const = 0; |