public IEnumerable <T> Candidates <T>( ControlledBy controlledBy = ControlledBy.Any, int selectorIndex = 0, Func <TargetsCandidates, IList <TargetCandidates> > selector = null) where T : ITarget { Asrt.True(_candidates.HasCost || _candidates.HasEffect, "No target selectors found, use AddEffect or AddCost to add them!"); TargetCandidates candidates = null; if (selector == null) { candidates = _candidates.HasCost ? _candidates.Cost[selectorIndex] : _candidates.Effect[selectorIndex]; } else { candidates = selector(_candidates)[selectorIndex]; } switch (controlledBy) { case (ControlledBy.Opponent): { return(candidates .Where(x => x.Controller() == Controller.Opponent && x is T) .Select(x => (T)x)); } case (ControlledBy.SpellOwner): { return(candidates .Where(x => x.Controller() == Controller && x is T) .Select(x => (T)x)); } } return(candidates.OfType <T>()); }
public void AddEffectCandidates(TargetCandidates candidates) { _effectCandidates.Add(candidates); }
public void AddCostCandidates(TargetCandidates candidates) { _costCandidates.Add(candidates); }