Pārlūkot izejas kodu

Partition and collision effect scripts

mbunch_kascope 2 gadi atpakaļ
vecāks
revīzija
c8a44b36f9

+ 95 - 0
Assets/Scripts/CardEffectCommons/KeyWordEffects/Collision.cs

@@ -0,0 +1,95 @@
+using System.Collections;
+using System.Collections.Generic;
+using System;
+using System.Linq;
+using UnityEngine;
+
+public partial class CardEffectCommons
+{
+    #region Can activate [Collision]
+    public static bool CanActivateCollision(CardSource cardSource, ICardEffect activateClass)
+    {
+        if (IsExistOnBattleArea(cardSource))
+        {
+            if (cardSource.PermanentOfThisCard().CanAttack(activateClass))
+            {
+                if (cardSource.Owner.Enemy.GetBattleAreaDigimons().Count >= 1)
+                {
+                    if (!GManager.instance.attackProcess.IsAttacking)
+                    {
+                        return true;
+                    }
+                }
+            }
+        }
+
+        return false;
+    }
+    #endregion
+
+    #region Effect process of [Blitz]
+    public static IEnumerator CollisionProcess(CardSource cardSource, ICardEffect activateClass, Func<IEnumerator> beforeOnAttackCoroutine = null)
+    {
+        if (CanActivateCollision(cardSource, activateClass))
+        {
+            foreach(Permanent enemyDigimon in cardSource.Owner.Enemy.GetBattleAreaDigimons())
+            {
+                if (!enemyDigimon.TopCard.CanNotBeAffected(activateClass))
+                {
+                    yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.GainBlocker(
+                        targetPermanent: enemyDigimon,
+                        effectDuration: EffectDuration.UntilEndAttack,
+                        activateClass: activateClass));
+
+                    int maxCount = 1;
+
+                    Permanent selectedPermanent = null;
+
+                    SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
+
+                    selectPermanentEffect.SetUp(
+                        selectPlayer: cardSource.Owner.Enemy,
+                        canTargetCondition: CanSelectBlockerCondition,
+                        canTargetCondition_ByPreSelecetedList: null,
+                        canEndSelectCondition: null,
+                        maxCount: maxCount,
+                        canNoSelect: false,
+                        canEndNotMax: false,
+                        selectPermanentCoroutine: SelectPermanentCoroutine,
+                        afterSelectPermanentCoroutine: null,
+                        mode: SelectPermanentEffect.Mode.Custom,
+                        cardEffect: null);
+
+                    selectPermanentEffect.SetUpCustomMessage("Select 1 Digimon that will block.", "The opponent is selecting 1 Digimon that will block.");
+                    selectPermanentEffect.SetUpCustomBackButtonMessage("Not Block");
+
+                    yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
+
+                    bool CanSelectBlockerCondition(Permanent permanent)
+                    {
+                        if (CardEffectCommons.IsPermanentExistsOnBattleArea(permanent))
+                        {
+                            if (permanent.TopCard.Owner.isYou)
+                            {
+                                if (permanent.HasBlocker && permanent.CanBlock(cardSource.PermanentOfThisCard()))
+                                {
+                                    return true;
+                                }
+                            }
+                        }
+
+                        return false;
+                    }
+
+                    IEnumerator SelectPermanentCoroutine(Permanent permanent)
+                    {
+                        selectedPermanent = permanent;
+
+                        yield return ContinuousController.instance.StartCoroutine(GManager.instance.attackProcess.SwitchDefender(null, true, selectedPermanent));
+                    }
+                }
+            }
+        }
+    }
+    #endregion
+}

+ 11 - 0
Assets/Scripts/CardEffectCommons/KeyWordEffects/Collision.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 690f31e3af0dce54e8d1fab02daf653d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 25 - 9
Assets/Scripts/CardEffectCommons/KeyWordEffects/Partition.cs

@@ -1,9 +1,6 @@
 using System.Collections;
 using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System;
 using System;
-using System.Linq;
-using UnityEngine;
-using static UnityEngine.UI.GridLayoutGroup;
 
 
 public partial class CardEffectCommons
 public partial class CardEffectCommons
 {
 {
@@ -24,7 +21,6 @@ public partial class CardEffectCommons
         return false;
         return false;
     }
     }
     #endregion
     #endregion
-
     
     
     #region Can activate [Partition]
     #region Can activate [Partition]
     public static bool CanActivatePartition(Permanent permanent)
     public static bool CanActivatePartition(Permanent permanent)
@@ -42,9 +38,9 @@ public partial class CardEffectCommons
     #endregion
     #endregion
 
 
     #region Effect process of [Partition]
     #region Effect process of [Partition]
-    public static IEnumerator PartitionProcess(ICardEffect activateClass, Permanent permanent, Func<CardSource, bool> CanSelectCardCondition)
+    public static IEnumerator PartitionProcess(ICardEffect activateClass, Permanent permanent, Func<CardSource, bool> CanSelectFirstSourceCondition, Func<CardSource, bool> CanSelectSecondSourceCondition)
     {
     {
-        yield return ContinuousController.instance.StartCoroutine(new PartitionClass(permanent).Partition(activateClass, CanSelectCardCondition));
+        yield return ContinuousController.instance.StartCoroutine(new PartitionClass(permanent).Partition(activateClass, CanSelectFirstSourceCondition, CanSelectSecondSourceCondition));
     }
     }
     #endregion
     #endregion
 
 
@@ -59,7 +55,7 @@ public partial class CardEffectCommons
         Permanent _permanent = null;
         Permanent _permanent = null;
 
 
 
 
-        public IEnumerator Partition(ICardEffect activateClass, Func<CardSource, bool> CanSelectCardCondition)
+        public IEnumerator Partition(ICardEffect activateClass, Func<CardSource, bool> CanSelectFristSourceCondition, Func<CardSource, bool> CanSelectSecondSourceCondition)
         {
         {
             if (_permanent != null)
             if (_permanent != null)
             {
             {
@@ -75,7 +71,27 @@ public partial class CardEffectCommons
 
 
                     SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
                     SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
                     selectCardEffect.SetUp(
                     selectCardEffect.SetUp(
-                            canTargetCondition: CanSelectCardCondition,
+                            canTargetCondition: CanSelectFristSourceCondition,
+                            canTargetCondition_ByPreSelecetedList: null,
+                            canEndSelectCondition: null,
+                            canNoSelect: () => false,
+                            selectCardCoroutine: SelectCardCoroutine,
+                            afterSelectCardCoroutine: null,
+                            message: "Select card to play",
+                            maxCount: 1,
+                            canEndNotMax: false,
+                            isShowOpponent: false,
+                            mode: SelectCardEffect.Mode.Custom,
+                            root: SelectCardEffect.Root.DigivolutionCards,
+                            customRootCardList: _permanent.cardSources,
+                            canLookReverseCard: true,
+                            selectPlayer: topCard.Owner,
+                            cardEffect: activateClass);
+
+                    yield return ContinuousController.instance.StartCoroutine(selectCardEffect.Activate());
+
+                    selectCardEffect.SetUp(
+                            canTargetCondition: CanSelectSecondSourceCondition,
                             canTargetCondition_ByPreSelecetedList: null,
                             canTargetCondition_ByPreSelecetedList: null,
                             canEndSelectCondition: null,
                             canEndSelectCondition: null,
                             canNoSelect: () => false,
                             canNoSelect: () => false,
@@ -104,7 +120,7 @@ public partial class CardEffectCommons
                 
                 
                 foreach(CardSource card in selectedCards)
                 foreach(CardSource card in selectedCards)
                 {
                 {
-                    yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayPermanentCards(
+                    yield return ContinuousController.instance.StartCoroutine(PlayPermanentCards(
                         cardSources: new List<CardSource>() { card },
                         cardSources: new List<CardSource>() { card },
                         activateClass: activateClass,
                         activateClass: activateClass,
                         payCost: false,
                         payCost: false,

+ 65 - 0
Assets/Scripts/CardEffectFactory/KeyWordEffects/Collision.cs

@@ -0,0 +1,65 @@
+using System.Collections;
+using System.Collections.Generic;
+using System;
+using System.Linq;
+using UnityEngine;
+
+public partial class CardEffectFactory
+{
+    #region Static effect of [Collision] on oneself
+    public static ActivateClass CollisionSelfStaticEffect(bool isInheritedEffect, CardSource card, Func<IEnumerator> beforeOnAttackCoroutine = null)
+    {
+        bool PermanentCondition(Permanent permanent) => permanent == card.PermanentOfThisCard();
+
+        bool CanUseCondition()
+        {
+            if (CardEffectCommons.IsExistOnBattleAreaDigimon(card))
+            {
+                if(card.Owner.Enemy.GetBattleAreaDigimons().Count() > 0)
+                {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+        return CollisionStaticEffect(isInheritedEffect: isInheritedEffect, card: card, beforeOnAttackCoroutine: beforeOnAttackCoroutine);
+    }
+    #endregion
+
+    #region Static effect of [Collision]
+    public static ActivateClass CollisionStaticEffect(
+        bool isInheritedEffect,
+        CardSource card,
+        Func<IEnumerator> beforeOnAttackCoroutine = null)
+    {
+        ActivateClass activateClass = new ActivateClass();
+        activateClass.SetUpICardEffect("Collision", CanUseCondition, card);
+        activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
+        activateClass.SetIsInheritedEffect(isInheritedEffect);
+
+        string EffectDiscription()
+        {
+            return DataBase.CollisionEffectDiscription();
+        }
+
+        bool CanUseCondition(Hashtable hashtable)
+        {
+            return CardEffectCommons.CanTriggerOnAttack(hashtable, card);
+        }
+
+        bool CanActivateCondition(Hashtable hashtable)
+        {
+            return true;
+        }
+
+        IEnumerator ActivateCoroutine(Hashtable _hashtable)
+        {
+            return CardEffectCommons.CollisionProcess(card, activateClass, beforeOnAttackCoroutine);
+        }
+
+        return activateClass;
+    }
+    #endregion
+}

+ 11 - 0
Assets/Scripts/CardEffectFactory/KeyWordEffects/Collision.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 67327a8bb8dfbda4998ebdd71664cf77
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 4 - 4
Assets/Scripts/CardEffectFactory/KeyWordEffects/Partition.cs

@@ -7,7 +7,7 @@ using UnityEngine;
 public partial class CardEffectFactory
 public partial class CardEffectFactory
 {
 {
     #region Trigger effect of [Partition] on oneself
     #region Trigger effect of [Partition] on oneself
-    public static ActivateClass PartitionSelfEffect(bool isInheritedEffect, CardSource card, Func<bool> condition, Func<CardSource, bool> canSelectPermanentCondition)
+    public static ActivateClass PartitionSelfEffect(bool isInheritedEffect, CardSource card, Func<bool> condition, Func<CardSource, bool> canSelectFirstSourceCondition, Func<CardSource, bool> canSelectSecondSourceCondition)
     {
     {
         Permanent targetPermanent = card.PermanentOfThisCard();
         Permanent targetPermanent = card.PermanentOfThisCard();
 
 
@@ -21,12 +21,12 @@ public partial class CardEffectFactory
             return false;
             return false;
         }
         }
 
 
-        return PartitionEffect(targetPermanent: targetPermanent, isInheritedEffect: isInheritedEffect, condition: CanUseCondition, cardCondition: canSelectPermanentCondition, card);
+        return PartitionEffect(targetPermanent: targetPermanent, isInheritedEffect: isInheritedEffect, condition: CanUseCondition, firstSourceCondition: canSelectFirstSourceCondition, secondSourceCondition: canSelectSecondSourceCondition, card);
     }
     }
     #endregion
     #endregion
 
 
     #region Trigger effect of [Partition]
     #region Trigger effect of [Partition]
-    public static ActivateClass PartitionEffect(Permanent targetPermanent, bool isInheritedEffect, Func<bool> condition, Func<CardSource, bool> cardCondition, CardSource card)
+    public static ActivateClass PartitionEffect(Permanent targetPermanent, bool isInheritedEffect, Func<bool> condition, Func<CardSource, bool> firstSourceCondition, Func<CardSource, bool> secondSourceCondition, CardSource card)
     {
     {
         if (targetPermanent == null) return null;
         if (targetPermanent == null) return null;
         if (targetPermanent.TopCard == null) return null;
         if (targetPermanent.TopCard == null) return null;
@@ -58,7 +58,7 @@ public partial class CardEffectFactory
 
 
         IEnumerator ActivateCoroutine(Hashtable _hashtable)
         IEnumerator ActivateCoroutine(Hashtable _hashtable)
         {
         {
-            return CardEffectCommons.PartitionProcess(activateClass, targetPermanent, cardCondition);
+            return CardEffectCommons.PartitionProcess(activateClass, targetPermanent, firstSourceCondition, secondSourceCondition);
         }
         }
 
 
         return activateClass;
         return activateClass;

+ 6 - 1
Assets/Scripts/DataBase.cs

@@ -491,7 +491,7 @@ public class DataBase : MonoBehaviour
 
 
     public static string BarrierEffectDiscription()
     public static string BarrierEffectDiscription()
     {
     {
-        return "<Barrier? (When this Digimon would be deleted in battle, by trashing the top card of your security stack, prevent that deletion.)";
+        return "<Barrier> (When this Digimon would be deleted in battle, by trashing the top card of your security stack, prevent that deletion.)";
     }
     }
 
 
     public static string BlastDigivolveEffectDiscription()
     public static string BlastDigivolveEffectDiscription()
@@ -514,6 +514,11 @@ public class DataBase : MonoBehaviour
         return "<Partition> (When this Digimon with 1 of each specified card in its digivolution cards would leave the battle area other than by one of your effects or in battle, you may play 1 of each card without paying their costs)";
         return "<Partition> (When this Digimon with 1 of each specified card in its digivolution cards would leave the battle area other than by one of your effects or in battle, you may play 1 of each card without paying their costs)";
     }
     }
 
 
+    public static string CollisionEffectDiscription()
+    {
+        return "<Collision> (During this Digimon's attack, all of your opponent's Digimon gain <Blocker>, and your opponent blocks if possible)";
+    }
+
     public static string ReplaceToASCII(string text)
     public static string ReplaceToASCII(string text)
     {
     {
         if (string.IsNullOrEmpty(text))
         if (string.IsNullOrEmpty(text))