using System.Collections.Generic; namespace Wizard; public static class AIAccelerateUtility { public static bool IsAccelerate(AIVirtualCard card, AIVirtualField field, List playPtn, AISituationInfo situation) { if (card == null || card.AccelerateCostList == null || !card.IsInHand) { return false; } if (situation is AIVirtualActionInfo { ReservedPlayType: not PlaySimulationType.Undefined } aIVirtualActionInfo) { return aIVirtualActionInfo.ReservedPlayType == PlaySimulationType.Accelerate; } List playPtn2 = (card.IsAlly ? playPtn : null); AIVariableResultContainer valResultContainer = field.AI.ValResultContainer; ulong hash = AIFunctionResultHashCalculator.GetHash(card, field, playPtn, null, 0uL); if (valResultContainer.GetContainsResultValue(AIScriptTokenVariableType.IS_ACCELERATE, hash, out var getResult)) { return getResult == 1f; } bool flag = field.AI.PlayPtnRecorder.IsCardPlayingSimulationType(card, field, playPtn2, situation, PlaySimulationType.Accelerate); valResultContainer.CheckDuplicateAndAddRecord(AIScriptTokenVariableType.IS_ACCELERATE, hash, flag ? 1f : 0f, $"IsAccelerate(): Already hashed target and not equal value. CardName:[{card.CardName}] hash:[{hash}]"); return flag; } public static int GetAccelerateCost(AIVirtualCard card, AIVirtualField field, List playPtn) { if (card == null || card.AccelerateCostList == null) { return -1; } List playPtn2 = (card.IsAlly ? playPtn : null); return field.AI.PlayPtnRecorder.GetCardPlaySimulationTypeCost(card, field, playPtn2, null, PlaySimulationType.Accelerate); } public static int GetConditionPassedAccelerateId(AIVirtualCard card, AIVirtualField field, List playPtn, AISituationInfo situation, int usedCost) { if (card.AccelerateCostList == null || card.AccelerateCostList.Count <= 0) { return -1; } for (int i = 0; i < card.AccelerateCostList.Count; i++) { AIAccelerateInformation aIAccelerateInformation = card.AccelerateCostList[i]; if (aIAccelerateInformation.Cost == usedCost && aIAccelerateInformation.CheckCondition(card, field, playPtn, situation)) { return aIAccelerateInformation.CardId; } } return -1; } }