Fixed a bug where the resource supply overview would not add up (#6381)

This commit is contained in:
Xander Lenstra
2022-03-20 07:16:34 +01:00
committed by GitHub
parent fef993d5dc
commit 22477c1ccb
3 changed files with 14 additions and 6 deletions

View File

@ -656,7 +656,7 @@ class CityStateFunctions(val civInfo: CivilizationInfo) {
for (city in civInfo.cities) { for (city in civInfo.cities) {
for (resourceSupply in city.getCityResources()) for (resourceSupply in city.getCityResources())
if (resourceSupply.amount > 0) // IGNORE the fact that they consume their own resources - #4769 if (resourceSupply.amount > 0) // IGNORE the fact that they consume their own resources - #4769
newDetailedCivResources.add(resourceSupply.resource, resourceSupply.amount, "City-States") newDetailedCivResources.add(resourceSupply.resource, resourceSupply.amount, "City-State")
} }
return newDetailedCivResources return newDetailedCivResources
} }

View File

@ -2,6 +2,7 @@ package com.unciv.logic.civilization
import com.unciv.UncivGame import com.unciv.UncivGame
import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileInfo
import com.unciv.models.ruleset.tile.ResourceSupply
import com.unciv.models.ruleset.tile.ResourceSupplyList import com.unciv.models.ruleset.tile.ResourceSupplyList
import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unique.UniqueType
@ -168,19 +169,27 @@ class CivInfoTransientUpdater(val civInfo: CivilizationInfo) {
for (city in civInfo.cities) newDetailedCivResources.add(city.getCityResources()) for (city in civInfo.cities) newDetailedCivResources.add(city.getCityResources())
if (!civInfo.isCityState()) { if (!civInfo.isCityState()) {
// First we get all these resources of each city state separately
val cityStateProvidedResources = ResourceSupplyList()
var resourceBonusPercentage = 1f var resourceBonusPercentage = 1f
for (unique in civInfo.getMatchingUniques(UniqueType.CityStateResources)) for (unique in civInfo.getMatchingUniques(UniqueType.CityStateResources))
resourceBonusPercentage += unique.params[0].toFloat() / 100 resourceBonusPercentage += unique.params[0].toFloat() / 100
for (cityStateAlly in civInfo.getKnownCivs().filter { it.getAllyCiv() == civInfo.civName }) { for (cityStateAlly in civInfo.getKnownCivs().filter { it.getAllyCiv() == civInfo.civName }) {
for (resource in cityStateAlly.cityStateFunctions.getCityStateResourcesForAlly()) { for (resource in cityStateAlly.cityStateFunctions.getCityStateResourcesForAlly()) {
newDetailedCivResources.add( cityStateProvidedResources.add(
resource.apply { amount = (amount * resourceBonusPercentage).toInt() } resource.apply { amount = (amount * resourceBonusPercentage).toInt() }
) )
} }
} }
// Then we combine these into one
for (resourceSupply in cityStateProvidedResources.groupBy { it.resource }) {
newDetailedCivResources.add(ResourceSupply(resourceSupply.key, resourceSupply.value.sumOf { it.amount }, "City-States"))
} }
for (dip in civInfo.diplomacy.values) newDetailedCivResources.add(dip.resourcesFromTrade()) }
for (diplomacyManager in civInfo.diplomacy.values) newDetailedCivResources.add(diplomacyManager.resourcesFromTrade())
for (unit in civInfo.getCivUnits()) for (unit in civInfo.getCivUnits())
for ((resource, amount) in unit.baseUnit.getResourceRequirements()) for ((resource, amount) in unit.baseUnit.getResourceRequirements())
newDetailedCivResources.add(civInfo.gameInfo.ruleSet.tileResources[resource]!!, -amount, "Units") newDetailedCivResources.add(civInfo.gameInfo.ruleSet.tileResources[resource]!!, -amount, "Units")

View File

@ -42,8 +42,7 @@ class ResourcesOverviewTab(
overviewScreen.game.setWorldScreen() overviewScreen.game.setWorldScreen()
} }
holder.addActor(resourceImage) holder.addActor(resourceImage)
holder.setSize(resourceImage.width, holder.setSize(resourceImage.width, resourceImage.height + labelPadding)
resourceImage.height + labelPadding)
// Center-align all labels, but right-align the last couple resources' labels // Center-align all labels, but right-align the last couple resources' labels
// because they may get clipped otherwise. The leftmost label should be fine // because they may get clipped otherwise. The leftmost label should be fine
// center-aligned (if there are more than 2 resources), because the left side // center-aligned (if there are more than 2 resources), because the left side