Added Happiness display to city screen (both total and detailed)

This commit is contained in:
Yair Morgenstern
2018-05-30 13:21:50 +03:00
parent 0959cc3b69
commit c50a919e2a
3 changed files with 24 additions and 6 deletions

View File

@ -11,7 +11,7 @@ import com.unciv.models.stats.Stats
class CityStats {
@Transient var baseStatList = LinkedHashMap<String,Stats>()
@Transient var statModifiers = LinkedHashMap<String,Stats>()
@Transient var happinessList = LinkedHashMap<String,Float>()
@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
}

View File

@ -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<String, Stats>(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

View File

@ -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)