mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 13:55:54 -04:00
Fix the crash for the Ai and rename some variables
This commit is contained in:
parent
8b37ba8182
commit
a9999ad0d7
@ -55,14 +55,14 @@ class UnitManager(val civInfo: Civilization) {
|
|||||||
|
|
||||||
val unit = civInfo.getEquivalentUnit(baseUnit)
|
val unit = civInfo.getEquivalentUnit(baseUnit)
|
||||||
val citiesNotInResistance = civInfo.cities.filterNot { it.isInResistance() }
|
val citiesNotInResistance = civInfo.cities.filterNot { it.isInResistance() }
|
||||||
var canSpwanUnitOnWater = false
|
var canSpawnUnitOnWater = false
|
||||||
if (city != null) {
|
if (city != null) {
|
||||||
canSpwanUnitOnWater = city.getCenterTile().matchesFilter("Water")
|
canSpawnUnitOnWater = city.getCenterTile().matchesFilter("Water")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val cityToAddTo = when {
|
val cityToAddTo = when {
|
||||||
unit.isWaterUnit && (city == null || !city.isCoastal()) && !canSpwanUnitOnWater ->
|
unit.isWaterUnit && (city == null || !city.isCoastal()) && !canSpawnUnitOnWater ->
|
||||||
citiesNotInResistance.filter { it.isCoastal() }.randomOrNull() ?:
|
citiesNotInResistance.filter { it.isCoastal() }.randomOrNull() ?:
|
||||||
civInfo.cities.filter { it.isCoastal() }.randomOrNull()
|
civInfo.cities.filter { it.isCoastal() }.randomOrNull()
|
||||||
city != null -> city
|
city != null -> city
|
||||||
|
@ -19,6 +19,7 @@ import com.unciv.logic.map.mapgenerator.MapResourceSetting
|
|||||||
import com.unciv.logic.map.mapunit.MapUnit
|
import com.unciv.logic.map.mapunit.MapUnit
|
||||||
import com.unciv.logic.map.mapunit.UnitTurnManager
|
import com.unciv.logic.map.mapunit.UnitTurnManager
|
||||||
import com.unciv.logic.map.mapunit.movement.UnitMovement
|
import com.unciv.logic.map.mapunit.movement.UnitMovement
|
||||||
|
import com.unciv.models.UnitAction
|
||||||
import com.unciv.models.ruleset.Ruleset
|
import com.unciv.models.ruleset.Ruleset
|
||||||
import com.unciv.models.ruleset.tile.ResourceType
|
import com.unciv.models.ruleset.tile.ResourceType
|
||||||
import com.unciv.models.ruleset.tile.Terrain
|
import com.unciv.models.ruleset.tile.Terrain
|
||||||
@ -630,13 +631,32 @@ class Tile : IsPartOfGameInfoSerialization, Json.Serializable {
|
|||||||
|
|
||||||
return min(distance, wrappedDistance).toInt()
|
return min(distance, wrappedDistance).toInt()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Readonly
|
fun canBeSettled(unitCanFoundUnique: Unique?=null): Boolean {
|
||||||
fun canBeSettled(): Boolean {
|
|
||||||
val modConstants = tileMap.gameInfo.ruleset.modOptions.constants
|
val modConstants = tileMap.gameInfo.ruleset.modOptions.constants
|
||||||
|
var addedDistanceBeweenContinents: Int
|
||||||
|
var canSettleInTileWithUnique = false
|
||||||
|
if (unitCanFoundUnique != null) {
|
||||||
|
canSettleInTileWithUnique = (isWater || isImpassible()) &&
|
||||||
|
unitCanFoundUnique.getModifiers(UniqueType.ConditionalInTiles).none{
|
||||||
|
matchesFilter(it.params[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Putting the ! to make sure the player/Ai doesn't place cities too near each other.
|
||||||
|
Because when .none return False when one element has a match.
|
||||||
|
*/
|
||||||
|
|
||||||
|
addedDistanceBeweenContinents = if (!canSettleInTileWithUnique) 1 else 0
|
||||||
|
|
||||||
return when {
|
return when {
|
||||||
isWater || isImpassible() -> false
|
canSettleInTileWithUnique -> false
|
||||||
getTilesInDistance(modConstants.minimalCityDistanceOnDifferentContinents)
|
getTilesInDistance(modConstants.minimalCityDistanceOnDifferentContinents+
|
||||||
|
/*
|
||||||
|
Make sure, settler unit has the unique with condition <in [tileFilter] tiles>.
|
||||||
|
Because this can crash the game in automateSettlerActions in SpecificUnitAutomation.kt.
|
||||||
|
*/
|
||||||
|
if (unitCanFoundUnique != null) addedDistanceBeweenContinents else 0)
|
||||||
.any { it.isCityCenter() && it.getContinent() != getContinent() } -> false
|
.any { it.isCityCenter() && it.getContinent() != getContinent() } -> false
|
||||||
getTilesInDistance(modConstants.minimalCityDistance)
|
getTilesInDistance(modConstants.minimalCityDistance)
|
||||||
.any { it.isCityCenter() && it.getContinent() == getContinent() } -> false
|
.any { it.isCityCenter() && it.getContinent() == getContinent() } -> false
|
||||||
|
@ -221,7 +221,7 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
|||||||
|
|
||||||
val stateForConditionals = city?.state ?: civ.state
|
val stateForConditionals = city?.state ?: civ.state
|
||||||
|
|
||||||
// !city.getCenterTile().matchesFilter("Water") to allow the cities on Water tile to spwan naval units.
|
// !city.getCenterTile().matchesFilter("Water") to allow the cities on Water tile to spawn naval units.
|
||||||
if (city != null && isWaterUnit && !city.isCoastal() && !city.getCenterTile().matchesFilter("Water"))
|
if (city != null && isWaterUnit && !city.isCoastal() && !city.getCenterTile().matchesFilter("Water"))
|
||||||
yield(RejectionReasonType.WaterUnitsInCoastalCities.toInstance())
|
yield(RejectionReasonType.WaterUnitsInCoastalCities.toInstance())
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user