SetupCity(const CvWorldBuilderMap::City &, int, int)
- Defined in
- CvWorldBuilderMapLoader.cpp, line 613
- Hook name
CivHooks::SetupCity
Hooks
static bool BeforeSetupCity(const CvWorldBuilderMap::City& kSavedCity, int iPlotX, int iPlotY);static void AfterSetupCity(const CvWorldBuilderMap::City& kSavedCity, int iPlotX, int iPlotY);static void ReplaceSetupCity(void (*original)(const CvWorldBuilderMap::City&, int, int), const CvWorldBuilderMap::City& kSavedCity, int iPlotX, int iPlotY);// CivHooks.h gives this hook point no types, so nothing checks these hooks' parameters.host->RegisterHook(host->pluginIndex, CivHooks::SetupCity::ID, CIV_HOOK_BEFORE, (void*)&BeforeSetupCity);host->RegisterHook(host->pluginIndex, CivHooks::SetupCity::ID, CIV_HOOK_AFTER, (void*)&AfterSetupCity);host->RegisterHook(host->pluginIndex, CivHooks::SetupCity::ID, CIV_HOOK_REPLACE, (void*)&ReplaceSetupCity);
Code
613void SetupCity(const CvWorldBuilderMap::City& kSavedCity, int iPlotX, int iPlotY)614{615 const PlayerTypes ePlayer = GetPlayerType(kSavedCity.m_byOwner);616 if(ePlayer != NO_PLAYER)617 {618 CvPlayer& kPlayer = GET_PLAYER(ePlayer);619 CvCity* pkGameplayCity = kPlayer.initCity(iPlotX, iPlotY);620 if(pkGameplayCity != NULL)621 {622 pkGameplayCity->setName(kSavedCity.m_szName);623 pkGameplayCity->setPopulation(kSavedCity.m_wPopulation);624625 if(kSavedCity.GetFlag(CvWorldBuilderMap::City::CITY_PUPPET_STATE))626 {627 pkGameplayCity->SetOccupied(true);628 pkGameplayCity->SetPuppet(true);629 }630 else if(kSavedCity.GetFlag(CvWorldBuilderMap::City::CITY_OCCUPIED))631 {632 pkGameplayCity->SetOccupied(true);633 }634635 if(kSavedCity.m_uiHealth != kSavedCity.MaxHealth)636 {637 const int iMaxHitPoints = pkGameplayCity->GetMaxHitPoints();638639 // TODO: Oh no! It's floating point math! This may be an issue for multi-player.640 const float fHitPoints = kSavedCity.GetHealthAsFloat() * (float)iMaxHitPoints;641642 // Don't allow the city to be killed by a precision error643 int iHitPoints = (int)fHitPoints;644 if(iHitPoints == 0 && kSavedCity.m_uiHealth != 0)645 iHitPoints = 1;646647 pkGameplayCity->setDamage(iMaxHitPoints - iHitPoints);648 }649650 CvCityBuildings* pkCityBuildings = pkGameplayCity->GetCityBuildings();651 if(pkCityBuildings != NULL)652 {653 const int iBuildingTypeCount = GC.getNumBuildingInfos();654 for(int iBuilding = 0; iBuilding < iBuildingTypeCount; ++iBuilding)655 {656 const BuildingTypes eBuildingType = (BuildingTypes)iBuilding;657 if(kSavedCity.m_kBuildings[iBuilding])658 pkCityBuildings->SetNumRealBuilding(eBuildingType, 1);659 }660 }661 kPlayer.DoUpdateNextPolicyCost();662 }663 }664}
Calls
- CvCity::GetCityBuildings() const
- CvCity::GetMaxHitPoints() const
- CvCity::setDamage(int, bool)
- CvCity::setName(const char *, bool)
- CvCity::SetOccupied(bool)
- CvCity::setPopulation(int, bool)
- CvCity::SetPuppet(bool)
- CvCityBuildings::SetNumRealBuilding(BuildingTypes, int)
- CvGlobals::getNumBuildingInfos()
- CvPlayer::DoUpdateNextPolicyCost()
- CvPlayer::initCity(int, int, bool, bool, ReligionTypes, const char *)
- CvPlayerAI::getPlayer(PlayerTypes)
CvWorldBuilderMap::City::GetFlagCvWorldBuilderMap::City::GetHealthAsFloat- GetPlayerType(byte)
std::bitset::operator[]