mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-19 20:28:56 +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))
|
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!!))
|
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!!))
|
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)
|
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 })
|
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())
|
if (!civ.gameInfo.gameParameters.nuclearWeaponsEnabled && isNuclearWeapon())
|
||||||
yield(RejectionReasonType.DisabledBySetting.toInstance())
|
result.add(RejectionReasonType.DisabledBySetting.toInstance())
|
||||||
|
|
||||||
for (unique in uniqueObjects.filter { it.conditionalsApply(civ, city) }) {
|
for (unique in uniqueObjects.filter { it.conditionalsApply(civ, city) }) {
|
||||||
when (unique.type) {
|
when (unique.type) {
|
||||||
UniqueType.Unbuildable ->
|
UniqueType.Unbuildable ->
|
||||||
yield(RejectionReasonType.Unbuildable.toInstance())
|
result.add(RejectionReasonType.Unbuildable.toInstance())
|
||||||
|
|
||||||
UniqueType.FoundCity -> if (civ.isCityState() || civ.isOneCityChallenger())
|
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())
|
UniqueType.MaxNumberBuildable -> if (civ.civConstructions.countConstructedObjects(
|
||||||
yield(RejectionReasonType.MaxNumberBuildable.toInstance())
|
this@BaseUnit
|
||||||
|
) >= unique.params[0].toInt()
|
||||||
|
)
|
||||||
|
result.add(RejectionReasonType.MaxNumberBuildable.toInstance())
|
||||||
|
|
||||||
else -> {}
|
else -> {}
|
||||||
}
|
}
|
||||||
@ -170,18 +174,29 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
|||||||
for ((resource, requiredAmount) in getResourceRequirements()) {
|
for ((resource, requiredAmount) in getResourceRequirements()) {
|
||||||
val availableAmount = civ.getCivResourcesByName()[resource]!!
|
val availableAmount = civ.getCivResourcesByName()[resource]!!
|
||||||
if (availableAmount < requiredAmount) {
|
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))
|
for (unique in civ.getMatchingUniques(UniqueType.CannotBuildUnits))
|
||||||
if (this@BaseUnit.matchesFilter(unique.params[0])) {
|
if (this@BaseUnit.matchesFilter(unique.params[0])) {
|
||||||
if (unique.conditionals.any { it.type == UniqueType.ConditionalBelowHappiness }){
|
if (unique.conditionals.any { it.type == UniqueType.ConditionalBelowHappiness }) {
|
||||||
yield(RejectionReasonType.CannotBeBuilt.toInstance(unique.text, true))
|
result.add(
|
||||||
}
|
RejectionReasonType.CannotBeBuilt.toInstance(
|
||||||
else yield(RejectionReasonType.CannotBeBuilt.toInstance())
|
unique.text,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
} else result.add(RejectionReasonType.CannotBeBuilt.toInstance())
|
||||||
}
|
}
|
||||||
|
return result.asSequence()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isBuildable(civInfo: Civilization) = getRejectionReasons(civInfo).none()
|
fun isBuildable(civInfo: Civilization) = getRejectionReasons(civInfo).none()
|
||||||
|
Reference in New Issue
Block a user