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

135 lines
4.9 KiB
C#

using System.Collections.Generic;
namespace Wizard;
public static class AISkillActivateCountUtility
{
public const int NONE_LIMIT_ACTIVATE_COUNT = -1;
public static void AllActivateCountHolderIncrement(this AIVirtualField field, AISituationInfo situation, AIPlayTagType counterType, AIVirtualCard triggerCard = null)
{
if (field.CardListSet.HasActivateCountHolder)
{
List<AIVirtualCard> activateCountHolders = field.CardListSet.ActivateCountHolders;
for (int i = 0; i < activateCountHolders.Count; i++)
{
activateCountHolders[i].Increment(situation, counterType, triggerCard);
}
}
}
public static void AllActivateCountHolderIncrement(this AIVirtualField field, AISituationInfo situation, AIPlayTagType counterType, List<AIVirtualCard> triggerCardList)
{
if (field.CardListSet.HasActivateCountHolder)
{
List<AIVirtualCard> activateCountHolders = field.CardListSet.ActivateCountHolders;
for (int i = 0; i < activateCountHolders.Count; i++)
{
activateCountHolders[i].Increment(situation, counterType, triggerCardList);
}
}
}
public static void Increment(this AIVirtualCard card, AISituationInfo situation, AIPlayTagType counterType, AIVirtualCard triggerCard = null)
{
if (card.TagCollectionContainer.HasTag(counterType) && CheckCounterTypeCommonIncrementCondition(counterType, card, situation))
{
card.TagCollectionContainer.ActivateCountTags.Increment(card, situation, counterType, triggerCard);
}
}
public static void Increment(this AIVirtualCard card, AISituationInfo situation, AIPlayTagType counterType, List<AIVirtualCard> triggerCardList)
{
if (card.TagCollectionContainer.HasTag(counterType) && CheckCounterTypeCommonIncrementCondition(counterType, card, situation))
{
card.TagCollectionContainer.ActivateCountTags.Increment(card, situation, counterType, triggerCardList);
}
}
private static bool CheckCounterTypeCommonIncrementCondition(AIPlayTagType counterType, AIVirtualCard holder, AISituationInfo situation)
{
if (counterType == AIPlayTagType.TurnEndActivateCount)
{
return holder.IsAlly == situation.Actor.IsAlly;
}
return true;
}
public static int GetSkillActivateCount(this AIVirtualCard tagOwner, AIVirtualField field, List<int> playPtn, AISituationInfo situation, List<AIScriptTokenBase> argList)
{
if (!field.CardListSet.HasActivateCountHolder)
{
return 0;
}
if (!CheckActivateCounterFilteringArgument(argList, out var filters, out var skillOwnerId, out var skillIndex))
{
return 0;
}
int num = 0;
List<AIVirtualCard> activateCountHolders = field.CardListSet.ActivateCountHolders;
for (int i = 0; i < activateCountHolders.Count; i++)
{
AIVirtualCard aIVirtualCard = activateCountHolders[i];
if (AIFilteringUtility.CheckMatchTargetFiltering(aIVirtualCard, null, filters, playPtn, tagOwner, situation))
{
num += aIVirtualCard.GetSkillActivateCountFromOneCard(skillOwnerId, skillIndex);
}
}
return num;
}
public static bool IsSkillOccurred(this AIVirtualCard tagOwner, AIVirtualField field, List<int> playPtn, AISituationInfo situation, List<AIScriptTokenBase> argList)
{
if (!field.CardListSet.HasActivateCountHolder)
{
return false;
}
if (!CheckActivateCounterFilteringArgument(argList, out var filters, out var skillOwnerId, out var skillIndex))
{
return false;
}
List<AIVirtualCard> activateCountHolders = field.CardListSet.ActivateCountHolders;
for (int i = 0; i < activateCountHolders.Count; i++)
{
AIVirtualCard aIVirtualCard = activateCountHolders[i];
if (AIFilteringUtility.CheckMatchTargetFiltering(aIVirtualCard, null, filters, playPtn, tagOwner, situation) && !aIVirtualCard.GetIsSkillOccurredFromOneCard(skillOwnerId, skillIndex))
{
return false;
}
}
return true;
}
public static bool CheckActivateCounterFilteringArgument(List<AIScriptTokenBase> argList, out List<AIScriptTokenBase> filters, out int skillOwnerId, out int skillIndex)
{
filters = null;
skillOwnerId = -1;
skillIndex = 0;
if (!(argList[0] is AIScriptNumericToken aIScriptNumericToken))
{
return false;
}
skillIndex = (int)aIScriptNumericToken.Value;
argList.RemoveAt(0);
if (!(argList[0] is AIScriptIDToken aIScriptIDToken))
{
return false;
}
skillOwnerId = aIScriptIDToken.ID;
argList.RemoveAt(0);
argList.Reverse();
filters = argList;
return true;
}
private static int GetSkillActivateCountFromOneCard(this AIVirtualCard counterOwner, int counterSourceCardId, int counterIndex)
{
return counterOwner.TagCollectionContainer.ActivateCountTags.GetActivateCount(counterSourceCardId, counterIndex);
}
private static bool GetIsSkillOccurredFromOneCard(this AIVirtualCard counterOwner, int counterSourceCardId, int counterIndex)
{
return counterOwner.TagCollectionContainer.ActivateCountTags.IsSkillOccurred(counterSourceCardId, counterIndex);
}
}