diff options
-rw-r--r-- | src/pathfinder/yapf/yapf_base.hpp | 8 |
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 |