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

249 lines
6.4 KiB
C#

using System.Collections.Generic;
namespace Wizard;
public static class AISituationCurrentProcessAccessExtension
{
public static AIVirtualCard GetCurrentTriggerCard(this AISituationInfo situation)
{
if (situation.IsNull())
{
return null;
}
return situation.CurrentSkillProcessInfo.TriggerInfo.TriggerCard;
}
public static bool IsSameCurrentTriggerCardAndTriggerType(this AISituationInfo situation, AIVirtualCard card, AISituationTriggerInformation.TriggerType triggerType)
{
if (situation.IsNull())
{
return false;
}
AISituationTriggerInformation triggerInfo = situation.CurrentSkillProcessInfo.TriggerInfo;
if (triggerInfo.TriggerCard == null || triggerInfo.Type != triggerType)
{
return false;
}
return triggerInfo.IsTriggerCardAndTriggerType(card, triggerType);
}
public static bool IsSameCurrentTriggerCard(this AISituationInfo situation, AIVirtualCard card)
{
if (situation.IsNull())
{
return false;
}
AISituationTriggerInformation triggerInfo = situation.CurrentSkillProcessInfo.TriggerInfo;
if (triggerInfo.TriggerCard == null)
{
return false;
}
return triggerInfo.IsTriggerCard(card);
}
public static bool IsBanishTrigger(this AISituationInfo situation)
{
if (situation.IsNull())
{
return false;
}
AISituationTriggerInformation triggerInfo = situation.CurrentSkillProcessInfo.TriggerInfo;
if (triggerInfo.Type == AISituationTriggerInformation.TriggerType.Banish)
{
return triggerInfo.TriggerCard != null;
}
return false;
}
public static bool IsOwnSummonedCard(this AISituationInfo situation, AIVirtualCard card, AIScriptTokenArgType targetCardType, bool isLatest = false)
{
if (situation.IsNull())
{
return false;
}
List<AIVirtualCard> list = (isLatest ? situation.GetOwnLatestSummonedCards() : situation.GetOwnSummonedCards());
if (list == null || list.Count <= 0)
{
return false;
}
switch (targetCardType)
{
case AIScriptTokenArgType.FOLLOWER:
if (!card.IsUnit)
{
return false;
}
break;
case AIScriptTokenArgType.AMULET:
if (!card.IsAmulet)
{
return false;
}
break;
default:
AIConsoleUtility.LogError($"IsOwnSummonedCard(): Unsupported target card type. type:{targetCardType}");
return false;
case AIScriptTokenArgType.ALL:
break;
}
for (int i = 0; i < list.Count; i++)
{
if (list[i].IsSameCard(card))
{
return true;
}
}
return false;
}
public static bool IsLatestOwnDrewCard(this AISituationInfo situation, AIVirtualCard card)
{
if (situation.IsNull())
{
return false;
}
List<AIVirtualCard> ownLatestDrewCards = situation.GetOwnLatestDrewCards();
if (ownLatestDrewCards == null || ownLatestDrewCards.Count <= 0)
{
return false;
}
for (int i = 0; i < ownLatestDrewCards.Count; i++)
{
if (ownLatestDrewCards[i].IsSameCard(card))
{
return true;
}
}
return false;
}
public static bool IsLatestTarget(this AISituationInfo situation, AIVirtualCard card)
{
List<AIVirtualCard> latestTargets = situation.GetLatestTargets();
if (latestTargets == null || latestTargets.Count <= 0)
{
AIConsoleUtility.LogError("IsLatestTarget error!! candidates is empty!!!!!");
return false;
}
for (int i = 0; i < latestTargets.Count; i++)
{
if (card.IsSameCard(latestTargets[i]))
{
return true;
}
}
return false;
}
public static List<AIVirtualCard> GetOwnDestroyedCards(this AISituationInfo situation)
{
if (situation.IsNull())
{
return null;
}
return situation.CurrentSkillProcessInfo.OwnProcessRecord.OwnDestroyedCards;
}
public static List<AIVirtualCard> GetOwnSummonedCards(this AISituationInfo situation)
{
if (situation.IsNull())
{
return null;
}
return situation.CurrentSkillProcessInfo.OwnProcessRecord.OwnSummonedCards;
}
public static List<AIVirtualCard> GetOwnLatestSummonedCards(this AISituationInfo situation)
{
if (situation.IsNull())
{
return null;
}
return situation.CurrentSkillProcessInfo.OwnProcessRecord.OwnLatestSummonedCards;
}
public static List<AIVirtualCard> GetOwnLatestDrewCards(this AISituationInfo situation)
{
if (situation.IsNull())
{
return null;
}
return situation.CurrentSkillProcessInfo.OwnProcessRecord.OwnLatestDrewCards;
}
public static List<AIVirtualCard> GetLatestTargets(this AISituationInfo situation)
{
if (situation.IsNull())
{
return null;
}
return situation.CurrentSkillProcessInfo.OwnProcessRecord.LatestTargets;
}
public static int GetCurrentProcessDefaultDamage(this AISituationInfo situation)
{
if (situation.IsNull())
{
return -1;
}
return situation.CurrentSkillProcessInfo.OwnProcessRecord.DefaultDamage;
}
public static void RegisterOwnDestroyedCard(this AISituationInfo situation, AIVirtualCard card)
{
if (!situation.IsNull())
{
situation.CurrentSkillProcessInfo.OwnProcessRecord.AddOwnDestroyedCard(card);
}
}
public static void RegisterOwnBanishedCard(this AISituationInfo situation, AIVirtualCard card)
{
if (!situation.IsNull())
{
situation.CurrentSkillProcessInfo.OwnProcessRecord.AddOwnBanishedCard(card);
}
}
public static void RegisterOwnSummonedCardList(this AISituationInfo situation, List<AIVirtualCard> cards)
{
if (!situation.IsNull() && cards != null && cards.Count > 0)
{
situation.CurrentSkillProcessInfo.OwnProcessRecord.AddOwnSummonedCards(cards);
}
}
public static void RegisterOwnDrewCardList(this AISituationInfo situation, List<AIVirtualCard> cards)
{
if (!situation.IsNull() && cards != null && cards.Count > 0)
{
situation.CurrentSkillProcessInfo.OwnProcessRecord.AddOwnDrewCards(cards);
}
}
public static void RegisterSingleLatestTarget(this AISituationInfo situation, AIVirtualCard card)
{
if (!situation.IsNull())
{
situation.CurrentSkillProcessInfo.OwnProcessRecord.RegisterSingleLatestTarget(card);
}
}
public static void RegisterLatestTargetList(this AISituationInfo situation, List<AIVirtualCard> list)
{
if (!situation.IsNull() && list != null && list.Count > 0)
{
situation.CurrentSkillProcessInfo.OwnProcessRecord.RegisterLatestTargetList(list);
}
}
private static bool IsNull(this AISituationInfo situation)
{
if (situation != null)
{
return situation.CurrentSkillProcessInfo == null;
}
return true;
}
}