Bazaar developer reference

CvAStar::UpdateParents(CvAStarNode *)

Defined in
CvAStar.cpp, line 683
Class
CvAStar
Hook name
CivHooks::CvAStar_UpdateParents

Hooks

static bool BeforeCvAStar_UpdateParents(CvAStar* self, CvAStarNode* node);static void AfterCvAStar_UpdateParents(CvAStar* self, CvAStarNode* node);static void ReplaceCvAStar_UpdateParents(void (*original)(CvAStar*, CvAStarNode*), CvAStar* self, CvAStarNode* node);CivRegisterBefore<CivHooks::CvAStar_UpdateParents>(host, &BeforeCvAStar_UpdateParents);CivRegisterAfter<CivHooks::CvAStar_UpdateParents>(host, &AfterCvAStar_UpdateParents);CivRegisterReplace<CivHooks::CvAStar_UpdateParents>(host, &ReplaceCvAStar_UpdateParents);

Code

682/// Refresh parent node (after linking in a child)683void CvAStar::UpdateParents(CvAStarNode* node)684{685	CvAStarNode* kid;686	CvAStarNode* parent;687	int iKnownCost;688	int iNumChildren;689	int i;690691	FAssert(m_pStackHead == NULL);692693	parent = node;694695	while(parent != NULL)696	{697		iNumChildren = parent->m_iNumChildren;698699		for(i = 0; i < iNumChildren; i++)700		{701			kid = parent->m_apChildren[i];702703			iKnownCost = (parent->m_iKnownCost + udFunc(udCost, parent, kid, 0, m_pData));704705			if(iKnownCost < kid->m_iKnownCost)706			{707				kid->m_iKnownCost = iKnownCost;708				kid->m_iTotalCost = kid->m_iKnownCost + kid->m_iHeuristicCost;709				FAssert(parent->m_pParent != kid);710				kid->m_pParent = parent;711				if(kid->m_eCvAStarListType == CVASTARLIST_OPEN)712				{713					UpdateOpenNode(kid);714				}715				udFunc(udNotifyChild, parent, kid, ASNC_PARENTADD_UP, m_pData);716717				Push(kid);718			}719		}720721		parent = Pop();722	}723}

Calls

Called by