Bazaar developer reference

CvAStar::UpdateOpenNode(CvAStarNode *)

Defined in
CvAStar.cpp, line 633
Class
CvAStar
Hook name
CivHooks::CvAStar_UpdateOpenNode

Hooks

static bool BeforeCvAStar_UpdateOpenNode(CvAStar* self, CvAStarNode* node);static void AfterCvAStar_UpdateOpenNode(CvAStar* self, CvAStarNode* node);static void ReplaceCvAStar_UpdateOpenNode(void (*original)(CvAStar*, CvAStarNode*), CvAStar* self, CvAStarNode* node);CivRegisterBefore<CivHooks::CvAStar_UpdateOpenNode>(host, &BeforeCvAStar_UpdateOpenNode);CivRegisterAfter<CivHooks::CvAStar_UpdateOpenNode>(host, &AfterCvAStar_UpdateOpenNode);CivRegisterReplace<CivHooks::CvAStar_UpdateOpenNode>(host, &ReplaceCvAStar_UpdateOpenNode);

Code

632/// Connect in a node633void CvAStar::UpdateOpenNode(CvAStarNode* node)634{635	CvAStarNode* temp;636637	FAssert(node->m_eCvAStarListType == CVASTARLIST_OPEN);638639	if((node->m_pPrev != NULL) && (node->m_iTotalCost < node->m_pPrev->m_iTotalCost))640	{641		// have node free float for now642		node->m_pPrev->m_pNext = node->m_pNext;643		if(node->m_pNext)644		{645			node->m_pNext->m_pPrev = node->m_pPrev;646		}647		else648		{649			m_pOpenTail = node->m_pPrev;650		}651		// scoot down the list till we find where node goes (without connecting up as we go)652		temp = node->m_pPrev;653		while((temp != NULL) && (node->m_iTotalCost < temp->m_iTotalCost))654		{655			temp = temp->m_pPrev;656		}657		// connect node up658		if(temp != NULL)659		{660			node->m_pNext = temp->m_pNext;661			node->m_pPrev = temp;662			if(temp->m_pNext)663			{664				temp->m_pNext->m_pPrev = node;665			}666			temp->m_pNext = node;667		}668		else669		{670			node->m_pNext = m_pOpen;671			node->m_pPrev = NULL;672			if(node->m_pNext)673			{674				node->m_pNext->m_pPrev = node;675			}676			m_pOpen = node;677		}678	}679}

Called by