use enum_dispatch::enum_dispatch;

pub mod damage_type;
pub mod target;
pub mod triggering_signal;
pub mod zone;

pub mod triggerrable_effect;
pub mod phase_effect;
pub mod checker_effect;
pub mod direct_effect;

#[enum_dispatch(EffectTrait)]
pub enum Effect {
  TriggerrableEffect,
  PhaseEffect,
  CheckerEffect,
  DirectEffect,
}

#[enum_dispatch]
pub trait EffectTrait {}

type TriggerrableEffect = triggerrable_effect::TriggerrableEffect;
type PhaseEffect = phase_effect::PhaseEffect;
type CheckerEffect = checker_effect::CheckerEffect;
type DirectEffect = direct_effect::DirectEffect;

pub struct EffectStack {
  pub effects: Vec<Effect>,
}