Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard/AIVirtualTurnStartSimulator.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

83 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
namespace Wizard;
public static class AIVirtualTurnStartSimulator
{
public static void TurnStart(AIVirtualTurnStartInfo situation, AIVirtualField field)
{
if (situation.ActionType != AIOperationType.TURNSTART)
{
AIConsoleUtility.LogError("AIVirtualTurnStartSimulator:TurnStart() error!! situation is not [TURNSTART] ActionType!!!!!");
return;
}
field.TurnStartFieldProcess(situation);
List<AIVirtualCard> whenChangeInplayHolders = field.CardListSet.WhenChangeInplayHolders;
if (whenChangeInplayHolders != null)
{
for (int i = 0; i < whenChangeInplayHolders.Count; i++)
{
AIVirtualCard aIVirtualCard = whenChangeInplayHolders[i];
if (!aIVirtualCard.IsDead && aIVirtualCard.TagCollectionContainer.HasTagCollection(TagCollectionType.WhenChangeInplay))
{
aIVirtualCard.TagCollectionContainer.ChangeInplayTags.ExecuteWhenTurnStart(aIVirtualCard, field, situation);
}
}
}
List<AIVirtualCard> turnStartTagHolders = field.CardListSet.TurnStartTagHolders;
if (turnStartTagHolders != null && turnStartTagHolders.Count > 0)
{
for (int j = 0; j < turnStartTagHolders.Count; j++)
{
AIVirtualCard aIVirtualCard2 = turnStartTagHolders[j];
if (!aIVirtualCard2.IsDead && aIVirtualCard2.TagCollectionContainer.HasTagCollection(TagCollectionType.WhenTurnStart))
{
AIScriptTokenArgType turnStartSide = GetTurnStartSide(aIVirtualCard2, situation);
aIVirtualCard2.TagCollectionContainer.TurnStartTags.RegisterConditionPassedTagActions(aIVirtualCard2, situation, turnStartSide);
}
}
}
field.TagPreprocessContainer.SimulateAllTurnStartInfo(situation.Actor.IsAlly, situation);
situation.ExecuteAllSkillProcess();
}
private static AIScriptTokenArgType GetTurnStartSide(AIVirtualCard owner, AIVirtualTurnStartInfo situation)
{
if (owner.IsAlly == situation.Actor.IsAlly)
{
return AIScriptTokenArgType.ALLY;
}
return AIScriptTokenArgType.OPPONENT;
}
public static void TurnStartFieldProcess(this AIVirtualField field, AIVirtualTurnStartInfo situation)
{
field.ReverseAllCardIsSelfTurn();
field.PlayedCardContainer.ClearInTurn(situation);
if (situation.Actor.IsAlly)
{
field.AllyTurnCount++;
field.AllyPpTotal = Math.Min(field.AllyPpTotal + 1, 10);
}
else
{
field.EnemyTurnCount++;
field.EnemyPpTotal = Math.Min(field.EnemyPpTotal + 1, 10);
}
if (!field.IsLatestActionField)
{
return;
}
for (int i = 0; i < field.CardListSet.AllReferableCards.Count; i++)
{
AIVirtualCard aIVirtualCard = field.CardListSet.AllReferableCards[i];
if (aIVirtualCard.TagCollectionContainer.HasTagCollection(TagCollectionType.ActivateCount))
{
bool isOwnerTurn = aIVirtualCard.IsAlly == situation.Actor.IsAlly;
aIVirtualCard.TagCollectionContainer.ActivateCountTags.ResetAllCounter(isOwnerTurn);
}
}
}
}