mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-26 13:27:22 -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 citiesNotInResistance = civInfo.cities.filterNot { it.isInResistance() }
|
||||
var canSpwanUnitOnWater = false
|
||||
var canSpawnUnitOnWater = false
|
||||
if (city != null) {
|
||||
canSpwanUnitOnWater = city.getCenterTile().matchesFilter("Water")
|
||||
canSpawnUnitOnWater = city.getCenterTile().matchesFilter("Water")
|
||||
}
|
||||
|
||||
|
||||
val cityToAddTo = when {
|
||||
unit.isWaterUnit && (city == null || !city.isCoastal()) && !canSpwanUnitOnWater ->
|
||||
unit.isWaterUnit && (city == null || !city.isCoastal()) && !canSpawnUnitOnWater ->
|
||||
citiesNotInResistance.filter { it.isCoastal() }.randomOrNull() ?:
|
||||
civInfo.cities.filter { it.isCoastal() }.randomOrNull()
|
||||
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.UnitTurnManager
|
||||
import com.unciv.logic.map.mapunit.movement.UnitMovement
|
||||
import com.unciv.models.UnitAction
|
||||
import com.unciv.models.ruleset.Ruleset
|
||||
import com.unciv.models.ruleset.tile.ResourceType
|
||||
import com.unciv.models.ruleset.tile.Terrain
|
||||
@ -630,13 +631,32 @@ class Tile : IsPartOfGameInfoSerialization, Json.Serializable {
|
||||
|
||||
return min(distance, wrappedDistance).toInt()
|
||||
}
|
||||
|
||||
@Readonly
|
||||
fun canBeSettled(): Boolean {
|
||||
|
||||
fun canBeSettled(unitCanFoundUnique: Unique?=null): Boolean {
|
||||
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 {
|
||||
isWater || isImpassible() -> false
|
||||
getTilesInDistance(modConstants.minimalCityDistanceOnDifferentContinents)
|
||||
canSettleInTileWithUnique -> false
|
||||
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
|
||||
getTilesInDistance(modConstants.minimalCityDistance)
|
||||
.any { it.isCityCenter() && it.getContinent() == getContinent() } -> false
|
||||
|
@ -221,7 +221,7 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
||||
|
||||
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"))
|
||||
yield(RejectionReasonType.WaterUnitsInCoastalCities.toInstance())
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user