mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-04 15:27:50 +07:00
Unique types for building filters
This commit is contained in:
@ -483,7 +483,7 @@ open class TileInfo {
|
||||
// Tiles with no terrains, and no turns to build, are like great improvements - they're placeable
|
||||
improvement.terrainsCanBeBuiltOn.isEmpty() && improvement.turnsToBuild == 0 && isLand -> true
|
||||
improvement.terrainsCanBeBuiltOn.contains(topTerrain.name) -> true
|
||||
improvement.uniqueObjects.filter { it.placeholderText == "Must be next to []" }.any {
|
||||
improvement.uniqueObjects.filter { it.type == UniqueType.MustBeNextTo }.any {
|
||||
val filter = it.params[0]
|
||||
if (filter == "River") return@any !isAdjacentToRiver()
|
||||
else return@any !neighbors.any { neighbor -> neighbor.matchesFilter(filter) }
|
||||
|
@ -454,12 +454,12 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction {
|
||||
for (unique in uniqueObjects) {
|
||||
when (unique.placeholderText) {
|
||||
// Deprecated since 3.16.11, replace with "Not displayed [...] construction without []"
|
||||
"Not displayed as an available construction unless [] is built" ->
|
||||
UniqueType.NotDisplayedUnlessOtherBuildingBuilt.placeholderText ->
|
||||
if (!cityConstructions.containsBuildingOrEquivalent(unique.params[0]))
|
||||
rejectionReasons.add(RejectionReason.ShouldNotBeDisplayed)
|
||||
//
|
||||
|
||||
"Not displayed as an available construction without []" ->
|
||||
UniqueType.NotDisplayedWithout.placeholderText ->
|
||||
if (unique.params[0] in ruleSet.tileResources && !civInfo.hasResource(unique.params[0])
|
||||
|| unique.params[0] in ruleSet.buildings && !cityConstructions.containsBuildingOrEquivalent(unique.params[0])
|
||||
|| unique.params[0] in ruleSet.technologies && !civInfo.tech.isResearched(unique.params[0])
|
||||
@ -470,22 +470,22 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction {
|
||||
"Enables nuclear weapon" -> if (!cityConstructions.cityInfo.civInfo.gameInfo.gameParameters.nuclearWeaponsEnabled)
|
||||
rejectionReasons.add(RejectionReason.DisabledBySetting)
|
||||
|
||||
"Must be on []" ->
|
||||
UniqueType.MustBeOn.placeholderText ->
|
||||
if (!cityCenter.matchesTerrainFilter(unique.params[0], civInfo))
|
||||
rejectionReasons.add(RejectionReason.MustBeOnTile.apply { errorMessage = unique.text })
|
||||
|
||||
"Must not be on []" ->
|
||||
UniqueType.MustNotBeOn.placeholderText ->
|
||||
if (cityCenter.matchesTerrainFilter(unique.params[0], civInfo))
|
||||
rejectionReasons.add(RejectionReason.MustNotBeOnTile.apply { errorMessage = unique.text })
|
||||
|
||||
"Must be next to []" ->
|
||||
UniqueType.MustBeNextTo.placeholderText ->
|
||||
if (// Fresh water is special, in that rivers are not tiles themselves but also fit the filter.
|
||||
!(unique.params[0] == "Fresh water" && cityCenter.isAdjacentToRiver())
|
||||
&& cityCenter.getTilesInDistance(1).none { it.matchesFilter(unique.params[0], civInfo) }
|
||||
)
|
||||
rejectionReasons.add(RejectionReason.MustBeNextToTile.apply { errorMessage = unique.text })
|
||||
|
||||
"Must not be next to []" ->
|
||||
UniqueType.MustNotBeNextTo.placeholderText ->
|
||||
if (cityCenter.getTilesInDistance(1).any { it.matchesFilter(unique.params[0], civInfo) })
|
||||
rejectionReasons.add(RejectionReason.MustNotBeNextToTile.apply { errorMessage = unique.text })
|
||||
|
||||
|
@ -197,6 +197,16 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget, val flags:
|
||||
CannotBeBuiltWith("Cannot be built with [buildingName]", UniqueTarget.Building),
|
||||
RequiresAnotherBuilding("Requires a [buildingName] in this city", UniqueTarget.Building),
|
||||
|
||||
NotDisplayedWithout("Not displayed as an available construction without [buildingName/tech/resource/policy]", UniqueTarget.Building, UniqueTarget.Unit),
|
||||
//UniqueType added in 3.18.4
|
||||
@Deprecated("As of 3.16.11", ReplaceWith("Not displayed as an available construction without [buildingName]"), DeprecationLevel.WARNING)
|
||||
NotDisplayedUnlessOtherBuildingBuilt("Not displayed as an available construction unless [buildingName] is built", UniqueTarget.Building),
|
||||
|
||||
MustBeOn("Must be on [terrainFilter]", UniqueTarget.Building),
|
||||
MustNotBeOn("Must not be on [terrainFilter]", UniqueTarget.Building),
|
||||
MustBeNextTo("Must be next to [terrainFilter]", UniqueTarget.Building),
|
||||
MustNotBeNextTo("Must not be next to [terrainFilter]", UniqueTarget.Building),
|
||||
|
||||
|
||||
///////////////////////////////////////// UNIT UNIQUES /////////////////////////////////////////
|
||||
|
||||
|
@ -379,7 +379,7 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
||||
if (isWaterUnit() && !cityConstructions.cityInfo.isCoastal())
|
||||
rejectionReasons.add(RejectionReason.WaterUnitsInCoastalCities)
|
||||
val civInfo = cityConstructions.cityInfo.civInfo
|
||||
for (unique in uniqueObjects.filter { it.placeholderText == "Not displayed as an available construction without []" }) {
|
||||
for (unique in uniqueObjects.filter { it.type == UniqueType.NotDisplayedWithout }) {
|
||||
val filter = unique.params[0]
|
||||
if (filter in civInfo.gameInfo.ruleSet.tileResources && !civInfo.hasResource(filter)
|
||||
|| filter in civInfo.gameInfo.ruleSet.buildings && !cityConstructions.containsBuildingOrEquivalent(filter))
|
||||
|
Reference in New Issue
Block a user