Răsfoiți Sursa

Implement TrashSecurityAndProcessAccordingToResult

Lewisaaronwelch 1 an în urmă
părinte
comite
dd8ae6ac9a
2 a modificat fișierele cu 34 adăugiri și 0 ștergeri
  1. 8 0
      Assets/Scripts/CardController.cs
  2. 26 0
      Assets/Scripts/CardEffectCommons.cs

+ 8 - 0
Assets/Scripts/CardController.cs

@@ -3803,9 +3803,15 @@ public class IDestroySecurity
 
     Player _player = null;
     int _destroySecurityCount = 0;
+    public List<CardSource> DestroyedSecurity = new List<CardSource>();
     ICardEffect _cardEffect = null;
     bool _fromTop = false;
 
+    public bool IsDestroyed(CardSource cardSource)
+    {
+        return DestroyedSecurity.Contains(cardSource);
+    }
+
     public IEnumerator DestroySecurity()
     {
         bool StopDestroySecurity()
@@ -3871,6 +3877,8 @@ public class IDestroySecurity
                     #endregion
 
                     yield return ContinuousController.instance.StartCoroutine(CardObjectController.AddTrashCard(destroyedSecurityCard));
+
+                    DestroyedSecurity.Add(destroyedSecurityCard);
                 }
             }
 

+ 26 - 0
Assets/Scripts/CardEffectCommons.cs

@@ -505,6 +505,32 @@ public partial class CardEffectCommons
 
     #endregion
 
+    #region Trash Security cards and the effect determines whether the security were trashed or not
+
+    public static IEnumerator TrashSecurityAndProcessAccordingToResult(Player player, int trashAmount, ICardEffect activateClass, bool fromTop, Func<List<CardSource>, IEnumerator> successProcess, Func<IEnumerator> failureProcess)
+    {
+        IDestroySecurity destroySecurity = new IDestroySecurity(player, trashAmount, activateClass, fromTop);
+
+        yield return ContinuousController.instance.StartCoroutine(destroySecurity.DestroySecurity());
+
+        if (destroySecurity.DestroyedSecurity.Any())
+        {
+            if (successProcess != null)
+            {
+                yield return ContinuousController.instance.StartCoroutine(successProcess(destroySecurity.DestroyedSecurity));
+            }
+        }
+        else
+        {
+            if (failureProcess != null)
+            {
+                yield return ContinuousController.instance.StartCoroutine(failureProcess());
+            }
+        }
+    }
+
+    #endregion
+
     #region Trash digivolution cards from top or bottom
 
     public static IEnumerator TrashDigivolutionCardsFromTopOrBottom(Permanent targetPermanent, int trashCount, bool isFromTop, ICardEffect activateClass, Func<CardSource, bool> cardCondition = null)