Fix the iusse with Continent

This commit is contained in:
Emandac 2025-08-18 20:00:53 +02:00
parent a095c7e223
commit 556937694c
3 changed files with 8 additions and 5 deletions

View File

@ -11,6 +11,7 @@ import com.unciv.models.ruleset.tile.ResourceType
import com.unciv.models.ruleset.unique.LocalUniqueCache
import com.unciv.models.ruleset.unique.GameContext
import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.ui.screens.worldscreen.unit.actions.UnitActionModifiers
object CityLocationTileRanker {
@ -66,8 +67,9 @@ object CityLocationTileRanker {
private fun canSettleTile(tile: Tile, unit: MapUnit, nearbyCities: Sequence<City>): Boolean {
val civ = unit.civ
val unitCanFoundUnique = unit.getMatchingUniques(UniqueType.ConditionalInTiles).firstOrNull()
println(unitCanFoundUnique)
val modConstants = civ.gameInfo.ruleset.modOptions.constants
if ( (!tile.isLand || tile.isImpassible())) return false
if (unitCanFoundUnique == null && (!tile.isLand || tile.isImpassible())) return false
if (tile.getOwner() != null && tile.getOwner() != civ) return false
for (city in nearbyCities) {
var addedDistanceBeweenContinents: Int

View File

@ -638,8 +638,7 @@ class Tile : IsPartOfGameInfoSerialization, Json.Serializable {
var addedDistanceBeweenContinents: Int
var canSettleInTileWithUnique = false
if (unitCanFoundUnique != null) {
canSettleInTileWithUnique = (isWater || isImpassible()) &&
unitCanFoundUnique.getModifiers(UniqueType.ConditionalInTiles).none{
canSettleInTileWithUnique = !unitCanFoundUnique.getModifiers(UniqueType.ConditionalInTiles).none{
matchesFilter(it.params[0])
}
}
@ -647,6 +646,7 @@ class Tile : IsPartOfGameInfoSerialization, Json.Serializable {
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.
*/
println(canSettleInTileWithUnique)
addedDistanceBeweenContinents = if (!canSettleInTileWithUnique) 1 else 0
@ -658,7 +658,7 @@ class Tile : IsPartOfGameInfoSerialization, Json.Serializable {
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() && unitCanFoundUnique != null } -> false
getTilesInDistance(modConstants.minimalCityDistance)
.any { it.isCityCenter() && it.getContinent() == getContinent() } -> false
else -> true

View File

@ -46,7 +46,8 @@ object UnitActionsFromUniques {
UnitActionModifiers.getUsableUnitActionUniques(unit,
UniqueType.FoundPuppetCity).firstOrNull() ?: return null
val uniqueModifier = unit.getMatchingUniques(UniqueType.ConditionalInTiles).firstOrNull()
val uniqueModifier = unique.getModifiers(UniqueType.ConditionalInTiles).firstOrNull()
println(uniqueModifier)
// 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