mirror of
https://github.com/yairm210/Unciv.git
synced 2025-03-09 20:29:50 +07:00
Modding: Unbuildable units can still be upgraded to
This commit is contained in:
parent
f974c3a8a5
commit
896fc575c0
@ -91,19 +91,16 @@ class RejectionReasons: HashSet<RejectionReasonInstance>() {
|
||||
|
||||
fun contains(rejectionReason: RejectionReason) = any { it.rejectionReason == rejectionReason }
|
||||
|
||||
fun isOKIgnoringRequirements(
|
||||
fun isOkForUnitUpgradeIgnoringRequirements(
|
||||
ignoreTechPolicyEraWonderRequirements: Boolean = false,
|
||||
ignoreResources: Boolean = false
|
||||
): Boolean {
|
||||
if (!ignoreTechPolicyEraWonderRequirements && !ignoreResources) return isEmpty()
|
||||
if (!ignoreTechPolicyEraWonderRequirements)
|
||||
return all { it.rejectionReason == RejectionReason.ConsumesResources }
|
||||
if (!ignoreResources)
|
||||
return all { it.rejectionReason in techPolicyEraWonderRequirements }
|
||||
return all {
|
||||
it.rejectionReason == RejectionReason.ConsumesResources ||
|
||||
it.rejectionReason in techPolicyEraWonderRequirements
|
||||
}
|
||||
var relevantRejectionReasons = this.asSequence().filterNot { it.rejectionReason == RejectionReason.Unbuildable }
|
||||
if (ignoreTechPolicyEraWonderRequirements)
|
||||
relevantRejectionReasons = relevantRejectionReasons.filterNot { it.rejectionReason in techPolicyEraWonderRequirements }
|
||||
if (ignoreResources)
|
||||
relevantRejectionReasons = relevantRejectionReasons.filterNot { it.rejectionReason == RejectionReason.ConsumesResources }
|
||||
return relevantRejectionReasons.any()
|
||||
}
|
||||
|
||||
fun hasAReasonToBeRemovedFromQueue(): Boolean {
|
||||
|
@ -556,7 +556,7 @@ class MapUnit : IsPartOfGameInfoSerialization {
|
||||
): Boolean {
|
||||
if (name == unitToUpgradeTo.name) return false
|
||||
val rejectionReasons = unitToUpgradeTo.getRejectionReasons(civInfo)
|
||||
if (rejectionReasons.isOKIgnoringRequirements(ignoreRequirements, ignoreResources)) return true
|
||||
if (rejectionReasons.isOkForUnitUpgradeIgnoringRequirements(ignoreRequirements, ignoreResources)) return true
|
||||
|
||||
// The resource requirements check above did not consider that the resources
|
||||
// this unit currently "consumes" are available for an upgrade too - if that's one of the
|
||||
@ -572,7 +572,7 @@ class MapUnit : IsPartOfGameInfoSerialization {
|
||||
// WHEN THE CURRENT UNIT IS NOT HERE
|
||||
civInfo.removeUnit(this)
|
||||
val canUpgrade = unitToUpgradeTo.getRejectionReasons(civInfo)
|
||||
.isOKIgnoringRequirements(ignoreTechPolicyEraWonderRequirements = ignoreRequirements)
|
||||
.isOkForUnitUpgradeIgnoringRequirements(ignoreTechPolicyEraWonderRequirements = ignoreRequirements)
|
||||
civInfo.addUnit(this)
|
||||
return canUpgrade
|
||||
}
|
||||
|
@ -263,28 +263,34 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
||||
if (cityInfo == null) return super.canBePurchasedWithStat(cityInfo, stat)
|
||||
val conditionalState = StateForConditionals(civInfo = cityInfo.civInfo, cityInfo = cityInfo)
|
||||
|
||||
return (cityInfo.getMatchingUniques(UniqueType.BuyUnitsIncreasingCost, conditionalState)
|
||||
.any {
|
||||
it.params[2] == stat.name
|
||||
&& matchesFilter(it.params[0])
|
||||
&& cityInfo.matchesFilter(it.params[3])
|
||||
}
|
||||
|| cityInfo.getMatchingUniques(UniqueType.BuyUnitsByProductionCost, conditionalState)
|
||||
.any { it.params[1] == stat.name && matchesFilter(it.params[0]) }
|
||||
|| cityInfo.getMatchingUniques(UniqueType.BuyUnitsWithStat, conditionalState)
|
||||
.any {
|
||||
it.params[1] == stat.name
|
||||
&& matchesFilter(it.params[0])
|
||||
&& cityInfo.matchesFilter(it.params[2])
|
||||
}
|
||||
|| cityInfo.getMatchingUniques(UniqueType.BuyUnitsForAmountStat, conditionalState)
|
||||
.any {
|
||||
it.params[2] == stat.name
|
||||
&& matchesFilter(it.params[0])
|
||||
&& cityInfo.matchesFilter(it.params[3])
|
||||
}
|
||||
|| return super.canBePurchasedWithStat(cityInfo, stat)
|
||||
)
|
||||
if (cityInfo.getMatchingUniques(UniqueType.BuyUnitsIncreasingCost, conditionalState)
|
||||
.any {
|
||||
it.params[2] == stat.name
|
||||
&& matchesFilter(it.params[0])
|
||||
&& cityInfo.matchesFilter(it.params[3])
|
||||
}) return true
|
||||
|
||||
if (cityInfo.getMatchingUniques(UniqueType.BuyUnitsByProductionCost, conditionalState)
|
||||
.any { it.params[1] == stat.name && matchesFilter(it.params[0]) })
|
||||
return true
|
||||
|
||||
if (cityInfo.getMatchingUniques(UniqueType.BuyUnitsWithStat, conditionalState)
|
||||
.any {
|
||||
it.params[1] == stat.name
|
||||
&& matchesFilter(it.params[0])
|
||||
&& cityInfo.matchesFilter(it.params[2])
|
||||
})
|
||||
return true
|
||||
|
||||
if (cityInfo.getMatchingUniques(UniqueType.BuyUnitsForAmountStat, conditionalState)
|
||||
.any {
|
||||
it.params[2] == stat.name
|
||||
&& matchesFilter(it.params[0])
|
||||
&& cityInfo.matchesFilter(it.params[3])
|
||||
})
|
||||
return true
|
||||
|
||||
return super.canBePurchasedWithStat(cityInfo, stat)
|
||||
}
|
||||
|
||||
override fun getBaseBuyCost(cityInfo: CityInfo, stat: Stat): Int? {
|
||||
@ -444,11 +450,6 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
||||
return getRejectionReasons(cityConstructions).isEmpty()
|
||||
}
|
||||
|
||||
fun isBuildableIgnoringTechs(civInfo: CivilizationInfo): Boolean {
|
||||
val rejectionReasons = getRejectionReasons(civInfo)
|
||||
return rejectionReasons.isOKIgnoringRequirements(ignoreTechPolicyEraWonderRequirements = true)
|
||||
}
|
||||
|
||||
override fun postBuildEvent(cityConstructions: CityConstructions, boughtWith: Stat?): Boolean {
|
||||
val civInfo = cityConstructions.cityInfo.civInfo
|
||||
val unit = civInfo.placeUnitNearTile(cityConstructions.cityInfo.location, name)
|
||||
|
Loading…
Reference in New Issue
Block a user