53 lines
1.6 KiB
C#
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);
|
|
}
|
|
}
|