using System.Collections; using System.Collections.Generic; using UnityEngine; public class TriggerManager { private List activatedTriggers = new List(); private List damageTriggers = new List(); public TriggerManager(BattleClock clock) { clock.OnTimeChanged += this.NotifyTimeChanged; } private void NotifyTimeChanged(BattleTime now) { if (now.RoundStep == RoundStep.StartOfHeroTurn) { this.damageTriggers.RemoveAll(t => t.Expiration == TriggerExpiration.StartOfNextHeroTurn); } } public void NotifyResolvedDamageEffect(DealDamageEffect effect) { foreach (DamageTrigger dt in this.damageTriggers) { if (dt.IsTriggeredBy(effect)) { EnqueueActivatedTrigger(dt); } } } public void NotifyResolvedMassDamageEffect(MassDamageEffect effect) { foreach (DamageTrigger dt in this.damageTriggers) { if (dt.IsTriggeredBy(effect)) { EnqueueActivatedTrigger(dt); } } } public void ArmDamageTrigger(DamageTrigger damageTrigger) { this.damageTriggers.Add(damageTrigger); } private void EnqueueActivatedTrigger(Trigger trigger) { this.activatedTriggers.Add(trigger); } public void RunActivatedTriggers(IBattleEffectApplier effectApplier) { foreach (Trigger t in this.activatedTriggers) { t.Run(effectApplier); } this.activatedTriggers.Clear(); // Cleanup expired triggers this.damageTriggers.RemoveAll(t => t.Expired); } }