mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-26 21:35:14 -04:00
More BaseUnit unique-finding including type uniques
This commit is contained in:
parent
bc9b5615eb
commit
97b80973d1
@ -137,17 +137,14 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
|||||||
yield(RejectionReasonType.NoPlaceToPutUnit.toInstance())
|
yield(RejectionReasonType.NoPlaceToPutUnit.toInstance())
|
||||||
}
|
}
|
||||||
val civInfo = cityConstructions.city.civ
|
val civInfo = cityConstructions.city.civ
|
||||||
for (unique in uniqueObjects) {
|
|
||||||
when (unique.type) {
|
|
||||||
UniqueType.OnlyAvailableWhen -> if (!unique.conditionalsApply(civInfo, cityConstructions.city))
|
|
||||||
yield(RejectionReasonType.ShouldNotBeDisplayed.toInstance())
|
|
||||||
|
|
||||||
UniqueType.RequiresPopulation -> if (unique.params[0].toInt() > cityConstructions.city.population.population)
|
for (unique in getMatchingUniques(UniqueType.OnlyAvailableWhen, StateForConditionals.IgnoreConditionals))
|
||||||
yield(RejectionReasonType.PopulationRequirement.toInstance(unique.text))
|
if (!unique.conditionalsApply(civInfo, cityConstructions.city))
|
||||||
|
yield(RejectionReasonType.ShouldNotBeDisplayed.toInstance())
|
||||||
|
|
||||||
else -> {}
|
for (unique in getMatchingUniques(UniqueType.RequiresPopulation))
|
||||||
}
|
if (unique.params[0].toInt() > cityConstructions.city.population.population)
|
||||||
}
|
yield(RejectionReasonType.PopulationRequirement.toInstance(unique.text))
|
||||||
|
|
||||||
yieldAll(getRejectionReasons(civInfo, cityConstructions.city))
|
yieldAll(getRejectionReasons(civInfo, cityConstructions.city))
|
||||||
}
|
}
|
||||||
@ -343,19 +340,15 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
|||||||
fun isWaterUnit() = type.isWaterUnit()
|
fun isWaterUnit() = type.isWaterUnit()
|
||||||
fun isAirUnit() = type.isAirUnit()
|
fun isAirUnit() = type.isAirUnit()
|
||||||
|
|
||||||
fun isProbablySiegeUnit() =
|
fun isProbablySiegeUnit() = isRanged()
|
||||||
(
|
&& getMatchingUniques(UniqueType.Strength, StateForConditionals.IgnoreConditionals)
|
||||||
isRanged()
|
.any { it.params[0].toInt() > 0
|
||||||
&& (uniqueObjects + type.uniqueObjects)
|
&& it.conditionals.any { conditional -> conditional.type == UniqueType.ConditionalVsCity }
|
||||||
.any { it.isOfType(UniqueType.Strength)
|
|
||||||
&& it.params[0].toInt() > 0
|
|
||||||
&& it.conditionals.any { conditional -> conditional.isOfType(UniqueType.ConditionalVsCity) }
|
|
||||||
}
|
}
|
||||||
)
|
|
||||||
|
|
||||||
fun getForceEvaluation(): Int {
|
fun getForceEvaluation(): Int {
|
||||||
if (cachedForceEvaluation < 0) evaluateForce()
|
if (cachedForceEvaluation < 0) evaluateForce()
|
||||||
return cachedForceEvaluation
|
return cachedForceEvaluation
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun evaluateForce() {
|
private fun evaluateForce() {
|
||||||
@ -392,19 +385,18 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
|||||||
for (unique in allUniques) {
|
for (unique in allUniques) {
|
||||||
when (unique.type) {
|
when (unique.type) {
|
||||||
UniqueType.Strength -> {
|
UniqueType.Strength -> {
|
||||||
if (unique.params[0].toInt() > 0) {
|
if (unique.params[0].toInt() <= 0) continue
|
||||||
if (unique.conditionals.any { it.isOfType(UniqueType.ConditionalVsUnits) }) { // Bonus vs some units - a quarter of the bonus
|
if (unique.conditionals.any { it.isOfType(UniqueType.ConditionalVsUnits) }) { // Bonus vs some units - a quarter of the bonus
|
||||||
power *= (unique.params[0].toInt() / 4f).toPercent()
|
power *= (unique.params[0].toInt() / 4f).toPercent()
|
||||||
} else if (
|
} else if (
|
||||||
unique.conditionals.any {
|
unique.conditionals.any {
|
||||||
it.isOfType(UniqueType.ConditionalVsCity) // City Attack - half the bonus
|
it.isOfType(UniqueType.ConditionalVsCity) // City Attack - half the bonus
|
||||||
|| it.isOfType(UniqueType.ConditionalAttacking) // Attack - half the bonus
|
|| it.isOfType(UniqueType.ConditionalAttacking) // Attack - half the bonus
|
||||||
|| it.isOfType(UniqueType.ConditionalDefending) // Defense - half the bonus
|
|| it.isOfType(UniqueType.ConditionalDefending) // Defense - half the bonus
|
||||||
|| it.isOfType(UniqueType.ConditionalFightingInTiles)
|
|| it.isOfType(UniqueType.ConditionalFightingInTiles)
|
||||||
} // Bonus in terrain or feature - half the bonus
|
} // Bonus in terrain or feature - half the bonus
|
||||||
) {
|
) {
|
||||||
power *= (unique.params[0].toInt() / 2f).toPercent()
|
power *= (unique.params[0].toInt() / 2f).toPercent()
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UniqueType.StrengthNearCapital ->
|
UniqueType.StrengthNearCapital ->
|
||||||
|
Loading…
x
Reference in New Issue
Block a user