mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-23 06:08:46 +07:00
Fix UniqueType.RoadMaintenance being ignored (#9456)
This commit is contained in:
@ -7,6 +7,7 @@ import com.unciv.logic.civilization.diplomacy.RelationshipLevel
|
|||||||
import com.unciv.logic.map.tile.RoadStatus
|
import com.unciv.logic.map.tile.RoadStatus
|
||||||
import com.unciv.models.ruleset.Policy
|
import com.unciv.models.ruleset.Policy
|
||||||
import com.unciv.models.ruleset.tile.ResourceType
|
import com.unciv.models.ruleset.tile.ResourceType
|
||||||
|
import com.unciv.models.ruleset.tile.TileImprovement
|
||||||
import com.unciv.models.ruleset.unique.StateForConditionals
|
import com.unciv.models.ruleset.unique.StateForConditionals
|
||||||
import com.unciv.models.ruleset.unique.UniqueTarget
|
import com.unciv.models.ruleset.unique.UniqueTarget
|
||||||
import com.unciv.models.ruleset.unique.UniqueType
|
import com.unciv.models.ruleset.unique.UniqueType
|
||||||
@ -92,37 +93,34 @@ class CivInfoStatsForNextTurn(val civInfo: Civilization) {
|
|||||||
.map { it.params[0] }.toHashSet() // needs to be .toHashSet()ed,
|
.map { it.params[0] }.toHashSet() // needs to be .toHashSet()ed,
|
||||||
// Because we go over every tile in every city and check if it's in this list, which can get real heavy.
|
// Because we go over every tile in every city and check if it's in this list, which can get real heavy.
|
||||||
|
|
||||||
|
fun addMaintenanceUniques(road: TileImprovement, type: UniqueType, state: StateForConditionals) {
|
||||||
|
for (unique in road.getMatchingUniques(type, state))
|
||||||
|
transportationUpkeep.add(Stat.valueOf(unique.params[1]), unique.params[0].toFloat())
|
||||||
|
}
|
||||||
|
|
||||||
for (city in civInfo.cities) {
|
for (city in civInfo.cities) {
|
||||||
for (tile in city.getTiles()) {
|
for (tile in city.getTiles()) {
|
||||||
if (tile.isCityCenter()) continue
|
if (tile.isCityCenter()) continue
|
||||||
if (tile.getUnpillagedRoad() == RoadStatus.None) continue // Cheap checks before pricey checks
|
if (tile.getUnpillagedRoad() == RoadStatus.None) continue // Cheap checks before pricey checks
|
||||||
if (ignoredTileTypes.any { tile.matchesFilter(it, civInfo) }) continue
|
if (ignoredTileTypes.any { tile.matchesFilter(it, civInfo) }) continue
|
||||||
val road = tile.getUnpillagedRoadImprovement()
|
val road = tile.getUnpillagedRoadImprovement()!! // covered by RoadStatus.None test
|
||||||
if (road!!.hasUnique(UniqueType.ImprovementMaintenance, StateForConditionals(civInfo, tile = tile))) {
|
val stateForConditionals = StateForConditionals(civInfo, tile = tile)
|
||||||
for(unique in road.getMatchingUniques(UniqueType.ImprovementMaintenance)) {
|
addMaintenanceUniques(road, UniqueType.ImprovementMaintenance, stateForConditionals)
|
||||||
transportationUpkeep.add(Stat.valueOf(unique.params[1]), unique.params[0].toFloat())
|
addMaintenanceUniques(road, UniqueType.ImprovementAllMaintenance, stateForConditionals)
|
||||||
}
|
|
||||||
}
|
|
||||||
if (road.hasUnique(UniqueType.ImprovementAllMaintenance, StateForConditionals(civInfo, tile = tile))) {
|
|
||||||
for(unique in road.getMatchingUniques(UniqueType.ImprovementAllMaintenance)) {
|
|
||||||
transportationUpkeep.add(Stat.valueOf(unique.params[1]), unique.params[0].toFloat())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// tabulate neutral roads
|
// tabulate neutral roads
|
||||||
for (position in civInfo.neutralRoads) {
|
for (position in civInfo.neutralRoads) {
|
||||||
val tile = civInfo.gameInfo.tileMap[position]
|
val tile = civInfo.gameInfo.tileMap[position]
|
||||||
if (tile.getUnpillagedRoad() == RoadStatus.None) continue // Cheap checks before pricey checks
|
if (tile.getUnpillagedRoad() == RoadStatus.None) continue // Cheap checks before pricey checks
|
||||||
val road = tile.getUnpillagedRoadImprovement()
|
val road = tile.getUnpillagedRoadImprovement()!! // covered by RoadStatus.None test
|
||||||
if (road!!.hasUnique(UniqueType.ImprovementAllMaintenance, StateForConditionals(civInfo, tile = tile))) {
|
val stateForConditionals = StateForConditionals(civInfo, tile = tile)
|
||||||
for(unique in road.getMatchingUniques(UniqueType.ImprovementAllMaintenance)) {
|
addMaintenanceUniques(road, UniqueType.ImprovementAllMaintenance, stateForConditionals)
|
||||||
transportationUpkeep.add(Stat.valueOf(unique.params[1]), unique.params[0].toFloat())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (unique in civInfo.getMatchingUniques(UniqueType.RoadMaintenance))
|
for (unique in civInfo.getMatchingUniques(UniqueType.RoadMaintenance))
|
||||||
transportationUpkeep.times(unique.params[0].toPercent())
|
transportationUpkeep.timesInPlace(unique.params[0].toPercent())
|
||||||
|
|
||||||
return transportationUpkeep
|
return transportationUpkeep
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user