refactor: unified 'is triggerable' logic

This commit is contained in:
Yair Morgenstern
2023-09-27 18:04:48 +03:00
parent b6f3c8571f
commit 50e0c0f4e0
3 changed files with 8 additions and 6 deletions

View File

@ -430,7 +430,7 @@ object GameStarter {
//We may need the starting location for some uniques, which is why we're doing it now
val startingTriggers = (ruleset.globalUniques.uniqueObjects + civ.nation.uniqueObjects)
for (unique in startingTriggers.filter { !it.hasTriggerConditional() })
if(unique.isTriggerable)
if (unique.isTriggerable)
UniqueTriggerActivation.triggerCivwideUnique(unique, civ, tile = startingLocation)
}
}

View File

@ -30,9 +30,11 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s
}
val conditionals: List<Unique> = text.getConditionals()
val isTriggerable = type != null && type.targetTypes.contains(UniqueTarget.Triggerable)
val isTriggerable = type != null && (
type.targetTypes.contains(UniqueTarget.Triggerable)
|| type.targetTypes.contains(UniqueTarget.UnitTriggerable)
// <for [amount] turns]> in effect makes any unique become a triggerable unique
|| conditionals.any { it.type == UniqueType.ConditionalTimedUnique }
)
val allParams = params + conditionals.flatMap { it.params }

View File

@ -667,12 +667,12 @@ object UnitActions {
}
private fun addTriggerUniqueActions(unit: MapUnit, actionList: ArrayList<UnitAction>){
val triggerableTypes = setOf(UniqueTarget.Triggerable, UniqueTarget.UnitTriggerable)
for (unique in unit.getUniques()) {
// not a unit action
if (unique.conditionals.none { it.type?.targetTypes?.contains(UniqueTarget.UnitActionModifier) == true }) continue
// extends an existing unit action
if (unique.conditionals.any { it.type == UniqueType.UnitActionExtraLimitedTimes }) continue
if (unique.type?.targetTypes?.any { it in triggerableTypes }!=true
&& unique.conditionals.none { it.type == UniqueType.ConditionalTimedUnique }) continue
if (!unique.isTriggerable) continue
if (usagesLeft(unit, unique)==0) continue
val baseTitle = if (unique.isOfType(UniqueType.OneTimeEnterGoldenAgeTurns))