summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pathfinder/yapf/yapf_base.hpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/pathfinder/yapf/yapf_base.hpp b/src/pathfinder/yapf/yapf_base.hpp
index 41c38ab34..c548cfd97 100644
--- a/src/pathfinder/yapf/yapf_base.hpp
+++ b/src/pathfinder/yapf/yapf_base.hpp
@@ -252,9 +252,9 @@ public:
return;
}
- if (m_max_search_nodes > 0 && (m_pBestIntermediateNode == nullptr || (m_pBestIntermediateNode->GetCostEstimate() - m_pBestIntermediateNode->GetCost()) > (n.GetCostEstimate() - n.GetCost()))) {
- m_pBestIntermediateNode = &n;
- }
+ /* The new node can be set as the best intermediate node only once we're
+ * certain it will be finalized by being inserted into the open list. */
+ bool set_intermediate = m_max_search_nodes > 0 && (m_pBestIntermediateNode == nullptr || (m_pBestIntermediateNode->GetCostEstimate() - m_pBestIntermediateNode->GetCost()) > (n.GetCostEstimate() - n.GetCost()));
/* check new node against open list */
Node *openNode = m_nodes.FindOpenNode(n.GetKey());
@@ -267,6 +267,7 @@ public:
*openNode = n;
/* add the updated old node back to open list */
m_nodes.InsertOpenNode(*openNode);
+ if (set_intermediate) m_pBestIntermediateNode = openNode;
}
return;
}
@@ -292,6 +293,7 @@ public:
/* the new node is really new
* add it to the open list */
m_nodes.InsertOpenNode(n);
+ if (set_intermediate) m_pBestIntermediateNode = &n;
}
const VehicleType * GetVehicle() const