Bazaar developer reference

CvStartPositioner::DivideMapIntoRegions(int)

Defined in
CvStartPositioner.cpp, line 43
Class
CvStartPositioner
Hook name
CivHooks::CvStartPositioner_DivideMapIntoRegions

Hooks

static bool BeforeCvStartPositioner_DivideMapIntoRegions(CvStartPositioner* self, int iNumRegions);static void AfterCvStartPositioner_DivideMapIntoRegions(CvStartPositioner* self, int iNumRegions);static void ReplaceCvStartPositioner_DivideMapIntoRegions(void (*original)(CvStartPositioner*, int), CvStartPositioner* self, int iNumRegions);CivRegisterBefore<CivHooks::CvStartPositioner_DivideMapIntoRegions>(host, &BeforeCvStartPositioner_DivideMapIntoRegions);CivRegisterAfter<CivHooks::CvStartPositioner_DivideMapIntoRegions>(host, &AfterCvStartPositioner_DivideMapIntoRegions);CivRegisterReplace<CivHooks::CvStartPositioner_DivideMapIntoRegions>(host, &ReplaceCvStartPositioner_DivideMapIntoRegions);

Code

42/// Chop map into a number of regions of equal fertility43void CvStartPositioner::DivideMapIntoRegions(int iNumRegions)44{45	CUSTOMLOG("CvStartPositioner::DivideMapIntoRegions(%i)", iNumRegions);46	CvArea* pLoopArea(NULL);47	int iLoop;48	int iNumRegionsPlaced = 0;4950	// Initialize51	m_ContinentVector.clear();52	m_StartRegionVector.clear();5354	// Compute fertility for each plot55	ComputeTileFertilityValues();5657	// Loop through each continent adding it to our list58	for(pLoopArea = GC.getMap().firstArea(&iLoop); pLoopArea != NULL; pLoopArea = GC.getMap().nextArea(&iLoop))59	{60		// Throw out oceans and desert islands61		if(pLoopArea->getTotalFoundValue() > 0 && pLoopArea->getNumTiles() >= GC.getMIN_START_AREA_TILES())62		{63			CvContinent continent;64			continent.SetFertility(pLoopArea->getTotalFoundValue());65			continent.SetArea(pLoopArea->GetID());66			m_ContinentVector.push_back(continent);67		}68	}6970	if(m_ContinentVector.size() > 0)71	{72		// Assign all the regions to continents73		while(iNumRegionsPlaced < iNumRegions)74		{75			std::sort(m_ContinentVector.begin(), m_ContinentVector.end());7677			// Add a region to the first in our list78			m_ContinentVector[0].AddRegion();79			iNumRegionsPlaced++;80		}81	}8283	// Divide the continents according to our algorithm84	for(unsigned int iI=0; iI < m_ContinentVector.size(); iI++)85	{86		DivideContinentIntoRegions(m_ContinentVector[iI]);87	}8889	// Sort the regions by fertility90	std::sort(m_StartRegionVector.begin(), m_StartRegionVector.end());91}

Calls

Called by