diff --git a/core/src/com/unciv/logic/city/CityStats.kt b/core/src/com/unciv/logic/city/CityStats.kt index 0e10362464..f2a34a6b79 100644 --- a/core/src/com/unciv/logic/city/CityStats.kt +++ b/core/src/com/unciv/logic/city/CityStats.kt @@ -11,7 +11,7 @@ import com.unciv.models.stats.Stats class CityStats { @Transient var baseStatList = LinkedHashMap() - @Transient var statModifiers = LinkedHashMap() + @Transient var happinessList = LinkedHashMap() @Transient var currentCityStats: Stats = Stats() // This is so we won't have to calculate this multiple times - takes a lot of time, especially on phones @Transient lateinit var cityInfo: CityInfo @@ -106,16 +106,24 @@ class CityStats { unhappinessFromCitizens *= 0.9f if (civInfo.policies.isAdopted("Aristocracy")) unhappinessFromCitizens *= 0.95f + + happinessList["Population"]=-unhappinessFromCitizens happiness -= unhappinessFromCitizens + var happinessFromPolicies = 0f if (civInfo.policies.isAdopted("Aristocracy")) - happiness += (cityInfo.population.population / 10).toFloat() + happinessFromPolicies += (cityInfo.population.population / 10).toFloat() if (civInfo.policies.isAdopted("Monarchy") && cityInfo.isCapital()) - happiness += (cityInfo.population.population / 2).toFloat() + happinessFromPolicies += (cityInfo.population.population / 2).toFloat() if (civInfo.policies.isAdopted("Meritocracy") && isConnectedToCapital(RoadStatus.Road)) - happiness += 1f + happinessFromPolicies += 1f - happiness += cityInfo.cityConstructions.getStats().happiness.toInt().toFloat() + happinessList["Policies"] = happinessFromPolicies + happiness += happinessFromPolicies + + val happinessFromBuildings = cityInfo.cityConstructions.getStats().happiness.toInt().toFloat() + happinessList["Buildings"] =happinessFromBuildings + happiness += happinessFromBuildings return happiness } diff --git a/core/src/com/unciv/ui/cityscreen/CityScreen.kt b/core/src/com/unciv/ui/cityscreen/CityScreen.kt index a27688e461..a27b653909 100644 --- a/core/src/com/unciv/ui/cityscreen/CityScreen.kt +++ b/core/src/com/unciv/ui/cityscreen/CityScreen.kt @@ -9,6 +9,7 @@ import com.badlogic.gdx.utils.Align import com.unciv.logic.HexMath import com.unciv.logic.city.CityInfo import com.unciv.logic.map.TileInfo +import com.unciv.models.stats.Stats import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.ImageGetter import com.unciv.ui.utils.centerX @@ -77,8 +78,15 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() { statExplainer.add("Science") statExplainer.add("Gold") statExplainer.add("Culture") + statExplainer.add("Happiness") - for (entry in city.cityStats.baseStatList){ + val unifiedStatList = LinkedHashMap(city.cityStats.baseStatList) + for(entry in city.cityStats.happinessList.filter { it.value!=0f }){ + if(!unifiedStatList.containsKey(entry.key)) unifiedStatList[entry.key]= Stats() + unifiedStatList[entry.key]!!.happiness=entry.value + } + + for (entry in unifiedStatList){ if(entry.value.toHashMap().values.all { it==0f }) continue //irrelevant! statExplainer.row() statExplainer.add(entry.key) @@ -87,6 +95,7 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() { statExplainer.add(entry.value.science.toInt().toString()) statExplainer.add(entry.value.gold.toInt().toString()) statExplainer.add(entry.value.culture.toInt().toString()) + statExplainer.add(entry.value.happiness.toInt().toString()) } statExplainer.pack() statExplainer.isTransform=true diff --git a/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt b/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt index 03205411b6..2de6038415 100644 --- a/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt +++ b/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt @@ -37,6 +37,7 @@ class CityStatsTable(val cityScreen: CityScreen) : Table(){ cityStatsValues["Culture"] = (Math.round(stats.culture).toString() + " (" + city.expansion.cultureStored + "/" + city.expansion.getCultureToNextTile() + ")") cityStatsValues["Population"] = city.population.getFreePopulation().toString() + "/" + city.population.population + cityStatsValues["Happiness"] = city.cityStats.getCityHappiness().toInt().toString() for (key in cityStatsValues.keys) { add(ImageGetter.getStatIcon(key)).align(Align.right)