public enum TriggerExpiration { Never, StartOfNextHeroTurn, } public enum TriggerRepetition { Once, Multiple, } public class Trigger { private TriggeredEffect callback; private TriggerExpiration expiration; private TriggerRepetition repetition; private bool expired; public Trigger(TriggeredEffect callback, TriggerExpiration expiration, TriggerRepetition repetition) { this.callback = callback; this.expiration = expiration; this.repetition = repetition; } public void Run(IBattleEffectApplier effectApplier) { if (this.expired) return; callback(effectApplier); if (this.repetition == TriggerRepetition.Once) { this.expired = true; } } public bool Expired {get => this.expired;} public TriggerExpiration Expiration {get => this.expiration;} public TriggerRepetition Repetition {get => this.repetition;} }