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.
This commit is contained in:
104
SVSim.BattleEngine/Engine/SkillFilterCollectionBase.cs
Normal file
104
SVSim.BattleEngine/Engine/SkillFilterCollectionBase.cs
Normal file
@@ -0,0 +1,104 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Wizard;
|
||||
using Wizard.Battle;
|
||||
|
||||
public class SkillFilterCollectionBase
|
||||
{
|
||||
private const int CAP_CARDFILTER = 6;
|
||||
|
||||
private bool _isSkipPrivateCardCheck;
|
||||
|
||||
public ISkillBattlePlayerFilter BattlePlayerFilter { get; set; }
|
||||
|
||||
public ISkillTargetFilter TargetFilter { get; set; }
|
||||
|
||||
public List<ISkillCardFilter> CardFilterList { get; private set; }
|
||||
|
||||
public ISkillSelectFilter SelectFilter { get; set; }
|
||||
|
||||
public void SetCardFilter(List<ISkillCardFilter> list)
|
||||
{
|
||||
CardFilterList = list;
|
||||
}
|
||||
|
||||
protected bool IsPrivateCard(BattlePlayerReadOnlyInfoPair playerInfoPair, IEnumerable<IReadOnlyBattleCardInfo> cardInfos, SkillConditionCheckerOption checkerOption)
|
||||
{
|
||||
if (_isSkipPrivateCardCheck)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (playerInfoPair.ReadOnlySelf.IsPlayer)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (TargetFilter is SkillTargetGameLeftCardsFilter || TargetFilter is SkillTargetLeftThisTurnCardListFilter)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (TargetFilter is SkillTargetInplayBuffingCardsFilter || TargetFilter is SkillTargetInplayDebuffingCardsFilter)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (CardFilterList.Any((ISkillCardFilter f) => f is SkillFusionIngredientCardListFilter || f is SkillTargetDrewSkillFilter) || TargetFilter is SkillTargetFusionIngredientedCardListIncludeThisFusion || TargetFilter is SkillTargetFusionThisTurnCardList)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (TargetFilter is SkillTargetGamePlayCardsOtherSelfFilter || TargetFilter is SkillTargetTurnPlayCardsOtherSelfFilter || TargetFilter is SkillTargetTurnSummonCardsFilter || TargetFilter is SkillTargetGameSummonCardsFilter || TargetFilter is SkillTargetGameSummonCardsOtherFilter)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (TargetFilter is SkillTargetSelfFilter && CardFilterList.Any((ISkillCardFilter f) => f is SkillParameterLifeFilter))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (TargetFilter is SkillTargetBurialRiteCardFilter)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (BattleManagerBase.GetIns().XorShiftRandom(isSelf: true) != null && BattleManagerBase.GetIns().XorShiftRandom(isSelf: false) == null)
|
||||
{
|
||||
if (!cardInfos.All((IReadOnlyBattleCardInfo s) => (s.IsInHand && (checkerOption.LeftCards == null || checkerOption.LeftCards.IndexOf(s) == -1)) || s.IsInDeck))
|
||||
{
|
||||
return TargetFilter is SkillTargetBattleStartDeckFilter;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public SkillFilterCollectionBase(bool isSkipPrivateCardCheck = false)
|
||||
{
|
||||
CardFilterList = new List<ISkillCardFilter>(6);
|
||||
SelectFilter = new SkillSelectAllFilter();
|
||||
_isSkipPrivateCardCheck = isSkipPrivateCardCheck;
|
||||
}
|
||||
|
||||
protected IEnumerable<IReadOnlyBattleCardInfo> FilteringBase(BattlePlayerReadOnlyInfoPair playerInfoPair, SkillConditionCheckerOption checkerOption, SkillOptionValue optionValue, bool isSkipPrivateCheck = false)
|
||||
{
|
||||
IEnumerable<IReadOnlyBattleCardInfo> enumerable = null;
|
||||
if (BattlePlayerFilter == null)
|
||||
{
|
||||
enumerable = TargetFilter.Filtering(null, checkerOption);
|
||||
}
|
||||
else if (TargetFilter != null)
|
||||
{
|
||||
IEnumerable<IBattlePlayerReadOnlyInfo> battlePlayerInfos = BattlePlayerFilter.Filtering(playerInfoPair);
|
||||
enumerable = TargetFilter.Filtering(battlePlayerInfos, checkerOption);
|
||||
if (IsPrivateCard(playerInfoPair, enumerable, checkerOption) || isSkipPrivateCheck)
|
||||
{
|
||||
return enumerable;
|
||||
}
|
||||
}
|
||||
foreach (ISkillCardFilter cardFilter in CardFilterList)
|
||||
{
|
||||
enumerable = cardFilter.Filtering(enumerable, optionValue);
|
||||
}
|
||||
if (enumerable != null)
|
||||
{
|
||||
IEnumerable<BattleCardBase> cards = enumerable.Cast<BattleCardBase>();
|
||||
enumerable = SelectFilter.Filtering(cards, optionValue, checkerOption).Cast<IReadOnlyBattleCardInfo>();
|
||||
}
|
||||
return enumerable;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user