Refactor TriggerManager out of BattleController

This commit is contained in:
henriquenakashima 2020-10-13 23:01:41 -04:00
parent 6aa13cdbb7
commit 60e8d2e3e0
4 changed files with 94 additions and 36 deletions

View file

@ -0,0 +1,53 @@
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);
}
}