AddAppfusionMethod.cs 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System;
  4. using System.Linq;
  5. using UnityEngine;
  6. public partial class CardEffectFactory
  7. {
  8. #region Static effect that gives the ability to appfuse by name
  9. public static AddAppFusionConditionClass AddAppfuseMethodByName(List<string> cardNames, CardSource card, int cost = 0, string effectName = "App Fusion")
  10. {
  11. return AddAppfuseMethodByCondition(cardNames.Select<string, Func<CardSource, bool>>(name => card => card.EqualsCardName(name)).ToList(), card, cost, effectName);
  12. }
  13. #endregion
  14. #region Static effect that gives the ability to appfuse by condition
  15. public static AddAppFusionConditionClass AddAppfuseMethodByCondition(List<Func<CardSource, bool>> cardConditions, CardSource card, int cost = 0, string effectName = "App Fusion")
  16. {
  17. AddAppFusionConditionClass addAppFusionConditionClass = new AddAppFusionConditionClass();
  18. addAppFusionConditionClass.SetUpICardEffect(effectName, (hashtable) => true, card);
  19. addAppFusionConditionClass.SetUpAddAppFusionConditionClass(getAppFusionCondition: GetAppFusion);
  20. addAppFusionConditionClass.SetNotShowUI(true);
  21. return addAppFusionConditionClass;
  22. AppFusionCondition GetAppFusion(CardSource cardSource)
  23. {
  24. bool linkCondition(Permanent permanent, CardSource source)
  25. {
  26. if (source != null)
  27. {
  28. if (source != card)
  29. {
  30. for(int i = 0; i < cardConditions.Count; i++)
  31. {
  32. if (cardConditions[i](source))
  33. {
  34. for (int j = 0; j <= cardConditions.Count; j++)
  35. {
  36. if(i != j)
  37. {
  38. if (cardConditions[j](permanent.TopCard))
  39. {
  40. return true;
  41. }
  42. }
  43. }
  44. }
  45. }
  46. }
  47. }
  48. return false;
  49. }
  50. bool digimonCondition(Permanent permanent)
  51. {
  52. if (CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card))
  53. {
  54. for (int i = 0; i < cardConditions.Count; i++)
  55. {
  56. if (cardConditions[i](permanent.TopCard))
  57. {
  58. for (int j = 0; j <= cardConditions.Count; j++)
  59. {
  60. if (i != j)
  61. {
  62. if (permanent.LinkedCards.Find(x => cardConditions[j](x)))
  63. {
  64. return true;
  65. }
  66. }
  67. }
  68. }
  69. }
  70. }
  71. return false;
  72. }
  73. if (cardSource == card)
  74. {
  75. AppFusionCondition AppFusionCondition = new AppFusionCondition(
  76. linkedCondition: linkCondition,
  77. digimonCondition: digimonCondition,
  78. cost: cost);
  79. return AppFusionCondition;
  80. }
  81. return null;
  82. }
  83. }
  84. #endregion
  85. }