using System.Collections.Generic; using System.Linq; using Wizard.Battle; public class SkillParameterDestroyedByCardIdAndAbilityFilter : ISkillCardFilter { private readonly string _parameterText; private readonly BattleCardBase.DestroyedBySkillInfo.DestroyedBySkillAbility _ability; private readonly string _player = string.Empty; public SkillParameterDestroyedByCardIdAndAbilityFilter(string parameterText) { string[] array = parameterText.Split(':'); _parameterText = array[0]; switch (array[1]) { case "when_play": _ability = BattleCardBase.DestroyedBySkillInfo.DestroyedBySkillAbility.WhenPlay; break; case "when_accelerate": _ability = BattleCardBase.DestroyedBySkillInfo.DestroyedBySkillAbility.Accelerate; break; case "when_destroy": _ability = BattleCardBase.DestroyedBySkillInfo.DestroyedBySkillAbility.WhenDestroy; break; default: _ability = BattleCardBase.DestroyedBySkillInfo.DestroyedBySkillAbility.None; break; } if (array.Length >= 3) { _player = array[2].ToString(); } } public IEnumerable Filtering(IEnumerable cards, SkillOptionValue option) { int id = option.ParseInt(_parameterText); for (int i = 0; i < cards.Count(); i++) { IReadOnlyBattleCardInfo card = cards.ElementAt(i); for (int j = 0; j < card.DestroyedBySkillList.Count; j++) { BattleCardBase.DestroyedBySkillInfo destroyedBySkillInfo = card.DestroyedBySkillList.ElementAt(j); if (destroyedBySkillInfo.BaseCardId == id && destroyedBySkillInfo.Ability == _ability && (!(_player != string.Empty) || !(destroyedBySkillInfo.Player != _player))) { yield return card; } } } } }