mixedcards/Assets/Battle/TriggerManager.cs
2020-10-13 23:01:41 -04:00

53 lines
1.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TriggerManager
{
private List<Trigger> activatedTriggers = new List<Trigger>();
private List<DamageTrigger> damageTriggers = new List<DamageTrigger>();
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);
}
}