Merge pull request #104826 from smix8/navregion_iteration_id

Add function to get navigation region iteration id from NavigationServer
This commit is contained in:
Thaddeus Crews
2025-04-16 10:45:13 -05:00
16 changed files with 54 additions and 0 deletions

View File

@ -389,6 +389,13 @@ RID GodotNavigationServer3D::region_create() {
return rid;
}
uint32_t GodotNavigationServer3D::region_get_iteration_id(RID p_region) const {
NavRegion3D *region = region_owner.get_or_null(p_region);
ERR_FAIL_NULL_V(region, 0);
return region->get_iteration_id();
}
COMMAND_2(region_set_enabled, RID, p_region, bool, p_enabled) {
NavRegion3D *region = region_owner.get_or_null(p_region);
ERR_FAIL_NULL(region);

View File

@ -147,6 +147,7 @@ public:
virtual Vector3 map_get_random_point(RID p_map, uint32_t p_navigation_layers, bool p_uniformly) const override;
virtual RID region_create() override;
virtual uint32_t region_get_iteration_id(RID p_region) const override;
COMMAND_2(region_set_enabled, RID, p_region, bool, p_enabled);
virtual bool region_get_enabled(RID p_region) const override;

View File

@ -194,6 +194,10 @@ bool NavRegion3D::sync() {
update_polygons();
if (something_changed) {
iteration_id = iteration_id % UINT32_MAX + 1;
}
return something_changed;
}

View File

@ -59,12 +59,16 @@ class NavRegion3D : public NavBase3D {
Vector<Vector3> pending_navmesh_vertices;
Vector<Vector<int>> pending_navmesh_polygons;
uint32_t iteration_id = 0;
SelfList<NavRegion3D> sync_dirty_request_list_element;
public:
NavRegion3D();
~NavRegion3D();
uint32_t get_iteration_id() const { return iteration_id; }
void scratch_polygons() {
polygons_dirty = true;
}