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,18 +137,15 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
||||
yield(RejectionReasonType.NoPlaceToPutUnit.toInstance())
|
||||
}
|
||||
val civInfo = cityConstructions.city.civ
|
||||
for (unique in uniqueObjects) {
|
||||
when (unique.type) {
|
||||
UniqueType.OnlyAvailableWhen -> if (!unique.conditionalsApply(civInfo, cityConstructions.city))
|
||||
|
||||
for (unique in getMatchingUniques(UniqueType.OnlyAvailableWhen, StateForConditionals.IgnoreConditionals))
|
||||
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.RequiresPopulation))
|
||||
if (unique.params[0].toInt() > cityConstructions.city.population.population)
|
||||
yield(RejectionReasonType.PopulationRequirement.toInstance(unique.text))
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
yieldAll(getRejectionReasons(civInfo, cityConstructions.city))
|
||||
}
|
||||
|
||||
@ -343,15 +340,11 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
||||
fun isWaterUnit() = type.isWaterUnit()
|
||||
fun isAirUnit() = type.isAirUnit()
|
||||
|
||||
fun isProbablySiegeUnit() =
|
||||
(
|
||||
isRanged()
|
||||
&& (uniqueObjects + type.uniqueObjects)
|
||||
.any { it.isOfType(UniqueType.Strength)
|
||||
&& it.params[0].toInt() > 0
|
||||
&& it.conditionals.any { conditional -> conditional.isOfType(UniqueType.ConditionalVsCity) }
|
||||
fun isProbablySiegeUnit() = isRanged()
|
||||
&& getMatchingUniques(UniqueType.Strength, StateForConditionals.IgnoreConditionals)
|
||||
.any { it.params[0].toInt() > 0
|
||||
&& it.conditionals.any { conditional -> conditional.type == UniqueType.ConditionalVsCity }
|
||||
}
|
||||
)
|
||||
|
||||
fun getForceEvaluation(): Int {
|
||||
if (cachedForceEvaluation < 0) evaluateForce()
|
||||
@ -392,7 +385,7 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
||||
for (unique in allUniques) {
|
||||
when (unique.type) {
|
||||
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
|
||||
power *= (unique.params[0].toInt() / 4f).toPercent()
|
||||
} else if (
|
||||
@ -406,7 +399,6 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
||||
power *= (unique.params[0].toInt() / 2f).toPercent()
|
||||
}
|
||||
}
|
||||
}
|
||||
UniqueType.StrengthNearCapital ->
|
||||
if (unique.params[0].toInt() > 0)
|
||||
power *= (unique.params[0].toInt() / 4f).toPercent() // Bonus decreasing with distance from capital - not worth much most of the map???
|
||||
|
Loading…
x
Reference in New Issue
Block a user