From e4eb093c62044cdce05ada0e0a42011c7e6628cf Mon Sep 17 00:00:00 2001 From: Ferenc Arn Date: Sun, 21 May 2017 14:55:21 -0500 Subject: [PATCH] Avoid overestimating the cost in AStar heuristics. This is a necessary condition for finding optimal solutions. This is achieved by simply requiring/ensuring that no weights are smaller than 1. Fixes #8584. --- core/math/a_star.cpp | 2 +- doc/base/classes.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/math/a_star.cpp b/core/math/a_star.cpp index 7e061359fcf..fa84144271f 100644 --- a/core/math/a_star.cpp +++ b/core/math/a_star.cpp @@ -43,6 +43,7 @@ int AStar::get_available_point_id() const { void AStar::add_point(int p_id, const Vector3 &p_pos, real_t p_weight_scale) { ERR_FAIL_COND(p_id < 0); + ERR_FAIL_COND(p_weight_scale < 1); if (!points.has(p_id)) { Point *pt = memnew(Point); pt->id = p_id; @@ -221,7 +222,6 @@ bool AStar::_solve(Point *begin_point, Point *end_point) { real_t cost = p->distance; cost += _estimate_cost(p->id, end_point->id); - cost *= p->weight_scale; if (cost < least_cost) { diff --git a/doc/base/classes.xml b/doc/base/classes.xml index a04890d4fde..da614e14d30 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -1991,6 +1991,7 @@ + Weight scale has to be 1 or larger.