public int GetGlobalHappinessOfCity(ICity city)
        {
            if (city == null)
            {
                throw new ArgumentNullException("city");
            }

            int retval = 0;

            foreach (var building in BuildingPossessionCanon.GetPossessionsOfOwner(city))
            {
                retval += building.Template.GlobalHappiness;
            }

            if (CapitalConnectionLogic.IsCityConnectedToCapital(city))
            {
                retval += CityModifiers.CapitalConnectionHappiness.GetValueForCity(city);
            }

            if (UnitGarrisonLogic.IsCityGarrisoned(city))
            {
                retval += CityModifiers.GarrisonedHappiness.GetValueForCity(city);
            }

            return(retval);
        }
        public YieldSummary GetYieldOfCityCenter(ICity city)
        {
            YieldSummary centerYield = CityConfig.CityCenterBaseYield;

            centerYield += new YieldSummary(science: 1) * city.Population;

            centerYield += CityModifiers.BonusYield.GetValueForCity(city);

            if (UnitGarrisonLogic.IsCityGarrisoned(city))
            {
                centerYield += CityModifiers.GarrisonedYield.GetValueForCity(city);
            }

            var cityMultipliers = IncomeModifierLogic.GetYieldMultipliersForCity(city);
            var civMultipliers  = IncomeModifierLogic.GetYieldMultipliersForCivilization(CityPossessionCanon.GetOwnerOfPossession(city));

            centerYield *= (YieldSummary.Ones + cityMultipliers + civMultipliers);

            return(centerYield);
        }