Added 'once' unit action modifier, effectively equal to '[1] times'

This commit is contained in:
Yair Morgenstern
2023-03-03 15:29:14 +02:00
parent 608e0dfb71
commit 458d35026c
2 changed files with 7 additions and 2 deletions

View File

@ -509,6 +509,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
UnitActionConsumeUnit("by consuming this unit", UniqueTarget.UnitActionModifier),
UnitActionMovementCost("for [amount] movement", UniqueTarget.UnitActionModifier),
UnitActionOnce("once", UniqueTarget.UnitActionModifier),
UnitActionLimitedTimes("[amount] times", UniqueTarget.UnitActionModifier),
// endregion

View File

@ -653,7 +653,8 @@ object UnitActions {
val triggerableTypes = setOf(UniqueTarget.Triggerable, UniqueTarget.UnitTriggerable)
for (unique in unit.getUniques()) {
if (unique.conditionals.none { it.type?.targetTypes?.contains(UniqueTarget.UnitActionModifier) == true }) continue
if (unique.type?.targetTypes?.any { it in triggerableTypes }!=true) continue
if (unique.type?.targetTypes?.any { it in triggerableTypes }!=true
&& unique.conditionals.none { it.type == UniqueType.ConditionalTimedUnique }) continue
if (usagesLeft(unit, unique)==0) continue
val unitAction = UnitAction(type = UnitActionType.TriggerUnique,
@ -719,9 +720,12 @@ object UnitActions {
}
fun getMaxUsages(actionUnique: Unique): Int? {
return actionUnique.conditionals
val times = actionUnique.conditionals
.filter { it.type == UniqueType.UnitActionLimitedTimes }
.maxOfOrNull { it.params[0].toInt() }
if (times != null) return times
if (actionUnique.conditionals.any { it.type == UniqueType.UnitActionOnce }) return 1
return null
}
fun actionTextWithSideEffects(originalText:String, actionUnique: Unique, unit: MapUnit): String {