From 9bb49342ccf44409deed4c03de89a99ab4ba944e Mon Sep 17 00:00:00 2001 From: SomeTroglodyte <63000004+SomeTroglodyte@users.noreply.github.com> Date: Sat, 18 Mar 2023 18:24:33 +0100 Subject: [PATCH] Fix Garrison bonus logic (#8952) * City filter for Military Caste * Garrison display in Overview - all credit to @WhoIsJohannes --- core/src/com/unciv/logic/city/City.kt | 9 ++++++++- .../unciv/ui/screens/overviewscreen/CityOverviewTable.kt | 8 ++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/core/src/com/unciv/logic/city/City.kt b/core/src/com/unciv/logic/city/City.kt index 58ce99ab89..5e06d49715 100644 --- a/core/src/com/unciv/logic/city/City.kt +++ b/core/src/com/unciv/logic/city/City.kt @@ -10,6 +10,7 @@ import com.unciv.logic.city.managers.CityReligionManager import com.unciv.logic.civilization.Civilization import com.unciv.logic.civilization.diplomacy.DiplomacyFlags import com.unciv.logic.map.TileMap +import com.unciv.logic.map.mapunit.MapUnit import com.unciv.logic.map.tile.RoadStatus import com.unciv.logic.map.tile.Tile import com.unciv.models.Counter @@ -153,6 +154,12 @@ class City : IsPartOfGameInfoSerialization { return connectionTypePredicate(mediumTypes) } + fun isGarrisoned() = getGarrison() != null + fun getGarrison(): MapUnit? = + getCenterTile().militaryUnit?.takeIf { + it.civ == this.civ && it.canGarrison() + } + fun hasFlag(flag: CityFlags) = flagsCountdown.containsKey(flag.name) fun getFlag(flag: CityFlags) = flagsCountdown[flag.name]!! @@ -512,7 +519,7 @@ class City : IsPartOfGameInfoSerialization { "in all cities with a world wonder" -> cityConstructions.getBuiltBuildings() .any { it.isWonder } "in all cities connected to capital" -> isConnectedToCapital() - "in all cities with a garrison" -> getCenterTile().militaryUnit != null + "in all cities with a garrison" -> isGarrisoned() "in all cities in which the majority religion is a major religion" -> religion.getMajorityReligionName() != null && religion.getMajorityReligion()!!.isMajorReligion() diff --git a/core/src/com/unciv/ui/screens/overviewscreen/CityOverviewTable.kt b/core/src/com/unciv/ui/screens/overviewscreen/CityOverviewTable.kt index aeba428841..cbfbaa75dc 100644 --- a/core/src/com/unciv/ui/screens/overviewscreen/CityOverviewTable.kt +++ b/core/src/com/unciv/ui/screens/overviewscreen/CityOverviewTable.kt @@ -126,8 +126,8 @@ class CityOverviewTab( "Population" -> city2.population.population - city1.population.population WLTK -> city2.isWeLoveTheKingDayActive().compareTo(city1.isWeLoveTheKingDayActive()) GARRISON -> collator.compare( - city2.getCenterTile().militaryUnit?.name?.tr() ?: "", - city1.getCenterTile().militaryUnit?.name?.tr() ?: "", + city2.getGarrison()?.name?.tr() ?: "", + city1.getGarrison()?.name?.tr() ?: "", ) else -> { val stat = Stat.safeValueOf(persistableData.sortedBy)!! @@ -236,7 +236,7 @@ class CityOverviewTab( else -> cityInfoTableDetails.add() } - val garrisonUnit = city.getCenterTile().militaryUnit + val garrisonUnit = city.getGarrison() if (garrisonUnit == null) { cityInfoTableDetails.add() } else { @@ -270,7 +270,7 @@ class CityOverviewTab( else cityInfoTableTotal.add(viewingPlayer.cities.sumOf { it.getStat(stat) }.toCenteredLabel()) } cityInfoTableTotal.add(viewingPlayer.cities.count { it.isWeLoveTheKingDayActive() }.toCenteredLabel()) - cityInfoTableTotal.add(viewingPlayer.cities.count { it.getCenterTile().militaryUnit != null }.toCenteredLabel()) + cityInfoTableTotal.add(viewingPlayer.cities.count { it.isGarrisoned() }.toCenteredLabel()) cityInfoTableTotal.pack() } }