diff --git a/core/src/com/unciv/logic/civilization/transients/CivInfoStatsForNextTurn.kt b/core/src/com/unciv/logic/civilization/transients/CivInfoStatsForNextTurn.kt index 472135a9bc..bb06d71270 100644 --- a/core/src/com/unciv/logic/civilization/transients/CivInfoStatsForNextTurn.kt +++ b/core/src/com/unciv/logic/civilization/transients/CivInfoStatsForNextTurn.kt @@ -169,7 +169,7 @@ class CivInfoStatsForNextTurn(val civInfo: Civilization) { //City-States bonuses for (otherCiv in civInfo.getKnownCivs()) { if (!otherCiv.isCityState()) continue - if (!otherCiv.getDiplomacyManager(civInfo.civName)!!.isRelationshipLevelEQ(RelationshipLevel.Ally)) + if (otherCiv.getDiplomacyManager(civInfo.civName)!!.relationshipIgnoreAfraid() != RelationshipLevel.Ally) continue for (unique in civInfo.getMatchingUniques(UniqueType.CityStateStatPercent)) { statMap.add( diff --git a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt index 8576282001..6275aae3b4 100644 --- a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt @@ -174,13 +174,7 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction { override fun getRejectionReasons(cityConstructions: CityConstructions): Sequence = sequence { if (isWaterUnit() && !cityConstructions.city.isCoastal()) yield(RejectionReasonType.WaterUnitsInCoastalCities.toInstance()) - if (isAirUnit()) { - val fakeUnit = getMapUnit(cityConstructions.city.civ, Constants.NO_ID) - val canUnitEnterTile = fakeUnit.movement.canMoveTo(cityConstructions.city.getCenterTile()) - if (!canUnitEnterTile) - yield(RejectionReasonType.NoPlaceToPutUnit.toInstance()) - fakeUnit.destroy() - } + val civInfo = cityConstructions.city.civ for (unique in getMatchingUniques(UniqueType.OnlyAvailable, StateForConditionals.IgnoreConditionals)) @@ -197,6 +191,15 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction { yield(RejectionReasonType.PopulationRequirement.toInstance(unique.text)) yieldAll(getRejectionReasons(civInfo, cityConstructions.city)) + + // Expensive, since adding and removing the fake unit causes side-effects + if (isAirUnit()) { + val fakeUnit = getMapUnit(cityConstructions.city.civ, Constants.NO_ID) + val canUnitEnterTile = fakeUnit.movement.canMoveTo(cityConstructions.city.getCenterTile()) + if (!canUnitEnterTile) + yield(RejectionReasonType.NoPlaceToPutUnit.toInstance()) + fakeUnit.destroy() + } } fun getRejectionReasons(