using System.Collections.Generic; using System.Linq; using Wizard.Battle; public class SkillTargetLastTargetFilter : ISkillTargetFilter { private readonly int _lastTargetIndex; public int LastTargetIndex => _lastTargetIndex; public SkillTargetLastTargetFilter(string option) { int.TryParse(option, out _lastTargetIndex); } public virtual IEnumerable Filtering(IEnumerable battlePlayerInfos, SkillConditionCheckerOption option) { List list = new List(); List list2 = new List(); list2.AddRange(battlePlayerInfos.SelectMany((IBattlePlayerReadOnlyInfo p) => p.SkillInfoClassAndInPlayCards)); list2.AddRange(battlePlayerInfos.SelectMany((IBattlePlayerReadOnlyInfo p) => p.SkillInfoHandCards)); list2.AddRange(battlePlayerInfos.SelectMany((IBattlePlayerReadOnlyInfo p) => p.SkillInfoDeckCards)); list2.AddRange(battlePlayerInfos.SelectMany((IBattlePlayerReadOnlyInfo p) => p.SkillInfoCemeterys)); list2.AddRange(battlePlayerInfos.SelectMany((IBattlePlayerReadOnlyInfo p) => p.SkillInfoBanishCards)); List> list3 = new List>(); if (battlePlayerInfos.Count() > 1) { List> list4 = battlePlayerInfos.ToList()[0].SkillInfoLastTargets.ToList().ConvertAll((IEnumerable c) => c.ToList()); List> list5 = battlePlayerInfos.ToList()[1].SkillInfoLastTargets.ToList().ConvertAll((IEnumerable c) => c.ToList()); for (int num = 0; num < list4.Count(); num++) { list4[num].AddRange(list5[num]); } list3 = list4; } else { list3 = battlePlayerInfos.SelectMany((IBattlePlayerReadOnlyInfo p) => p.SkillInfoLastTargets.ToList().ConvertAll((IEnumerable c) => c.ToList())).ToList(); } foreach (IReadOnlyBattleCardInfo card in (list3.Count > _lastTargetIndex) ? list3[_lastTargetIndex] : new List()) { IReadOnlyBattleCardInfo readOnlyBattleCardInfo = list2.FirstOrDefault((IReadOnlyBattleCardInfo c) => c.EquelsID(card)); if (readOnlyBattleCardInfo != null) { list.Add(readOnlyBattleCardInfo); } } return list; } }