Fixed building maintenance unique

This commit is contained in:
yairm210 2025-06-26 23:41:10 +03:00
parent 5b5495397f
commit 89f6b6fe8b
2 changed files with 20 additions and 19 deletions

View File

@ -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)
for (building in getBuiltBuildings())
if (building.name !in freeBuildings)
maintenanceCost += building.maintenance
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())
}
return maintenanceCost
}

View File

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