CvWorldBuilderMapLoader::Preload(const wchar_t *, bool)
- Defined in
- CvWorldBuilderMapLoader.cpp, line 180
- Class
- CvWorldBuilderMapLoader
- Hook name
CivHooks::CvWorldBuilderMapLoader_Preload
Hooks
static bool BeforeCvWorldBuilderMapLoader_Preload(const wchar_t* wszFilename, bool bScenario, bool& result);static void AfterCvWorldBuilderMapLoader_Preload(const wchar_t* wszFilename, bool bScenario, bool& result);static bool ReplaceCvWorldBuilderMapLoader_Preload(bool (*original)(const wchar_t*, bool), const wchar_t* wszFilename, bool bScenario);CivRegisterBefore<CivHooks::CvWorldBuilderMapLoader_Preload>(host, &BeforeCvWorldBuilderMapLoader_Preload);CivRegisterAfter<CivHooks::CvWorldBuilderMapLoader_Preload>(host, &AfterCvWorldBuilderMapLoader_Preload);CivRegisterReplace<CivHooks::CvWorldBuilderMapLoader_Preload>(host, &ReplaceCvWorldBuilderMapLoader_Preload);
Code
180bool CvWorldBuilderMapLoader::Preload(const wchar_t* wszFilename, bool bScenario)181{182 InitTypeDesc();183184 // Re-initialize map info185 new(&sg_kMapInfo)CvWorldBuilderMapLoaderMapInfo();186187 if(sg_kSave.Load(wszFilename, sg_kMapTypeDesc))188 {189 const uint uiPlotCount = sg_kSave.GetPlotCount();190191 if(!bScenario)192 {193 // Clear out all of the scenario data (except improvements)194 sg_kSave.ClearScenarioData(true);195196 // Remove all improvements that aren't goodies197 for(uint i = 0; i < uiPlotCount; ++i)198 {199 CvWorldBuilderMap::PlotScenarioData& kPlot = sg_kSave.GetPlotScenarioData(i);200 if(kPlot.m_byImprovement != CvWorldBuilderMap::PlotScenarioData::InvalidImprovement)201 {202 ImprovementTypes eType = (ImprovementTypes)kPlot.m_byImprovement;203 const CvImprovementEntry* pkImprovement = GC.getImprovementInfo(eType);204 if(pkImprovement == NULL || !pkImprovement->IsGoody())205 kPlot.m_byImprovement = CvWorldBuilderMap::PlotScenarioData::InvalidImprovement;206 }207 }208 }209210 sg_kMapInfo.uiWidth = sg_kSave.GetWidth();211 sg_kMapInfo.uiHeight = sg_kSave.GetHeight();212213 sg_kMapInfo.uiPlayers = sg_kSave.GetPlayerCount();214 sg_kMapInfo.uiCityStates = sg_kSave.GetCityStateCount();215216 sg_kMapInfo.uiMajorCivStartingPositions = 0;217 sg_kMapInfo.uiMinorCivStartingPositions = 0;218219 sg_kMapInfo.bWorldWrap = sg_kSave.GetFlag(CvWorldBuilderMap::FLAG_WORLD_WRAP);220 sg_kMapInfo.bRandomResources = sg_kSave.GetFlag(CvWorldBuilderMap::FLAG_RANDOM_RECOURCES);221222 for(uint i = 0; i < uiPlotCount; ++i)223 {224 const CvWorldBuilderMap::PlotMapData& kPlotData = sg_kSave.GetPlotData(i);225 if(kPlotData.GetFlag(CvWorldBuilderMap::PlotMapData::START_POS_MAJOR))226 sg_kMapInfo.uiMajorCivStartingPositions++;227 else if(kPlotData.GetFlag(CvWorldBuilderMap::PlotMapData::START_POS_MINOR))228 sg_kMapInfo.uiMinorCivStartingPositions++;229 }230231 const uint uiPlayerCount = sg_kSave.GetPlayerCount();232 if(uiPlayerCount > 0)233 {234 for(uint i = 0; i < uiPlayerCount; ++i)235 {236 const uint uiNew = sg_auiPlayerSlots[i];237 if(uiNew != i)238 {239 if(uiNew < uiPlayerCount)240 {241 sg_kSave.SwapPlayers(uiNew, i);242243 for(uint j = i + 1; j < uiPlayerCount; ++j)244 {245 if(sg_auiPlayerSlots[j] == i)246 {247 sg_auiPlayerSlots[j] = uiNew;248 break;249 }250 }251 }252 }253 }254 }255256 //ResetPlayerSlots();257258 return true;259 }260 else261 {262 return false;263 }264}
Calls
- CvGlobals::getImprovementInfo(ImprovementTypes)
- CvImprovementEntry::IsGoody() const
CvWorldBuilderMap::ClearScenarioDataCvWorldBuilderMap::GetCityStateCountCvWorldBuilderMap::GetFlagCvWorldBuilderMap::GetHeightCvWorldBuilderMap::GetPlayerCountCvWorldBuilderMap::GetPlotCountCvWorldBuilderMap::GetPlotDataCvWorldBuilderMap::GetPlotScenarioDataCvWorldBuilderMap::GetWidthCvWorldBuilderMap::LoadCvWorldBuilderMap::PlotMapData::GetFlagCvWorldBuilderMap::SwapPlayersCvWorldBuilderMapLoaderMapInfo::CvWorldBuilderMapLoaderMapInfo- InitTypeDesc()