diff --git a/core/src/com/unciv/logic/city/CityConstructions.kt b/core/src/com/unciv/logic/city/CityConstructions.kt index e4a43fe4db..22d0b3697b 100644 --- a/core/src/com/unciv/logic/city/CityConstructions.kt +++ b/core/src/com/unciv/logic/city/CityConstructions.kt @@ -30,6 +30,7 @@ import com.unciv.models.ruleset.unit.BaseUnit import com.unciv.models.stats.Stat import com.unciv.models.stats.Stats import com.unciv.models.translations.tr +import com.unciv.ui.components.extensions.toPercent import com.unciv.ui.components.fonts.Fonts import com.unciv.ui.screens.civilopediascreen.CivilopediaCategories import com.unciv.ui.screens.civilopediascreen.FormattedLine @@ -118,13 +119,26 @@ class CityConstructions : IsPartOfGameInfoSerialization { /** * @return Maintenance cost of all built buildings */ - fun getMaintenanceCosts(): Int { - var maintenanceCost = 0 + fun getMaintenanceCosts(): Float { + var maintenanceCost = 0f val freeBuildings = city.civ.civConstructions.getFreeBuildingNames(city) + + val buildingMaintenanceUniques = city.getMatchingUniques(UniqueType.BuildingMaintenance) + .filter { city.matchesFilter(it.params[2]) }.toList() + + for (building in getBuiltBuildings().filterNot { it.name in freeBuildings }) { + var maintenanceForThisBuilding = building.maintenance.toFloat() + for (unique in buildingMaintenanceUniques) + if (building.matchesFilter(unique.params[1])) + maintenanceForThisBuilding *= unique.params[0].toPercent() + + maintenanceCost += maintenanceForThisBuilding + } + + for (unique in city.getMatchingUniques(UniqueType.BuildingMaintenanceOld)) { + maintenanceCost = (maintenanceCost * unique.params[0].toPercent()) + } - for (building in getBuiltBuildings()) - if (building.name !in freeBuildings) - maintenanceCost += building.maintenance return maintenanceCost } diff --git a/core/src/com/unciv/logic/city/CityStats.kt b/core/src/com/unciv/logic/city/CityStats.kt index 4afdb800a6..b8a377b3f1 100644 --- a/core/src/com/unciv/logic/city/CityStats.kt +++ b/core/src/com/unciv/logic/city/CityStats.kt @@ -16,7 +16,6 @@ import com.unciv.models.stats.Stats import com.unciv.ui.components.extensions.toPercent import com.unciv.utils.DebugUtils import kotlin.math.min -import kotlin.math.roundToInt class StatTreeNode { @@ -331,23 +330,11 @@ class CityStats(val city: City) { private fun getBuildingMaintenanceCosts(): Float { // Same here - will have a different UI display. - var buildingsMaintenance = city.cityConstructions.getMaintenanceCosts().toFloat() // this is AFTER the bonus calculation! + var buildingsMaintenance = city.cityConstructions.getMaintenanceCosts() // this is AFTER the bonus calculation! if (!city.civ.isHuman()) { buildingsMaintenance *= city.civ.gameInfo.getDifficulty().aiBuildingMaintenanceModifier } - for (unique in city.getMatchingUniques(UniqueType.BuildingMaintenanceOld)) { - buildingsMaintenance *= unique.params[0].toPercent() - } - - for (unique in city.getMatchingUniques(UniqueType.BuildingMaintenance)) { - city.cityConstructions.getBuiltBuildings().filter { - it.matchesFilter(unique.params[1]) - }.forEach { - it.maintenance = (it.maintenance * unique.params[0].toPercent()).roundToInt() - } - } - return buildingsMaintenance }