From 1daec65ee246ba3e17c735599de25720aeef561d Mon Sep 17 00:00:00 2001 From: Emandac <121508218+Emandac@users.noreply.github.com> Date: Fri, 1 Aug 2025 22:09:17 +0200 Subject: [PATCH] update fix 2 bug One where city couldn't spawn naval unit. The other when naval unit spawned they could get pushed to a costal tile. --- .../com/unciv/logic/civilization/managers/UnitManager.kt | 7 ++++++- core/src/com/unciv/models/ruleset/unit/BaseUnit.kt | 5 +++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/core/src/com/unciv/logic/civilization/managers/UnitManager.kt b/core/src/com/unciv/logic/civilization/managers/UnitManager.kt index 5c9db6f2ab..4d489d0d2a 100644 --- a/core/src/com/unciv/logic/civilization/managers/UnitManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/UnitManager.kt @@ -55,9 +55,14 @@ class UnitManager(val civInfo: Civilization) { val unit = civInfo.getEquivalentUnit(baseUnit) val citiesNotInResistance = civInfo.cities.filterNot { it.isInResistance() } + var canSpwanUnitOnWater = false + if (city != null) { + canSpwanUnitOnWater = city.getCenterTile().matchesFilter("Water") + } + val cityToAddTo = when { - unit.isWaterUnit && (city == null || !city.isCoastal()) -> + unit.isWaterUnit && (city == null || !city.isCoastal()) && !canSpwanUnitOnWater -> citiesNotInResistance.filter { it.isCoastal() }.randomOrNull() ?: civInfo.cities.filter { it.isCoastal() }.randomOrNull() city != null -> city diff --git a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt index 15999a2736..d0dc8a06bc 100644 --- a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt @@ -220,8 +220,9 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction { ): Sequence = sequence { val stateForConditionals = city?.state ?: civ.state - - if (city != null && isWaterUnit && !city.isCoastal()) + + // !city.getCenterTile().matchesFilter("Water") to allow the cities on Water tile to spwan naval units. + if (city != null && isWaterUnit && !city.isCoastal() && !city.getCenterTile().matchesFilter("Water")) yield(RejectionReasonType.WaterUnitsInCoastalCities.toInstance()) for (unique in getMatchingUniques(UniqueType.OnlyAvailable, GameContext.IgnoreConditionals))