Hooks
static bool BeforeCvAStar_Initialize(CvAStar* self, int iColumns, int iRows, bool bWrapX, bool bWrapY, CvAPointFunc IsPathDestFunc, CvAPointFunc DestValidFunc, CvAHeuristic HeuristicFunc, CvAStarFunc CostFunc, CvAStarFunc ValidFunc, CvAStarFunc NotifyChildFunc, CvAStarFunc NotifyListFunc, CvANumExtraChildren NumExtraChildrenFunc, CvAGetExtraChild GetExtraChildFunc, CvABegin InitializeFunc, CvAEnd UninitializeFunc, const void* pData);static void AfterCvAStar_Initialize(CvAStar* self, int iColumns, int iRows, bool bWrapX, bool bWrapY, CvAPointFunc IsPathDestFunc, CvAPointFunc DestValidFunc, CvAHeuristic HeuristicFunc, CvAStarFunc CostFunc, CvAStarFunc ValidFunc, CvAStarFunc NotifyChildFunc, CvAStarFunc NotifyListFunc, CvANumExtraChildren NumExtraChildrenFunc, CvAGetExtraChild GetExtraChildFunc, CvABegin InitializeFunc, CvAEnd UninitializeFunc, const void* pData);static void ReplaceCvAStar_Initialize(void (*original)(CvAStar*, int, int, bool, bool, CvAPointFunc, CvAPointFunc, CvAHeuristic, CvAStarFunc, CvAStarFunc, CvAStarFunc, CvAStarFunc, CvANumExtraChildren, CvAGetExtraChild, CvABegin, CvAEnd, const void*), CvAStar* self, int iColumns, int iRows, bool bWrapX, bool bWrapY, CvAPointFunc IsPathDestFunc, CvAPointFunc DestValidFunc, CvAHeuristic HeuristicFunc, CvAStarFunc CostFunc, CvAStarFunc ValidFunc, CvAStarFunc NotifyChildFunc, CvAStarFunc NotifyListFunc, CvANumExtraChildren NumExtraChildrenFunc, CvAGetExtraChild GetExtraChildFunc, CvABegin InitializeFunc, CvAEnd UninitializeFunc, const void* pData);CivRegisterBefore<CivHooks::CvAStar_Initialize>(host, &BeforeCvAStar_Initialize);CivRegisterAfter<CivHooks::CvAStar_Initialize>(host, &AfterCvAStar_Initialize);CivRegisterReplace<CivHooks::CvAStar_Initialize>(host, &ReplaceCvAStar_Initialize);
Code
138/// Initializes the AStar algorithm139void CvAStar::Initialize(int iColumns, int iRows, bool bWrapX, bool bWrapY, CvAPointFunc IsPathDestFunc, CvAPointFunc DestValidFunc, CvAHeuristic HeuristicFunc, CvAStarFunc CostFunc, CvAStarFunc ValidFunc, CvAStarFunc NotifyChildFunc, CvAStarFunc NotifyListFunc, CvANumExtraChildren NumExtraChildrenFunc, CvAGetExtraChild GetExtraChildFunc, CvABegin InitializeFunc, CvAEnd UninitializeFunc, const void* pData)140{141 int iI, iJ;142143 DeInit(); // free old memory just in case144145 udIsPathDest = IsPathDestFunc;146 udDestValid = DestValidFunc;147 udHeuristic = HeuristicFunc;148 udCost = CostFunc;149 udValid = ValidFunc;150 udNotifyChild = NotifyChildFunc;151 udNotifyList = NotifyListFunc;152 udNumExtraChildrenFunc = NumExtraChildrenFunc;153 udGetExtraChildFunc = GetExtraChildFunc;154 udInitializeFunc = InitializeFunc;155 udUninitializeFunc = UninitializeFunc;156157 m_pData = pData;158159 m_iColumns = iColumns;160 m_iRows = iRows;161162 m_iXstart = -1;163 m_iYstart = -1;164 m_iXdest = -1;165 m_iYdest = -1;166 m_iInfo = 0;167168 m_bWrapX = bWrapX;169 m_bWrapY = bWrapY;170 m_bForceReset = false;171172 m_pOpen = NULL;173 m_pOpenTail = NULL;174 m_pClosed = NULL;175 m_pBest = NULL;176 m_pStackHead = NULL;177178 m_ppaaNodes = reinterpret_cast<CvAStarNode**>(FMALLOCALIGNED(sizeof(CvAStarNode*)*m_iColumns, 64, c_eCiv5GameplayDLL, 0));179 for(iI = 0; iI < m_iColumns; iI++)180 {181 m_ppaaNodes[iI] = reinterpret_cast<CvAStarNode*>(FMALLOCALIGNED(sizeof(CvAStarNode)*m_iRows, 64, c_eCiv5GameplayDLL, 0));182 for(iJ = 0; iJ < m_iRows; iJ++)183 {184 new(&m_ppaaNodes[iI][iJ]) CvAStarNode();185 m_ppaaNodes[iI][iJ].m_iX = iI;186 m_ppaaNodes[iI][iJ].m_iY = iJ;187 }188 }189}