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}