Hooks
static bool BeforeCvAStar_LinkChild(CvAStar* self, CvAStarNode* node, CvAStarNode* check);static void AfterCvAStar_LinkChild(CvAStar* self, CvAStarNode* node, CvAStarNode* check);static void ReplaceCvAStar_LinkChild(void (*original)(CvAStar*, CvAStarNode*, CvAStarNode*), CvAStar* self, CvAStarNode* node, CvAStarNode* check);CivRegisterBefore<CivHooks::CvAStar_LinkChild>(host, &BeforeCvAStar_LinkChild);CivRegisterAfter<CivHooks::CvAStar_LinkChild>(host, &AfterCvAStar_LinkChild);CivRegisterReplace<CivHooks::CvAStar_LinkChild>(host, &ReplaceCvAStar_LinkChild);
Code
432/// Link in a child433void CvAStar::LinkChild(CvAStarNode* node, CvAStarNode* check)434{435 int iKnownCost;436437 iKnownCost = node->m_iKnownCost + udFunc(udCost, node, check, 0, m_pData);438439 if(check->m_eCvAStarListType == CVASTARLIST_OPEN)440 {441 node->m_apChildren.push_back(check);442 node->m_iNumChildren++;443444 if(iKnownCost < check->m_iKnownCost)445 {446 FAssert(node->m_pParent != check);447448 check->m_pParent = node;449 check->m_iKnownCost = iKnownCost;450 check->m_iTotalCost = iKnownCost + check->m_iHeuristicCost;451452 UpdateOpenNode(check);453 udFunc(udNotifyChild, node, check, ASNC_OPENADD_UP, m_pData);454 }455 }456 else if(check->m_eCvAStarListType == CVASTARLIST_CLOSED)457 {458 node->m_apChildren.push_back(check);459 node->m_iNumChildren++;460461 if(iKnownCost < check->m_iKnownCost)462 {463 FAssert(node->m_pParent != check);464 check->m_pParent = node;465 check->m_iKnownCost = iKnownCost;466 check->m_iTotalCost = iKnownCost + check->m_iHeuristicCost;467 udFunc(udNotifyChild, node, check, ASNC_CLOSEDADD_UP, m_pData);468469 UpdateParents(check);470 }471 }472 else473 {474 FAssert(check->m_eCvAStarListType == NO_CVASTARLIST);475 FAssert(node->m_pParent != check);476 check->m_pParent = node;477 check->m_iKnownCost = iKnownCost;478 if(udHeuristic == NULL)479 {480 check->m_iHeuristicCost = 0;481 }482 else483 {484 check->m_iHeuristicCost = udHeuristic(check->m_iX, check->m_iY, m_iXdest, m_iYdest);485 }486 check->m_iTotalCost = check->m_iKnownCost + check->m_iHeuristicCost;487488 udFunc(udNotifyChild, node, check, ASNC_NEWADD, m_pData);489490 AddToOpen(check);491492 node->m_apChildren.push_back(check);493 node->m_iNumChildren++;494 }495}