From e4eb093c62044cdce05ada0e0a42011c7e6628cf Mon Sep 17 00:00:00 2001
From: Ferenc Arn
Date: Sun, 21 May 2017 14:55:21 -0500
Subject: 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 7e061359f..fa8414427 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 a04890d4f..da614e14d 100644
--- a/doc/base/classes.xml
+++ b/doc/base/classes.xml
@@ -1991,6 +1991,7 @@
+ Weight scale has to be 1 or larger.
--
cgit v1.3.1