Bazaar developer reference

CvAStar::LinkChild(CvAStarNode *, CvAStarNode *)

Defined in
CvAStar.cpp, line 433
Class
CvAStar
Hook name
CivHooks::CvAStar_LinkChild

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}

Calls

Called by