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 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 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 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 GetOwnDestroyedCards(this AISituationInfo situation) { if (situation.IsNull()) { return null; } return situation.CurrentSkillProcessInfo.OwnProcessRecord.OwnDestroyedCards; } public static List GetOwnSummonedCards(this AISituationInfo situation) { if (situation.IsNull()) { return null; } return situation.CurrentSkillProcessInfo.OwnProcessRecord.OwnSummonedCards; } public static List GetOwnLatestSummonedCards(this AISituationInfo situation) { if (situation.IsNull()) { return null; } return situation.CurrentSkillProcessInfo.OwnProcessRecord.OwnLatestSummonedCards; } public static List GetOwnLatestDrewCards(this AISituationInfo situation) { if (situation.IsNull()) { return null; } return situation.CurrentSkillProcessInfo.OwnProcessRecord.OwnLatestDrewCards; } public static List 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 cards) { if (!situation.IsNull() && cards != null && cards.Count > 0) { situation.CurrentSkillProcessInfo.OwnProcessRecord.AddOwnSummonedCards(cards); } } public static void RegisterOwnDrewCardList(this AISituationInfo situation, List 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 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; } }