mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-28 14:24:43 -04:00
Unique types for building filters
This commit is contained in:
parent
4b5a709ee0
commit
59c5d2b10c
@ -483,7 +483,7 @@ open class TileInfo {
|
|||||||
// Tiles with no terrains, and no turns to build, are like great improvements - they're placeable
|
// 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.isEmpty() && improvement.turnsToBuild == 0 && isLand -> true
|
||||||
improvement.terrainsCanBeBuiltOn.contains(topTerrain.name) -> 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]
|
val filter = it.params[0]
|
||||||
if (filter == "River") return@any !isAdjacentToRiver()
|
if (filter == "River") return@any !isAdjacentToRiver()
|
||||||
else return@any !neighbors.any { neighbor -> neighbor.matchesFilter(filter) }
|
else return@any !neighbors.any { neighbor -> neighbor.matchesFilter(filter) }
|
||||||
|
@ -454,12 +454,12 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction {
|
|||||||
for (unique in uniqueObjects) {
|
for (unique in uniqueObjects) {
|
||||||
when (unique.placeholderText) {
|
when (unique.placeholderText) {
|
||||||
// Deprecated since 3.16.11, replace with "Not displayed [...] construction without []"
|
// 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]))
|
if (!cityConstructions.containsBuildingOrEquivalent(unique.params[0]))
|
||||||
rejectionReasons.add(RejectionReason.ShouldNotBeDisplayed)
|
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])
|
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.buildings && !cityConstructions.containsBuildingOrEquivalent(unique.params[0])
|
||||||
|| unique.params[0] in ruleSet.technologies && !civInfo.tech.isResearched(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)
|
"Enables nuclear weapon" -> if (!cityConstructions.cityInfo.civInfo.gameInfo.gameParameters.nuclearWeaponsEnabled)
|
||||||
rejectionReasons.add(RejectionReason.DisabledBySetting)
|
rejectionReasons.add(RejectionReason.DisabledBySetting)
|
||||||
|
|
||||||
"Must be on []" ->
|
UniqueType.MustBeOn.placeholderText ->
|
||||||
if (!cityCenter.matchesTerrainFilter(unique.params[0], civInfo))
|
if (!cityCenter.matchesTerrainFilter(unique.params[0], civInfo))
|
||||||
rejectionReasons.add(RejectionReason.MustBeOnTile.apply { errorMessage = unique.text })
|
rejectionReasons.add(RejectionReason.MustBeOnTile.apply { errorMessage = unique.text })
|
||||||
|
|
||||||
"Must not be on []" ->
|
UniqueType.MustNotBeOn.placeholderText ->
|
||||||
if (cityCenter.matchesTerrainFilter(unique.params[0], civInfo))
|
if (cityCenter.matchesTerrainFilter(unique.params[0], civInfo))
|
||||||
rejectionReasons.add(RejectionReason.MustNotBeOnTile.apply { errorMessage = unique.text })
|
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.
|
if (// Fresh water is special, in that rivers are not tiles themselves but also fit the filter.
|
||||||
!(unique.params[0] == "Fresh water" && cityCenter.isAdjacentToRiver())
|
!(unique.params[0] == "Fresh water" && cityCenter.isAdjacentToRiver())
|
||||||
&& cityCenter.getTilesInDistance(1).none { it.matchesFilter(unique.params[0], civInfo) }
|
&& cityCenter.getTilesInDistance(1).none { it.matchesFilter(unique.params[0], civInfo) }
|
||||||
)
|
)
|
||||||
rejectionReasons.add(RejectionReason.MustBeNextToTile.apply { errorMessage = unique.text })
|
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) })
|
if (cityCenter.getTilesInDistance(1).any { it.matchesFilter(unique.params[0], civInfo) })
|
||||||
rejectionReasons.add(RejectionReason.MustNotBeNextToTile.apply { errorMessage = unique.text })
|
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),
|
CannotBeBuiltWith("Cannot be built with [buildingName]", UniqueTarget.Building),
|
||||||
RequiresAnotherBuilding("Requires a [buildingName] in this city", 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 /////////////////////////////////////////
|
///////////////////////////////////////// UNIT UNIQUES /////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -379,7 +379,7 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
|||||||
if (isWaterUnit() && !cityConstructions.cityInfo.isCoastal())
|
if (isWaterUnit() && !cityConstructions.cityInfo.isCoastal())
|
||||||
rejectionReasons.add(RejectionReason.WaterUnitsInCoastalCities)
|
rejectionReasons.add(RejectionReason.WaterUnitsInCoastalCities)
|
||||||
val civInfo = cityConstructions.cityInfo.civInfo
|
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]
|
val filter = unique.params[0]
|
||||||
if (filter in civInfo.gameInfo.ruleSet.tileResources && !civInfo.hasResource(filter)
|
if (filter in civInfo.gameInfo.ruleSet.tileResources && !civInfo.hasResource(filter)
|
||||||
|| filter in civInfo.gameInfo.ruleSet.buildings && !cityConstructions.containsBuildingOrEquivalent(filter))
|
|| filter in civInfo.gameInfo.ruleSet.buildings && !cityConstructions.containsBuildingOrEquivalent(filter))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user