mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-06 00:09:23 +07:00
Added Happiness display to city screen (both total and detailed)
This commit is contained in:
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user