diff --git a/core/src/com/unciv/logic/automation/WorkerAutomation.kt b/core/src/com/unciv/logic/automation/WorkerAutomation.kt index dfc1af1c52..ff73dea1c1 100644 --- a/core/src/com/unciv/logic/automation/WorkerAutomation.kt +++ b/core/src/com/unciv/logic/automation/WorkerAutomation.kt @@ -50,7 +50,7 @@ class WorkerAutomation(val unit: MapUnit) { && tileCanBeImproved(it, unit.civInfo) } } - val mostUndevelopedCity = unit.civInfo.cities + val mostUndevelopedCity = unit.civInfo.cities.asSequence() .filter { citiesToNumberOfUnimprovedTiles[it.id]!! > 0 } .sortedByDescending { citiesToNumberOfUnimprovedTiles[it.id] } .firstOrNull { unit.movement.canReach(it.getCenterTile()) } //goto most undeveloped city diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index 9fc9542910..65f2db8619 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -568,6 +568,25 @@ class MapUnit { return percent } + fun canTransport(mapUnit: MapUnit): Boolean { + if(type!=UnitType.WaterAircraftCarrier && type!=UnitType.WaterMissileCarrier) + return false + if(!mapUnit.type.isAirUnit()) return false + if(type==UnitType.WaterMissileCarrier && mapUnit.type!=UnitType.Missile) + return false + if(type==UnitType.WaterAircraftCarrier && mapUnit.type==UnitType.Missile) + return false + if(owner!=mapUnit.owner) return false + + var unitCapacity = 0 + if (getUniques().contains("Can carry 2 aircraft")) unitCapacity=2 + unitCapacity += getUniques().count { it == "Can carry 1 extra air unit" } + + if(currentTile.airUnits.filter { it.isTransported }.size>=unitCapacity) return false + + return true + } + fun interceptDamagePercentBonus():Int{ var sum=0 for(unique in getUniques().filter { it.startsWith("Bonus when intercepting") }){ diff --git a/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt b/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt index c8cece644a..931eef69bd 100644 --- a/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt +++ b/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt @@ -239,15 +239,16 @@ class UnitMovementAlgorithms(val unit:MapUnit) { unit.action=null // unfortify/setup after moving // If this unit is a carrier, keep record of its air payload whereabouts. - var origin = unit.getTile() - + val origin = unit.getTile() unit.removeFromTile() unit.putInTile(destination) - + for(payload in origin.getUnits().filter { it.isTransported }){ // bring along the payloads - payload.removeFromTile() - payload.putInTile(destination) - payload.isTransported = true // restore the flag to not leave the payload in the city + if(unit.canTransport(payload)) { + payload.removeFromTile() + payload.putInTile(destination) + payload.isTransported = true // restore the flag to not leave the payload in the city + } } // Unit maintenance changed @@ -295,15 +296,9 @@ class UnitMovementAlgorithms(val unit:MapUnit) { if (tile.militaryUnit != null) { val unitAtDestination = tile.militaryUnit!! - - var unitCapacity = if (unitAtDestination.getUniques().contains("Can carry 2 aircraft")) 2 else 0 - unitCapacity += unitAtDestination.getUniques().count { it == "Can carry 1 extra air unit" } - - return ((unitAtDestination.type.isAircraftCarrierUnit() && !unit.type.isMissileUnit()) || - (unitAtDestination.type.isMissileCarrierUnit() && unit.type.isMissileUnit())) - && unitAtDestination.owner == unit.owner && tile.airUnits.filter { it.isTransported }.size < unitCapacity - } else - return false + return unitAtDestination.canTransport(unit) + } + return false } diff --git a/core/src/com/unciv/models/ruleset/unit/UnitType.kt b/core/src/com/unciv/models/ruleset/unit/UnitType.kt index 3818a53817..3eabb6f736 100644 --- a/core/src/com/unciv/models/ruleset/unit/UnitType.kt +++ b/core/src/com/unciv/models/ruleset/unit/UnitType.kt @@ -72,9 +72,6 @@ enum class UnitType{ || this==Missile } - fun isMissileUnit():Boolean{ - return this == Missile - } fun isAircraftCarrierUnit():Boolean{ return this == WaterAircraftCarrier diff --git a/core/src/com/unciv/ui/worldscreen/WorldMapHolder.kt b/core/src/com/unciv/ui/worldscreen/WorldMapHolder.kt index 18d38acf1a..beb8015269 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldMapHolder.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldMapHolder.kt @@ -130,7 +130,7 @@ class WorldMapHolder(internal val worldScreen: WorldScreen, internal val tileMap unitList.addAll(tileInfo.getCity()!!.getCenterTile().getUnits()) } else if (tileInfo.militaryUnit!=null && (tileInfo.militaryUnit!!.type.isAircraftCarrierUnit() || tileInfo.militaryUnit!!.type.isMissileCarrierUnit()) && - tileInfo.militaryUnit!!.civInfo==worldScreen.viewingCiv && !tileInfo.airUnits.isEmpty()) { + tileInfo.militaryUnit!!.civInfo==worldScreen.viewingCiv && tileInfo.airUnits.isNotEmpty()) { unitList.addAll(tileInfo.getUnits()) }