mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-15 10:18:26 +07:00
Fixed unit upgrade check (#8686)
* Fixed unit upgrade check * Replaced sequences with list.asSequence() * Deleted missed comment
This commit is contained in:
@ -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()
|
||||
|
Reference in New Issue
Block a user