From be5608fdea878c3ed4c602a3bcdbe035eedaf106 Mon Sep 17 00:00:00 2001 From: Gualdimar Date: Sat, 18 Feb 2023 18:58:21 +0200 Subject: [PATCH] Fixed unit upgrade check (#8686) * Fixed unit upgrade check * Replaced sequences with list.asSequence() * Deleted missed comment --- .../com/unciv/models/ruleset/unit/BaseUnit.kt | 45 ++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt index 15927c3a13..9f8159dbdb 100644 --- a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt @@ -137,30 +137,34 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction { yieldAll(getRejectionReasons(civInfo, cityConstructions.city)) } - fun getRejectionReasons(civ: Civilization, city:City?=null): Sequence = sequence { + fun getRejectionReasons(civ: Civilization, city:City?=null): Sequence { + val result = mutableListOf() if (requiredTech != null && !civ.tech.isResearched(requiredTech!!)) - yield(RejectionReasonType.RequiresTech.toInstance("$requiredTech not researched")) + result.add(RejectionReasonType.RequiresTech.toInstance("$requiredTech not researched")) if (obsoleteTech != null && civ.tech.isResearched(obsoleteTech!!)) - yield(RejectionReasonType.Obsoleted.toInstance("Obsolete by $obsoleteTech")) + result.add(RejectionReasonType.Obsoleted.toInstance("Obsolete by $obsoleteTech")) if (uniqueTo != null && uniqueTo != civ.civName) - yield(RejectionReasonType.UniqueToOtherNation.toInstance("Unique to $uniqueTo")) + result.add(RejectionReasonType.UniqueToOtherNation.toInstance("Unique to $uniqueTo")) if (civ.cache.uniqueUnits.any { it.replaces == name }) - yield(RejectionReasonType.ReplacedByOurUnique.toInstance("Our unique unit replaces this")) + result.add(RejectionReasonType.ReplacedByOurUnique.toInstance("Our unique unit replaces this")) if (!civ.gameInfo.gameParameters.nuclearWeaponsEnabled && isNuclearWeapon()) - yield(RejectionReasonType.DisabledBySetting.toInstance()) + result.add(RejectionReasonType.DisabledBySetting.toInstance()) for (unique in uniqueObjects.filter { it.conditionalsApply(civ, city) }) { when (unique.type) { UniqueType.Unbuildable -> - yield(RejectionReasonType.Unbuildable.toInstance()) + result.add(RejectionReasonType.Unbuildable.toInstance()) UniqueType.FoundCity -> if (civ.isCityState() || civ.isOneCityChallenger()) - yield(RejectionReasonType.NoSettlerForOneCityPlayers.toInstance()) + result.add(RejectionReasonType.NoSettlerForOneCityPlayers.toInstance()) - UniqueType.MaxNumberBuildable -> if (civ.civConstructions.countConstructedObjects(this@BaseUnit) >= unique.params[0].toInt()) - yield(RejectionReasonType.MaxNumberBuildable.toInstance()) + UniqueType.MaxNumberBuildable -> if (civ.civConstructions.countConstructedObjects( + this@BaseUnit + ) >= unique.params[0].toInt() + ) + result.add(RejectionReasonType.MaxNumberBuildable.toInstance()) else -> {} } @@ -170,18 +174,29 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction { for ((resource, requiredAmount) in getResourceRequirements()) { val availableAmount = civ.getCivResourcesByName()[resource]!! if (availableAmount < requiredAmount) { - yield(RejectionReasonType.ConsumesResources.toInstance(resource.getNeedMoreAmountString(requiredAmount - availableAmount))) + result.add( + RejectionReasonType.ConsumesResources.toInstance( + resource.getNeedMoreAmountString( + requiredAmount - availableAmount + ) + ) + ) } } } for (unique in civ.getMatchingUniques(UniqueType.CannotBuildUnits)) if (this@BaseUnit.matchesFilter(unique.params[0])) { - if (unique.conditionals.any { it.type == UniqueType.ConditionalBelowHappiness }){ - yield(RejectionReasonType.CannotBeBuilt.toInstance(unique.text, true)) - } - else yield(RejectionReasonType.CannotBeBuilt.toInstance()) + if (unique.conditionals.any { it.type == UniqueType.ConditionalBelowHappiness }) { + result.add( + RejectionReasonType.CannotBeBuilt.toInstance( + unique.text, + true + ) + ) + } else result.add(RejectionReasonType.CannotBeBuilt.toInstance()) } + return result.asSequence() } fun isBuildable(civInfo: Civilization) = getRejectionReasons(civInfo).none()