Skip to content

Commit 19affb6

Browse files
committed
Merge pull request godotengine#92850 from permelin/fix-navigationserver3d-get_closest_point_to_segment-use_collision
Fix `NavigationServer3D.get_closest_point_to_segment()` with `use_collision`
2 parents a139cd6 + 9b191f6 commit 19affb6

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

modules/navigation/nav_map.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -617,7 +617,7 @@ Vector3 NavMap::get_closest_point_to_segment(const Vector3 &p_from, const Vector
617617
const Face3 f(p.points[0].pos, p.points[point_id - 1].pos, p.points[point_id].pos);
618618
Vector3 inters;
619619
if (f.intersects_segment(p_from, p_to, &inters)) {
620-
const real_t d = closest_point_d = p_from.distance_to(inters);
620+
const real_t d = p_from.distance_to(inters);
621621
if (use_collision == false) {
622622
closest_point = inters;
623623
use_collision = true;

tests/servers/test_navigation_server_3d.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -697,12 +697,16 @@ TEST_SUITE("[Navigation]") {
697697
CHECK_NE(navigation_server->map_get_closest_point(map, Vector3(0, 0, 0)), Vector3(0, 0, 0));
698698
CHECK_NE(navigation_server->map_get_closest_point_normal(map, Vector3(0, 0, 0)), Vector3());
699699
CHECK(navigation_server->map_get_closest_point_owner(map, Vector3(0, 0, 0)).is_valid());
700-
// TODO: Test map_get_closest_point_to_segment() with p_use_collision=true as well.
701700
CHECK_NE(navigation_server->map_get_closest_point_to_segment(map, Vector3(0, 0, 0), Vector3(1, 1, 1), false), Vector3());
701+
CHECK_NE(navigation_server->map_get_closest_point_to_segment(map, Vector3(0, 0, 0), Vector3(1, 1, 1), true), Vector3());
702702
CHECK_NE(navigation_server->map_get_path(map, Vector3(0, 0, 0), Vector3(10, 0, 10), true).size(), 0);
703703
CHECK_NE(navigation_server->map_get_path(map, Vector3(0, 0, 0), Vector3(10, 0, 10), false).size(), 0);
704704
}
705705

706+
SUBCASE("'map_get_closest_point_to_segment' with 'use_collision' should return default if segment doesn't intersect map") {
707+
CHECK_EQ(navigation_server->map_get_closest_point_to_segment(map, Vector3(1, 2, 1), Vector3(1, 1, 1), true), Vector3());
708+
}
709+
706710
SUBCASE("Elaborate query with 'CORRIDORFUNNEL' post-processing should yield non-empty result") {
707711
Ref<NavigationPathQueryParameters3D> query_parameters = memnew(NavigationPathQueryParameters3D);
708712
query_parameters->set_map(map);

0 commit comments

Comments
 (0)