Skip to content

Commit 2e170c4

Browse files
committed
Merge pull request #107802 from Notgoyome/navmap_builder_error
NavigationServer2D: Bind missing `merge_rasterizer_cell_scale` setting and functions
2 parents 2e60d51 + e37efa8 commit 2e170c4

File tree

9 files changed

+45
-1
lines changed

9 files changed

+45
-1
lines changed

doc/classes/NavigationServer2D.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,13 @@
541541
Returns all navigation link [RID]s that are currently assigned to the requested navigation [param map].
542542
</description>
543543
</method>
544+
<method name="map_get_merge_rasterizer_cell_scale" qualifiers="const">
545+
<return type="float" />
546+
<param index="0" name="map" type="RID" />
547+
<description>
548+
Returns map's internal merge rasterizer cell scale.
549+
</description>
550+
</method>
544551
<method name="map_get_obstacles" qualifiers="const">
545552
<return type="RID[]" />
546553
<param index="0" name="map" type="RID" />
@@ -630,6 +637,14 @@
630637
Set the map's link connection radius used to connect links to navigation polygons.
631638
</description>
632639
</method>
640+
<method name="map_set_merge_rasterizer_cell_scale">
641+
<return type="void" />
642+
<param index="0" name="map" type="RID" />
643+
<param index="1" name="scale" type="float" />
644+
<description>
645+
Set the map's internal merge rasterizer cell scale used to control merging sensitivity.
646+
</description>
647+
</method>
633648
<method name="map_set_use_async_iterations">
634649
<return type="void" />
635650
<param index="0" name="map" type="RID" />

doc/classes/ProjectSettings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2314,6 +2314,9 @@
23142314
<member name="navigation/2d/default_link_connection_radius" type="float" setter="" getter="" default="4.0">
23152315
Default link connection radius for 2D navigation maps. See [method NavigationServer2D.map_set_link_connection_radius].
23162316
</member>
2317+
<member name="navigation/2d/merge_rasterizer_cell_scale" type="float" setter="" getter="" default="1.0">
2318+
Default merge rasterizer cell scale for 2D navigation maps. See [method NavigationServer2D.map_set_merge_rasterizer_cell_scale].
2319+
</member>
23172320
<member name="navigation/2d/use_edge_connections" type="bool" setter="" getter="" default="true">
23182321
If enabled 2D navigation regions will use edge connections to connect with other navigation regions within proximity of the navigation map edge connection margin. This setting only affects World2D default navigation maps.
23192322
</member>

modules/navigation_2d/2d/godot_navigation_server_2d.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,20 @@ real_t GodotNavigationServer2D::map_get_cell_size(RID p_map) const {
353353
return map->get_cell_size();
354354
}
355355

356+
COMMAND_2(map_set_merge_rasterizer_cell_scale, RID, p_map, float, p_value) {
357+
NavMap2D *map = map_owner.get_or_null(p_map);
358+
ERR_FAIL_NULL(map);
359+
360+
map->set_merge_rasterizer_cell_scale(p_value);
361+
}
362+
363+
float GodotNavigationServer2D::map_get_merge_rasterizer_cell_scale(RID p_map) const {
364+
NavMap2D *map = map_owner.get_or_null(p_map);
365+
ERR_FAIL_NULL_V(map, false);
366+
367+
return map->get_merge_rasterizer_cell_scale();
368+
}
369+
356370
COMMAND_2(map_set_use_edge_connections, RID, p_map, bool, p_enabled) {
357371
NavMap2D *map = map_owner.get_or_null(p_map);
358372
ERR_FAIL_NULL(map);

modules/navigation_2d/2d/godot_navigation_server_2d.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,9 @@ class GodotNavigationServer2D : public NavigationServer2D {
115115
COMMAND_2(map_set_cell_size, RID, p_map, real_t, p_cell_size);
116116
virtual real_t map_get_cell_size(RID p_map) const override;
117117

118+
COMMAND_2(map_set_merge_rasterizer_cell_scale, RID, p_map, float, p_value);
119+
virtual float map_get_merge_rasterizer_cell_scale(RID p_map) const override;
120+
118121
COMMAND_2(map_set_use_edge_connections, RID, p_map, bool, p_enabled);
119122
virtual bool map_get_use_edge_connections(RID p_map) const override;
120123

modules/navigation_2d/2d/nav_map_builder_2d.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ void NavMapBuilder2D::_build_step_find_edge_connection_pairs(NavMapIterationBuil
137137

138138
} else {
139139
// The edge is already connected with another edge, skip.
140-
ERR_PRINT_ONCE("Navigation map synchronization error. Attempted to merge a navigation mesh polygon edge with another already-merged edge. This is usually caused by crossing edges, overlapping polygons, or a mismatch of the NavigationMesh / NavigationPolygon baked 'cell_size' and navigation map 'cell_size'. If you're certain none of above is the case, change 'navigation/3d/merge_rasterizer_cell_scale' to 0.001.");
140+
ERR_PRINT_ONCE("Navigation map synchronization error. Attempted to merge a navigation mesh polygon edge with another already-merged edge. This is usually caused by crossing edges, overlapping polygons, or a mismatch of the NavigationMesh / NavigationPolygon baked 'cell_size' and navigation map 'cell_size'. If you're certain none of above is the case, change 'navigation/2d/merge_rasterizer_cell_scale' to 0.001.");
141141
}
142142
}
143143
}

scene/resources/world_2d.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ RID World2D::get_navigation_map() const {
4848
navigation_map = NavigationServer2D::get_singleton()->map_create();
4949
NavigationServer2D::get_singleton()->map_set_active(navigation_map, true);
5050
NavigationServer2D::get_singleton()->map_set_cell_size(navigation_map, GLOBAL_GET("navigation/2d/default_cell_size"));
51+
NavigationServer2D::get_singleton()->map_set_merge_rasterizer_cell_scale(navigation_map, GLOBAL_GET("navigation/2d/merge_rasterizer_cell_scale"));
5152
NavigationServer2D::get_singleton()->map_set_use_edge_connections(navigation_map, GLOBAL_GET("navigation/2d/use_edge_connections"));
5253
NavigationServer2D::get_singleton()->map_set_edge_connection_margin(navigation_map, GLOBAL_GET("navigation/2d/default_edge_connection_margin"));
5354
NavigationServer2D::get_singleton()->map_set_link_connection_radius(navigation_map, GLOBAL_GET("navigation/2d/default_link_connection_radius"));

servers/navigation_server_2d.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ void NavigationServer2D::_bind_methods() {
5050
ClassDB::bind_method(D_METHOD("map_is_active", "map"), &NavigationServer2D::map_is_active);
5151
ClassDB::bind_method(D_METHOD("map_set_cell_size", "map", "cell_size"), &NavigationServer2D::map_set_cell_size);
5252
ClassDB::bind_method(D_METHOD("map_get_cell_size", "map"), &NavigationServer2D::map_get_cell_size);
53+
ClassDB::bind_method(D_METHOD("map_set_merge_rasterizer_cell_scale", "map", "scale"), &NavigationServer2D::map_set_merge_rasterizer_cell_scale);
54+
ClassDB::bind_method(D_METHOD("map_get_merge_rasterizer_cell_scale", "map"), &NavigationServer2D::map_get_merge_rasterizer_cell_scale);
5355
ClassDB::bind_method(D_METHOD("map_set_use_edge_connections", "map", "enabled"), &NavigationServer2D::map_set_use_edge_connections);
5456
ClassDB::bind_method(D_METHOD("map_get_use_edge_connections", "map"), &NavigationServer2D::map_get_use_edge_connections);
5557
ClassDB::bind_method(D_METHOD("map_set_edge_connection_margin", "map", "margin"), &NavigationServer2D::map_set_edge_connection_margin);
@@ -222,6 +224,7 @@ NavigationServer2D::NavigationServer2D() {
222224

223225
GLOBAL_DEF_BASIC(PropertyInfo(Variant::FLOAT, "navigation/2d/default_cell_size", PROPERTY_HINT_RANGE, NavigationDefaults2D::NAV_MESH_CELL_SIZE_HINT), NavigationDefaults2D::NAV_MESH_CELL_SIZE);
224226
GLOBAL_DEF("navigation/2d/use_edge_connections", true);
227+
GLOBAL_DEF(PropertyInfo(Variant::FLOAT, "navigation/2d/merge_rasterizer_cell_scale", PROPERTY_HINT_RANGE, "0.001,1,0.001,or_greater"), 1.0);
225228
GLOBAL_DEF_BASIC(PropertyInfo(Variant::FLOAT, "navigation/2d/default_edge_connection_margin", PROPERTY_HINT_RANGE, "0.01,10,0.001,or_greater"), NavigationDefaults2D::EDGE_CONNECTION_MARGIN);
226229
GLOBAL_DEF_BASIC(PropertyInfo(Variant::FLOAT, "navigation/2d/default_link_connection_radius", PROPERTY_HINT_RANGE, "0.01,10,0.001,or_greater"), NavigationDefaults2D::LINK_CONNECTION_RADIUS);
227230

servers/navigation_server_2d.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ class NavigationServer2D : public Object {
7070
virtual void map_set_cell_size(RID p_map, real_t p_cell_size) = 0;
7171
virtual real_t map_get_cell_size(RID p_map) const = 0;
7272

73+
virtual void map_set_merge_rasterizer_cell_scale(RID p_map, float p_value) = 0;
74+
virtual float map_get_merge_rasterizer_cell_scale(RID p_map) const = 0;
75+
7376
virtual void map_set_use_edge_connections(RID p_map, bool p_enabled) = 0;
7477
virtual bool map_get_use_edge_connections(RID p_map) const = 0;
7578

servers/navigation_server_2d_dummy.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ class NavigationServer2DDummy : public NavigationServer2D {
4343
bool map_is_active(RID p_map) const override { return false; }
4444
void map_set_cell_size(RID p_map, real_t p_cell_size) override {}
4545
real_t map_get_cell_size(RID p_map) const override { return 0; }
46+
void map_set_merge_rasterizer_cell_scale(RID p_map, float p_value) override {}
47+
float map_get_merge_rasterizer_cell_scale(RID p_map) const override { return 1.0; }
4648
void map_set_use_edge_connections(RID p_map, bool p_enabled) override {}
4749
bool map_get_use_edge_connections(RID p_map) const override { return false; }
4850
void map_set_edge_connection_margin(RID p_map, real_t p_connection_margin) override {}

0 commit comments

Comments
 (0)