Added 'after which this unit is consumed' for units whose only purpose is limited actions

This commit is contained in:
Yair Morgenstern 2023-03-03 16:37:11 +02:00
parent 29982eba9e
commit 253c669ba9
4 changed files with 19 additions and 3 deletions

View File

@ -1610,7 +1610,7 @@
"unitType": "Civilian",
"uniques": [
"Can hurry technology research",
"Can instantly construct a [Academy] improvement <[2] times>",
"Can instantly construct a [Academy] improvement <by consuming this unit>",
"Great Person - [Science]", "Unbuildable", "Uncapturable"],
"movement": 2
},

View File

@ -511,6 +511,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
UnitActionMovementCost("for [amount] movement", UniqueTarget.UnitActionModifier),
UnitActionOnce("once", UniqueTarget.UnitActionModifier),
UnitActionLimitedTimes("[amount] times", UniqueTarget.UnitActionModifier),
UnitActionAfterWhichConsumed("after which this unit is consumed", UniqueTarget.UnitActionModifier),
// endregion

View File

@ -704,6 +704,11 @@ object UnitActions {
when (conditional.type){
UniqueType.UnitActionConsumeUnit -> unit.consume()
UniqueType.UnitActionLimitedTimes -> {
if (usagesLeft(unit, actionUnique) == 1
&& actionUnique.conditionals.any { it.type==UniqueType.UnitActionAfterWhichConsumed }) {
unit.consume()
continue
}
val usagesSoFar = unit.abilityToTimesUsed[actionUnique.placeholderText] ?: 0
unit.abilityToTimesUsed[actionUnique.placeholderText] = usagesSoFar + 1
}
@ -736,12 +741,16 @@ object UnitActions {
fun getSideEffectString(unit:MapUnit, actionUnique: Unique): String {
val effects = ArrayList<String>()
if (actionUnique.conditionals.any { it.type == UniqueType.UnitActionConsumeUnit }) effects += Fonts.death.toString()
else effects += getMovementPointsToUse(actionUnique).toString() + Fonts.movement
val maxUsages = getMaxUsages(actionUnique)
if (maxUsages!=null) effects += "${usagesLeft(unit, actionUnique)}/$maxUsages"
if (actionUnique.conditionals.any { it.type == UniqueType.UnitActionConsumeUnit }
|| actionUnique.conditionals.any { it.type == UniqueType.UnitActionAfterWhichConsumed } && usagesLeft(unit, actionUnique) == 1
) effects += Fonts.death.toString()
else effects += getMovementPointsToUse(actionUnique).toString() + Fonts.movement
return if (effects.isEmpty()) ""
else "(${effects.joinToString { it.tr() }})"
}

View File

@ -1983,11 +1983,17 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl
Applicable to: UnitActionModifier
??? example "&lt;once&gt;"
Applicable to: UnitActionModifier
??? example "&lt;[amount] times&gt;"
Example: "&lt;[3] times&gt;"
Applicable to: UnitActionModifier
??? example "&lt;after which this unit is consumed&gt;"
Applicable to: UnitActionModifier
*[action]: An action that a unit can perform. Currently, there are only two actions part of this: 'Spread Religion' and 'Remove Foreign religions from your own cities'
*[amount]: This indicates a whole number, possibly with a + or - sign, such as `2`, `+13`, or `-3`.