mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-11 00:08:58 +07:00
Added 'once' unit action modifier, effectively equal to '[1] times'
This commit is contained in:
@ -509,6 +509,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
|
|||||||
|
|
||||||
UnitActionConsumeUnit("by consuming this unit", UniqueTarget.UnitActionModifier),
|
UnitActionConsumeUnit("by consuming this unit", UniqueTarget.UnitActionModifier),
|
||||||
UnitActionMovementCost("for [amount] movement", UniqueTarget.UnitActionModifier),
|
UnitActionMovementCost("for [amount] movement", UniqueTarget.UnitActionModifier),
|
||||||
|
UnitActionOnce("once", UniqueTarget.UnitActionModifier),
|
||||||
UnitActionLimitedTimes("[amount] times", UniqueTarget.UnitActionModifier),
|
UnitActionLimitedTimes("[amount] times", UniqueTarget.UnitActionModifier),
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
@ -653,7 +653,8 @@ object UnitActions {
|
|||||||
val triggerableTypes = setOf(UniqueTarget.Triggerable, UniqueTarget.UnitTriggerable)
|
val triggerableTypes = setOf(UniqueTarget.Triggerable, UniqueTarget.UnitTriggerable)
|
||||||
for (unique in unit.getUniques()) {
|
for (unique in unit.getUniques()) {
|
||||||
if (unique.conditionals.none { it.type?.targetTypes?.contains(UniqueTarget.UnitActionModifier) == true }) continue
|
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
|
if (usagesLeft(unit, unique)==0) continue
|
||||||
|
|
||||||
val unitAction = UnitAction(type = UnitActionType.TriggerUnique,
|
val unitAction = UnitAction(type = UnitActionType.TriggerUnique,
|
||||||
@ -719,9 +720,12 @@ object UnitActions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getMaxUsages(actionUnique: Unique): Int? {
|
fun getMaxUsages(actionUnique: Unique): Int? {
|
||||||
return actionUnique.conditionals
|
val times = actionUnique.conditionals
|
||||||
.filter { it.type == UniqueType.UnitActionLimitedTimes }
|
.filter { it.type == UniqueType.UnitActionLimitedTimes }
|
||||||
.maxOfOrNull { it.params[0].toInt() }
|
.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 {
|
fun actionTextWithSideEffects(originalText:String, actionUnique: Unique, unit: MapUnit): String {
|
||||||
|
Reference in New Issue
Block a user