Bazaar developer reference

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

Called by