void CvPlotGroup::recalculatePlots() { PROFILE_FUNC(); CLLNode<XYCoords>* pPlotNode; CvPlot* pPlot; CLinkList<XYCoords> oldPlotGroup; XYCoords xy; PlayerTypes eOwner; int iCount; eOwner = getOwnerINLINE(); pPlotNode = headPlotsNode(); if (pPlotNode != NULL) { pPlot = GC.getMapINLINE().plotSorenINLINE(pPlotNode->m_data.iX, pPlotNode->m_data.iY); iCount = 0; gDLL->getFAStarIFace()->SetData(&GC.getPlotGroupFinder(), &iCount); gDLL->getFAStarIFace()->GeneratePath(&GC.getPlotGroupFinder(), pPlot->getX_INLINE(), pPlot->getY_INLINE(), -1, -1, false, eOwner); if (iCount == getLengthPlots()) { return; } } oldPlotGroup.clear(); pPlotNode = headPlotsNode(); while (pPlotNode != NULL) { pPlot = GC.getMapINLINE().plotSorenINLINE(pPlotNode->m_data.iX, pPlotNode->m_data.iY); FAssertMsg(pPlot != NULL, "Plot is not assigned a valid value"); xy.iX = pPlot->getX_INLINE(); xy.iY = pPlot->getY_INLINE(); oldPlotGroup.insertAtEnd(xy); pPlot->setPlotGroup(eOwner, NULL); pPlotNode = deletePlotsNode(pPlotNode); // will delete this PlotGroup... } pPlotNode = oldPlotGroup.head(); while (pPlotNode != NULL) { pPlot = GC.getMapINLINE().plotSorenINLINE(pPlotNode->m_data.iX, pPlotNode->m_data.iY); FAssertMsg(pPlot != NULL, "Plot is not assigned a valid value"); pPlot->updatePlotGroup(eOwner, true); pPlotNode = oldPlotGroup.deleteNode(pPlotNode); } }