Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard/AISetStatusSimulationUtility.cs
gamer147 824309ec44 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.
2026-06-05 20:30:59 -04:00

80 lines
2.5 KiB
C#

using System.Collections.Generic;
namespace Wizard;
public static class AISetStatusSimulationUtility
{
public static bool IsNoneSetValue(AIPolishConvertedExpression expression)
{
if (expression.TokenList[0] is AIScriptArgumentToken aIScriptArgumentToken)
{
return aIScriptArgumentToken.ArgumentType == AIScriptTokenArgType.NONE;
}
return false;
}
public static void SetMaxStatusToAll(List<AIVirtualCard> targets, int attack, int life, AISituationInfo situation)
{
for (int i = 0; i < targets.Count; i++)
{
AIVirtualCard aIVirtualCard = targets[i];
if (attack >= 0)
{
aIVirtualCard.SetAttack(attack);
}
if (life >= 0)
{
aIVirtualCard.SetMaxLife(situation, life);
}
}
}
public static void SetMaxStatusToTarget(AISituationInfo situation, int attack, int life, AIScriptTokenArgType whichTarget)
{
AISelectedTargetInfo situationTarget = situation.GetSituationTarget(whichTarget);
if (situationTarget != null && situationTarget.HasTarget)
{
SetMaxStatusToAll(situationTarget.Targets, attack, life, situation);
}
}
public static (AIVirtualCard allyLeader, AIVirtualCard enemyLeader) GetTargetSideLeaders(AIVirtualCard tagOwner, AIVirtualField field)
{
if (tagOwner == null)
{
return (allyLeader: null, enemyLeader: null);
}
if (!tagOwner.IsAlly)
{
return (allyLeader: field.EnemyClass, enemyLeader: field.AllyClass);
}
return (allyLeader: field.AllyClass, enemyLeader: field.EnemyClass);
}
public static void SetLeaderMaxLife(AIVirtualCard tagOwner, int maxLife, AIScriptTokenArgType sideType, AIVirtualField field, AISituationInfo situation = null)
{
(AIVirtualCard, AIVirtualCard) targetSideLeaders = GetTargetSideLeaders(tagOwner, field);
if (targetSideLeaders.Item1 == null || targetSideLeaders.Item2 == null)
{
AIConsoleUtility.LogError("AISetStatusSimulationUtility.SetLeaderMaxLife(): Failed to get the leader.");
return;
}
switch (sideType)
{
case AIScriptTokenArgType.ALLY:
targetSideLeaders.Item1.SetMaxLife(situation, maxLife);
break;
case AIScriptTokenArgType.OPPONENT:
targetSideLeaders.Item2.SetMaxLife(situation, maxLife);
break;
case AIScriptTokenArgType.BOTH:
targetSideLeaders.Item1.SetMaxLife(situation, maxLife);
targetSideLeaders.Item2.SetMaxLife(situation, maxLife);
break;
default:
AIConsoleUtility.LogError($"AISetStatusSimulationUtility.SetLeaderMaxLife(): Unexpected side type. type:{sideType}");
break;
}
}
}