Refactor TriggerManager out of BattleController
This commit is contained in:
parent
6aa13cdbb7
commit
60e8d2e3e0
4 changed files with 94 additions and 36 deletions
53
Assets/Battle/TriggerManager.cs
Normal file
53
Assets/Battle/TriggerManager.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue