67 lines
2.2 KiB
C#
67 lines
2.2 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>();
|
|
private List<StepTrigger> stepTriggers = new List<StepTrigger>();
|
|
|
|
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);
|
|
this.stepTriggers.RemoveAll(t => t.Expiration == TriggerExpiration.StartOfNextHeroTurn);
|
|
}
|
|
|
|
foreach (StepTrigger st in this.stepTriggers) {
|
|
if (st.IsTriggeredBy(now)) {
|
|
EnqueueActivatedTrigger(st);
|
|
}
|
|
}
|
|
}
|
|
|
|
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 trigger) {
|
|
this.damageTriggers.Add(trigger);
|
|
}
|
|
|
|
public void ArmStepTrigger(StepTrigger trigger) {
|
|
this.stepTriggers.Add(trigger);
|
|
}
|
|
|
|
private void EnqueueActivatedTrigger(Trigger trigger) {
|
|
this.activatedTriggers.Add(trigger);
|
|
}
|
|
|
|
public IEnumerator RunActivatedTriggers(IBattleEffectApplier effectApplier,
|
|
MonsterViewpoint viewpoint,
|
|
BattlePlayerControls playerControls) {
|
|
foreach (Trigger t in this.activatedTriggers) {
|
|
yield return t.Run(effectApplier, viewpoint, playerControls);
|
|
}
|
|
this.activatedTriggers.Clear();
|
|
|
|
// Cleanup expired triggers
|
|
this.damageTriggers.RemoveAll(t => t.Expired);
|
|
}
|
|
}
|