From 80688eb4a5eb6fbae31ec1da975c17ecd3e99108 Mon Sep 17 00:00:00 2001 From: 9kgsofrice <65415105+9kgsofrice@users.noreply.github.com> Date: Wed, 2 Dec 2020 17:13:15 +0000 Subject: [PATCH] Hide build menu constructions requiring resources with unique (#3370) * "Not displayed as an available construction without []" Hides constructions that are missing resources * combined unique check * removed duplicate code * clarified if clause * simplified check and obsoleted existing unique * previous iteration did not work due to OR instead of AND * if we don't check to see if this is actually a resource, we get a crash --- core/src/com/unciv/models/ruleset/unit/BaseUnit.kt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt index 22ef016bb1..f62322c5a8 100644 --- a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt @@ -5,6 +5,7 @@ import com.unciv.logic.city.CityConstructions import com.unciv.logic.city.IConstruction import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.map.MapUnit +import com.unciv.models.ruleset.Building import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.Unique import com.unciv.models.translations.Translations @@ -122,9 +123,14 @@ class BaseUnit : INamed, IConstruction { fun getRejectionReason(construction: CityConstructions): String { if (unitType.isWaterUnit() && !construction.cityInfo.getCenterTile().isCoastalTile()) return "Can only build water units in coastal cities" - if (uniqueObjects.any { it.placeholderText == "Not displayed as an available construction unless [] is built" - && !construction.containsBuildingOrEquivalent(it.params[0]) }) - return "Should not be displayed" + for (unique in uniqueObjects.filter { it.placeholderText == "Not displayed as an available construction without []"}) { + val filter = unique.params[0] + return if (construction.containsBuildingOrEquivalent(filter) + || (construction.cityInfo.civInfo.gameInfo.ruleSet.tileResources.containsKey(filter) + && construction.cityInfo.civInfo.hasResource(filter))) + "" + else "Should not be displayed" + } val civRejectionReason = getRejectionReason(construction.cityInfo.civInfo) if (civRejectionReason != "") return civRejectionReason return ""