feat(battle-engine): close the AI-simulation subsystem (verbatim)

Copied the 89 uncopied AI*SimulationUtility/extension files defining the
AIVirtualCard/AIVirtualField extension methods; the compile loop then auto-closed
the revealed type deps (~3049 files total, drift-clean). 10.0k -> 62 errors.
This commit is contained in:
gamer147
2026-06-05 20:30:59 -04:00
parent 78f310c2b3
commit 824309ec44
472 changed files with 55870 additions and 0 deletions

View File

@@ -0,0 +1,120 @@
using System.Collections.Generic;
using Wizard.Battle.UI;
namespace Wizard;
public static class AIBanAttackSimulationUtility
{
public static void BanAttackAll(List<AIVirtualCard> candidates, CantAttackType banAttackType)
{
for (int i = 0; i < candidates.Count; i++)
{
AIVirtualCard aIVirtualCard = candidates[i];
if (!aIVirtualCard.IsIndependent)
{
BanAttackSingle(aIVirtualCard, banAttackType);
}
}
}
public static void BanAttackRandom(List<AIVirtualCard> candidates, CantAttackType banAttackType, int selectCount)
{
if (selectCount <= 1)
{
AIVirtualCard aIVirtualCard = SelectTargetForBanAttack(candidates, AISelectTargetPattern.Worst);
if (aIVirtualCard != null && !aIVirtualCard.IsIndependent)
{
BanAttackSingle(aIVirtualCard, banAttackType);
}
}
else
{
BanAttackAll(SelectMultipleTargetsForBanAttack(candidates, selectCount, AISelectTargetPattern.Worst), banAttackType);
}
}
public static void BanAttackTarget(AISituationInfo situation, CantAttackType banAttackType, AIScriptTokenArgType whichTarget)
{
AISelectedTargetInfo situationTarget = situation.GetSituationTarget(whichTarget);
if (situationTarget != null && situationTarget.HasTarget)
{
BanAttackAll(situationTarget.Targets, banAttackType);
}
}
public static void BanAttackTargetPrediction(List<AIVirtualCard> candidates, CantAttackType banAttackType, int selectCount)
{
if (selectCount <= 1)
{
AIVirtualCard aIVirtualCard = SelectTargetForBanAttack(candidates, AISelectTargetPattern.Best);
if (aIVirtualCard != null && !aIVirtualCard.IsIndependent)
{
BanAttackSingle(aIVirtualCard, banAttackType);
}
}
else
{
BanAttackAll(SelectMultipleTargetsForBanAttack(candidates, selectCount, AISelectTargetPattern.Best), banAttackType);
}
}
private static void BanAttackSingle(AIVirtualCard target, CantAttackType banAttackType)
{
switch (banAttackType)
{
case CantAttackType.All:
target.IsCantAttackAll = true;
break;
case CantAttackType.Unit:
target.IsSkillCantAttackUnit = true;
break;
case CantAttackType.Class:
target.IsSkillCantAttackClass = true;
break;
case CantAttackType.NotHasGuard:
target.IsSkillCantAtkUnitNotHasGuard = true;
break;
}
}
private static AIVirtualCard SelectTargetForBanAttack(List<AIVirtualCard> candidates, AISelectTargetPattern worstOrBest)
{
int num = ((worstOrBest == AISelectTargetPattern.Worst) ? int.MaxValue : int.MinValue);
AIVirtualCard result = null;
for (int i = 0; i < candidates.Count; i++)
{
AIVirtualCard aIVirtualCard = candidates[i];
if ((worstOrBest != AISelectTargetPattern.Worst) ? (aIVirtualCard.Attack > num) : (aIVirtualCard.Attack < num))
{
result = aIVirtualCard;
num = aIVirtualCard.Attack;
}
}
return result;
}
private static List<AIVirtualCard> SelectMultipleTargetsForBanAttack(List<AIVirtualCard> candidates, int selectCount, AISelectTargetPattern worstOrBest)
{
List<AIVirtualCard> list = new List<AIVirtualCard>();
for (int i = 0; i < candidates.Count; i++)
{
AIVirtualCard aIVirtualCard = candidates[i];
bool flag = false;
for (int j = 0; j < list.Count; j++)
{
AIVirtualCard aIVirtualCard2 = list[j];
if ((worstOrBest != AISelectTargetPattern.Worst) ? (aIVirtualCard.Attack > aIVirtualCard2.Attack) : (aIVirtualCard.Attack < aIVirtualCard2.Attack))
{
list[j] = aIVirtualCard;
aIVirtualCard = aIVirtualCard2;
flag = true;
}
}
if (!flag && list.Count < selectCount)
{
list.Add(aIVirtualCard);
}
}
return list;
}
}