Просмотр исходного кода

Merge pull request #199 from DCGO2/AppfuseSimplification

Appfuse simplification
Michael8818 11 месяцев назад
Родитель
Сommit
444bf524d6

+ 1 - 83
Assets/CardEffect/EX10/Green/EX10_017.cs

@@ -32,89 +32,7 @@ namespace DCGO.CardEffects.EX10
 
             if (timing == EffectTiming.None)
             {
-                AddAppFusionConditionClass addAppFusionConditionClass = new AddAppFusionConditionClass();
-                addAppFusionConditionClass.SetUpICardEffect($"App Fusion", (hashtable) => true, card);
-                addAppFusionConditionClass.SetUpAddAppFusionConditionClass(getAppFusionCondition: GetAppFusion);
-                addAppFusionConditionClass.SetNotShowUI(true);
-                cardEffects.Add(addAppFusionConditionClass);
-
-                AppFusionCondition GetAppFusion(CardSource cardSource)
-                {
-                    bool linkCondition(Permanent permanent, CardSource source)
-                    {
-                        if (source != null && source != card)
-                        {
-                            if (permanent.TopCard.EqualsCardName("Mirrormon"))
-                            {
-                                if (permanent.LinkedCards.Find(x => x.EqualsCardName("Kabemon") || x.EqualsCardName("Copipemon")))
-                                {
-                                    return true;
-                                }
-                            }
-
-                            if (permanent.TopCard.EqualsCardName("Kabemon"))
-                            {
-                                if (permanent.LinkedCards.Find(x => x.EqualsCardName("Mirrormon") || x.EqualsCardName("Copipemon")))
-                                {
-                                    return true;
-                                }
-                            }
-
-                            if (permanent.TopCard.EqualsCardName("Copipemon"))
-                            {
-                                if (permanent.LinkedCards.Find(x => x.EqualsCardName("Mirrormon") || x.EqualsCardName("Kabemon")))
-                                {
-                                    return true;
-                                }
-                            }
-                        }
-
-                        return false;
-                    }
-                    bool digimonCondition(Permanent permanent)
-                    {
-                        if (CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card))
-                        {
-                            if (permanent.TopCard.EqualsCardName("Mirrormon"))
-                            {
-                                if (permanent.LinkedCards.Find(x => x.EqualsCardName("Kabemon") || x.EqualsCardName("Copipemon")))
-                                {
-                                    return true;
-                                }
-                            }
-
-                            if (permanent.TopCard.EqualsCardName("Kabemon"))
-                            {
-                                if (permanent.LinkedCards.Find(x => x.EqualsCardName("Mirrormon") || x.EqualsCardName("Copipemon")))
-                                {
-                                    return true;
-                                }
-                            }
-
-                            if (permanent.TopCard.EqualsCardName("Copipemon"))
-                            {
-                                if (permanent.LinkedCards.Find(x => x.EqualsCardName("Mirrormon") || x.EqualsCardName("Kabemon")))
-                                {
-                                    return true;
-                                }
-                            }
-                        }
-
-                        return false;
-                    }
-
-                    if (cardSource == card)
-                    {
-                        AppFusionCondition AppFusionCondition = new AppFusionCondition(
-                            linkCondition,
-                            digimonCondition,
-                            0);
-
-                        return AppFusionCondition;
-                    }
-
-                    return null;
-                }
+                cardEffects.Add(CardEffectFactory.AddAppfuseMethodByName(new List<string>() {"Mirrormon", "Kabemon","Copipemon"},card));
             }
 
             #endregion

+ 95 - 0
Assets/Scripts/CardEffectFactory/AddAppfusionMethod.cs

@@ -0,0 +1,95 @@
+using System.Collections;
+using System.Collections.Generic;
+using System;
+using System.Linq;
+using UnityEngine;
+
+public partial class CardEffectFactory
+{
+    #region Static effect that gives the ability to appfuse by name
+    public static AddAppFusionConditionClass AddAppfuseMethodByName(List<string> cardNames, CardSource card, int cost = 0, string effectName = "App Fusion")
+    {
+        return AddAppfuseMethodByCondition(cardNames.Select<string, Func<CardSource, bool>>(name => card => card.EqualsCardName(name)).ToList(), card, cost, effectName);
+    }
+    #endregion
+
+    #region Static effect that gives the ability to appfuse by condition
+    public static AddAppFusionConditionClass AddAppfuseMethodByCondition(List<Func<CardSource, bool>> cardConditions, CardSource card, int cost = 0, string effectName = "App Fusion")
+    {
+        AddAppFusionConditionClass addAppFusionConditionClass = new AddAppFusionConditionClass();
+        addAppFusionConditionClass.SetUpICardEffect(effectName, (hashtable) => true, card);
+        addAppFusionConditionClass.SetUpAddAppFusionConditionClass(getAppFusionCondition: GetAppFusion);
+        addAppFusionConditionClass.SetNotShowUI(true);
+        return addAppFusionConditionClass;
+
+        AppFusionCondition GetAppFusion(CardSource cardSource)
+        {
+            bool linkCondition(Permanent permanent, CardSource source)
+            {
+                if (source != null)
+                {
+                    if (source != card)
+                    {
+                        for(int i = 0; i < cardConditions.Count; i++)
+                        {
+                            if (cardConditions[i](source)) 
+                            {
+                                for (int j = 0; j <= cardConditions.Count; j++)
+                                {
+                                    if(i != j)
+                                    {
+                                        if (cardConditions[j](permanent.TopCard))
+                                        {
+                                            return true;
+                                        }
+                                    }
+                                }
+                            }
+                            
+                        }
+                    }
+                }
+
+                return false;
+            }
+            bool digimonCondition(Permanent permanent)
+            {
+                if (CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card))
+                {
+                    for (int i = 0; i < cardConditions.Count; i++)
+                    {
+                        if (cardConditions[i](permanent.TopCard))
+                        {
+                            for (int j = 0; j <= cardConditions.Count; j++)
+                            {
+                                if (i != j)
+                                {
+                                    if (permanent.LinkedCards.Find(x => cardConditions[j](x)))
+                                    {
+                                        return true;
+                                    }
+                                }
+                            }
+                        }
+
+                    }
+                }
+
+                return false;
+            }
+
+            if (cardSource == card)
+            {
+                AppFusionCondition AppFusionCondition = new AppFusionCondition(
+                    linkedCondition: linkCondition,
+                    digimonCondition: digimonCondition,
+                    cost: cost);
+
+                return AppFusionCondition;
+            }
+
+            return null;
+        }
+    }
+    #endregion
+}

+ 11 - 0
Assets/Scripts/CardEffectFactory/AddAppfusionMethod.cs.meta

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