Fixed unit upgrade check (#8686)

* Fixed unit upgrade check

* Replaced sequences with list.asSequence()

* Deleted missed comment
This commit is contained in:
Gualdimar
2023-02-18 18:58:21 +02:00
committed by GitHub
parent ec2be2ceca
commit be5608fdea

View File

@ -137,30 +137,34 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
yieldAll(getRejectionReasons(civInfo, cityConstructions.city))
}
fun getRejectionReasons(civ: Civilization, city:City?=null): Sequence<RejectionReason> = sequence {
fun getRejectionReasons(civ: Civilization, city:City?=null): Sequence<RejectionReason> {
val result = mutableListOf<RejectionReason>()
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()