Files
SVSimServer/SVSim.BattleEngine/Engine/ApplySkillTargetFilterCollection.cs
gamer147 0d9d8acae0 feat(battle-engine): M1 auto-copy closure (782 battle-logic files)
Compile-driven bulk-copy loop (tools/engine-port/m1_copy_loop.py) pulled the precise reference closure of the battle-core roots, stopping at the classify god-object/View-VFX-UI boundary. 782 files; no re-explosion (M0 had estimated ~order 1000). Residual frontier = 52 shim-classified + 80 external (Unity/BCL) types to author next.
2026-06-05 16:57:20 -04:00

91 lines
3.7 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Wizard;
using Wizard.Battle;
public class ApplySkillTargetFilterCollection : SkillFilterCollectionBase
{
public List<ISkillCustomSelectFilter> ApplyCustomSelectFilterList { get; set; }
public List<ISkillExclutionFilter> ApplyExclutionFilterList { get; private set; }
public ISkillSelectFilter ApplySelectFilter { get; set; }
public List<ApplySkillTargetFilterCollection> ApplyAndFilter { get; set; }
public ApplySkillTargetFilterCollection()
{
ApplyCustomSelectFilterList = new List<ISkillCustomSelectFilter>();
ApplyExclutionFilterList = new List<ISkillExclutionFilter>();
ApplyAndFilter = new List<ApplySkillTargetFilterCollection>();
}
public List<IReadOnlyBattleCardInfo> Filtering(BattlePlayerReadOnlyInfoPair pair, SkillConditionCheckerOption checkerOption, SkillOptionValue optionValue)
{
List<IReadOnlyBattleCardInfo> list = new List<IReadOnlyBattleCardInfo>();
List<IReadOnlyBattleCardInfo> AndFilterTargets = new List<IReadOnlyBattleCardInfo>();
IEnumerable<IBattlePlayerReadOnlyInfo> battlePlayerInfos = null;
if (ApplyAndFilter.Count <= 0)
{
if (base.BattlePlayerFilter != null)
{
battlePlayerInfos = base.BattlePlayerFilter.Filtering(pair);
}
if (base.TargetFilter != null)
{
list = base.TargetFilter.Filtering(battlePlayerInfos, checkerOption).ToList();
if (BattleManagerBase.GetIns().XorShiftRandom(isSelf: true) != null && BattleManagerBase.GetIns().XorShiftRandom(isSelf: false) == null && !pair.ReadOnlySelf.IsPlayer && (base.TargetFilter is SkillTargetInHandCardFilter || base.TargetFilter is SkillTargetReturnCardFilter || base.TargetFilter is SkillTargetTokenDrawCardFilter))
{
return list;
}
}
foreach (ISkillCardFilter cardFilter in base.CardFilterList)
{
list = cardFilter.Filtering(list, optionValue).ToList();
}
int i = 0;
for (int count = ApplyCustomSelectFilterList.Count; i < count; i++)
{
list = ApplyCustomSelectFilterList[i].Filtering(list, battlePlayerInfos, checkerOption).ToList();
}
for (int j = 0; j < ApplyExclutionFilterList.Count; j++)
{
list = ApplyExclutionFilterList[j].Filtering(list, battlePlayerInfos, checkerOption, optionValue).ToList();
}
}
else
{
for (int k = 0; k < ApplyAndFilter.Count; k++)
{
List<BattleCardBase> cards = ApplyAndFilter[k].Filtering(pair, checkerOption, optionValue).Cast<BattleCardBase>().ToList();
List<IReadOnlyBattleCardInfo> collection = (from IReadOnlyBattleCardInfo x in ApplyAndFilter[k].SelectFilter.Filtering(cards, optionValue, checkerOption)
where !AndFilterTargets.Contains(x)
select x).ToList();
AndFilterTargets.AddRange(collection);
}
}
List<IReadOnlyBattleCardInfo> list2 = list.ToList();
list2.AddRange(AndFilterTargets);
return list2;
}
public bool SimpleFiltering(IReadOnlyBattleCardInfo targetCard, BattlePlayerReadOnlyInfoPair pair, SkillConditionCheckerOption checkerOption, SkillOptionValue optionValue)
{
List<IReadOnlyBattleCardInfo> list = new List<IReadOnlyBattleCardInfo> { targetCard };
IEnumerable<IBattlePlayerReadOnlyInfo> battlePlayerInfos = base.BattlePlayerFilter.Filtering(pair);
for (int i = 0; i < base.CardFilterList.Count; i++)
{
list = base.CardFilterList[i].Filtering(list, optionValue).ToList();
}
for (int j = 0; j < ApplyCustomSelectFilterList.Count; j++)
{
list = ApplyCustomSelectFilterList[j].Filtering(list, battlePlayerInfos, checkerOption).ToList();
}
for (int k = 0; k < ApplyExclutionFilterList.Count; k++)
{
list = ApplyExclutionFilterList[k].Filtering(list, battlePlayerInfos, checkerOption, optionValue).ToList();
}
return list.Count() > 0;
}
}