mirror of
https://github.com/yairm210/Unciv.git
synced 2025-08-03 04:27:56 -04:00
Updated canBeSettled to be able to settle water mountain tiles (#13717)
* Update for PR * Added doc to ConditionalInTiles * update * cut down on the code update
This commit is contained in:
parent
95eb97d517
commit
cfc640d0ee
@ -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,28 @@ 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+
|
||||
addedDistanceBeweenContinents)
|
||||
.any { it.isCityCenter() && it.getContinent() != getContinent() } -> false
|
||||
getTilesInDistance(modConstants.minimalCityDistance)
|
||||
.any { it.isCityCenter() && it.getContinent() == getContinent() } -> false
|
||||
|
@ -291,11 +291,12 @@ class Ruleset {
|
||||
personalities.clear()
|
||||
events.clear()
|
||||
}
|
||||
|
||||
|
||||
@Readonly fun allRulesetObjects(): Sequence<IRulesetObject> = RulesetFile.entries.asSequence().flatMap { it.getRulesetObjects(this) }
|
||||
@Readonly fun allUniques(): Sequence<Unique> = RulesetFile.entries.asSequence().flatMap { it.getUniques(this) }
|
||||
@Readonly fun allICivilopediaText(): Sequence<ICivilopediaText> = allRulesetObjects() + events.values.flatMap { it.choices }
|
||||
|
||||
|
||||
fun load(folderHandle: FileHandle) {
|
||||
// Note: Most files are loaded using createHashmap, which sets originRuleset automatically.
|
||||
// For other files containing IRulesetObject's we'll have to remember to do so manually - e.g. Tech.
|
||||
|
@ -187,6 +187,7 @@ class Terrain : RulesetStatsObject() {
|
||||
type.name -> true
|
||||
"Natural Wonder" -> type == TerrainType.NaturalWonder
|
||||
"Terrain Feature" -> type == TerrainType.TerrainFeature
|
||||
"Impassable" -> impassable
|
||||
|
||||
else -> false
|
||||
}
|
||||
|
@ -805,7 +805,8 @@ enum class UniqueType(
|
||||
|
||||
/////// tile conditionals
|
||||
ConditionalNeighborTiles("with [nonNegativeAmount] to [nonNegativeAmount] neighboring [tileFilter] tiles", UniqueTarget.Conditional),
|
||||
ConditionalInTiles("in [tileFilter] tiles", UniqueTarget.Conditional),
|
||||
ConditionalInTiles("in [tileFilter] tiles", UniqueTarget.Conditional,
|
||||
docDescription = "Can be used with FoundCity and FoundPuppetCity to only found cities in Water/Impassible tiles."),
|
||||
ConditionalInTilesNot("in tiles without [tileFilter]", UniqueTarget.Conditional),
|
||||
ConditionalNearTiles("within [positiveAmount] tiles of a [tileFilter]", UniqueTarget.Conditional),
|
||||
|
||||
|
@ -45,11 +45,11 @@ object UnitActionsFromUniques {
|
||||
UnitActionModifiers.getUsableUnitActionUniques(unit,
|
||||
UniqueType.FoundPuppetCity).firstOrNull() ?: return null
|
||||
|
||||
if (tile.isWater || tile.isImpassible()) return null
|
||||
|
||||
// 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.hasMovement() || !tile.canBeSettled())
|
||||
if (!unit.hasMovement() || !tile.canBeSettled(unique))
|
||||
return UnitAction(UnitActionType.FoundCity, 80f, action = null)
|
||||
|
||||
val hasActionModifiers = unique.modifiers.any { it.type?.targetTypes?.contains(
|
||||
|
@ -3535,6 +3535,8 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl
|
||||
Applicable to: Conditional
|
||||
|
||||
??? example "<in [tileFilter] tiles>"
|
||||
Can be used with FoundCity and FoundPuppetCity to only found cities in Water/Impassible tiles.
|
||||
|
||||
Example: "<in [Farm] tiles>"
|
||||
|
||||
Applicable to: Conditional
|
||||
|
Loading…
x
Reference in New Issue
Block a user