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
- CvArea::GetID() const
- CvArea::getNumTiles() const
- CvArea::getTotalFoundValue() const
- CvContinent::AddRegion()
- CvContinent::CvContinent()
- CvContinent::CvContinent(const CvContinent &)
- CvContinent::SetArea(int)
- CvContinent::SetFertility(int)
- CvGlobals::getMap()
- CvGlobals::getMIN_START_AREA_TILES()
- CvMap::firstArea(int *, bool)
- CvMap::nextArea(int *, bool)
- CvStartPositioner::ComputeTileFertilityValues()
- CvStartPositioner::DivideContinentIntoRegions(CvContinent)
CvString::CvStringCvString::formatFILogFile::MsgFILogFileMgr::GetInstanceFILogFileMgr::GetLogstd::basic_string::c_strstd::sortstd::sortstd::vector::beginstd::vector::beginstd::vector::clearstd::vector::clearstd::vector::endstd::vector::endstd::vector::operator[]std::vector::push_backstd::vector::size