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
This commit is contained in:
9kgsofrice 2020-12-02 17:13:15 +00:00 committed by GitHub
parent 2aac9ea314
commit 80688eb4a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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 ""