mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-29 23:10:39 -04:00
mini update
This commit is contained in:
parent
afcfed2450
commit
a095c7e223
@ -37,7 +37,7 @@ object CityLocationTileRanker {
|
|||||||
val possibleCityLocations = unit.getTile().getTilesInDistance(range)
|
val possibleCityLocations = unit.getTile().getTilesInDistance(range)
|
||||||
// Filter out tiles that we can't actually found on
|
// Filter out tiles that we can't actually found on
|
||||||
.filter { tile -> uniques.any { it.conditionalsApply(GameContext(unit = unit, tile = tile)) } }
|
.filter { tile -> uniques.any { it.conditionalsApply(GameContext(unit = unit, tile = tile)) } }
|
||||||
.filter { canSettleTile(it, unit.civ, nearbyCities) && (unit.getTile() == it || unit.movement.canMoveTo(it)) }
|
.filter { canSettleTile(it, unit, nearbyCities) && (unit.getTile() == it || unit.movement.canMoveTo(it)) }
|
||||||
val uniqueCache = LocalUniqueCache()
|
val uniqueCache = LocalUniqueCache()
|
||||||
val bestTilesToFoundCity = BestTilesToFoundCity()
|
val bestTilesToFoundCity = BestTilesToFoundCity()
|
||||||
val baseTileMap = HashMap<Tile, Float>()
|
val baseTileMap = HashMap<Tile, Float>()
|
||||||
@ -63,11 +63,28 @@ object CityLocationTileRanker {
|
|||||||
return bestTilesToFoundCity
|
return bestTilesToFoundCity
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun canSettleTile(tile: Tile, civ: Civilization, nearbyCities: Sequence<City>): Boolean {
|
private fun canSettleTile(tile: Tile, unit: MapUnit, nearbyCities: Sequence<City>): Boolean {
|
||||||
|
val civ = unit.civ
|
||||||
|
val unitCanFoundUnique = unit.getMatchingUniques(UniqueType.ConditionalInTiles).firstOrNull()
|
||||||
val modConstants = civ.gameInfo.ruleset.modOptions.constants
|
val modConstants = civ.gameInfo.ruleset.modOptions.constants
|
||||||
if (!tile.isLand || tile.isImpassible()) return false
|
if ( (!tile.isLand || tile.isImpassible())) return false
|
||||||
if (tile.getOwner() != null && tile.getOwner() != civ) return false
|
if (tile.getOwner() != null && tile.getOwner() != civ) return false
|
||||||
for (city in nearbyCities) {
|
for (city in nearbyCities) {
|
||||||
|
var addedDistanceBeweenContinents: Int
|
||||||
|
var canSettleInTileWithUnique = false
|
||||||
|
if (unitCanFoundUnique != null) {
|
||||||
|
canSettleInTileWithUnique = (tile.isWater || tile.isImpassible()) &&
|
||||||
|
unitCanFoundUnique.getModifiers(UniqueType.ConditionalInTiles).none{
|
||||||
|
tile.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
|
||||||
|
|
||||||
val distance = city.getCenterTile().aerialDistanceTo(tile)
|
val distance = city.getCenterTile().aerialDistanceTo(tile)
|
||||||
// todo: AgreedToNotSettleNearUs is hardcoded for now but it may be better to softcode it below in getDistanceToCityModifier
|
// todo: AgreedToNotSettleNearUs is hardcoded for now but it may be better to softcode it below in getDistanceToCityModifier
|
||||||
if (distance <= 6 && civ.knows(city.civ)
|
if (distance <= 6 && civ.knows(city.civ)
|
||||||
@ -79,7 +96,8 @@ object CityLocationTileRanker {
|
|||||||
if (tile.getContinent() == city.getCenterTile().getContinent()) {
|
if (tile.getContinent() == city.getCenterTile().getContinent()) {
|
||||||
if (distance <= modConstants.minimalCityDistance) return false
|
if (distance <= modConstants.minimalCityDistance) return false
|
||||||
} else {
|
} else {
|
||||||
if (distance <= modConstants.minimalCityDistanceOnDifferentContinents) return false
|
if (distance <= modConstants.minimalCityDistanceOnDifferentContinents+
|
||||||
|
if (unitCanFoundUnique != null) addedDistanceBeweenContinents else 0) return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
@ -46,11 +46,15 @@ object UnitActionsFromUniques {
|
|||||||
UnitActionModifiers.getUsableUnitActionUniques(unit,
|
UnitActionModifiers.getUsableUnitActionUniques(unit,
|
||||||
UniqueType.FoundPuppetCity).firstOrNull() ?: return null
|
UniqueType.FoundPuppetCity).firstOrNull() ?: return null
|
||||||
|
|
||||||
|
val uniqueModifier = unit.getMatchingUniques(UniqueType.ConditionalInTiles).firstOrNull()
|
||||||
|
|
||||||
|
// do this check like that settler unique that don't have ConditionalInTiles does not show the grayed out button on water/moutain
|
||||||
|
if (!unique.hasModifier(UniqueType.ConditionalInTiles) && (tile.isWater || tile.isImpassible())) return null
|
||||||
|
|
||||||
// Spain should still be able to build Conquistadors in a one city challenge - but can't settle them
|
// Spain should still be able to build Conquistadors in a one city challenge - but can't settle them
|
||||||
if (unit.civ.isOneCityChallenger() && unit.civ.hasEverOwnedOriginalCapital) return null
|
if (unit.civ.isOneCityChallenger() && unit.civ.hasEverOwnedOriginalCapital) return null
|
||||||
|
|
||||||
if (!unit.hasMovement() || !tile.canBeSettled())
|
if (!unit.hasMovement() || !tile.canBeSettled(uniqueModifier))
|
||||||
return UnitAction(UnitActionType.FoundCity, 80f, action = null)
|
return UnitAction(UnitActionType.FoundCity, 80f, action = null)
|
||||||
|
|
||||||
val hasActionModifiers = unique.modifiers.any { it.type?.targetTypes?.contains(
|
val hasActionModifiers = unique.modifiers.any { it.type?.targetTypes?.contains(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user