Skip to content

Commit

Permalink
Merge pull request #79228 from smix8/fix_funnel_4.x
Browse files Browse the repository at this point in the history
Fix pathfinding funnel adding unwanted point
  • Loading branch information
YuriSizov committed Aug 2, 2023
2 parents dc05278 + c51e264 commit d7f0782
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions modules/navigation/nav_map.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,17 @@ Vector<Vector3> NavMap::get_path(Vector3 p_origin, Vector3 p_destination, bool p
if (p_optimize) {
// Set the apex poly/point to the end point
gd::NavigationPoly *apex_poly = &navigation_polys[least_cost_id];

Vector3 back_pathway[2] = { apex_poly->back_navigation_edge_pathway_start, apex_poly->back_navigation_edge_pathway_end };
const Vector3 back_edge_closest_point = Geometry3D::get_closest_point_to_segment(end_point, back_pathway);
if (end_point.is_equal_approx(back_edge_closest_point)) {
// The end point is basically on top of the last crossed edge, funneling around the corners would at best do nothing.
// At worst it would add an unwanted path point before the last point due to precision issues so skip to the next polygon.
if (apex_poly->back_navigation_poly_id != -1) {
apex_poly = &navigation_polys[apex_poly->back_navigation_poly_id];
}
}

Vector3 apex_point = end_point;

gd::NavigationPoly *left_poly = apex_poly;
Expand Down

0 comments on commit d7f0782

Please sign in to comment.