CardEffectFactory.cs 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5. using System.Linq;
  6. using UnityEditor.Rendering;
  7. public partial class CardEffectFactory
  8. {
  9. #region Tamer's effect to set Memory to 3
  10. public static ICardEffect SetMemoryTo3TamerEffect(CardSource card)
  11. {
  12. ActivateClass activateClass = new ActivateClass();
  13. activateClass.SetUpICardEffect("Set Memory to 3", CanUseCondition, card);
  14. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
  15. string EffectDiscription()
  16. {
  17. return "[Start of Your Turn] If you have 2 or less memory, set your memory to 3.";
  18. }
  19. bool CanUseCondition(Hashtable hashtable)
  20. {
  21. if (CardEffectCommons.IsExistOnBattleArea(card))
  22. {
  23. if (CardEffectCommons.IsOwnerTurn(card))
  24. {
  25. return true;
  26. }
  27. }
  28. return false;
  29. }
  30. bool CanActivateCondition(Hashtable hashtable)
  31. {
  32. if (CardEffectCommons.IsExistOnBattleArea(card))
  33. {
  34. if (card.Owner.MemoryForPlayer <= 2)
  35. {
  36. if (card.Owner.CanAddMemory(activateClass))
  37. {
  38. return true;
  39. }
  40. }
  41. }
  42. return false;
  43. }
  44. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  45. {
  46. yield return ContinuousController.instance.StartCoroutine(card.Owner.SetFixedMemory(3, activateClass));
  47. }
  48. return activateClass;
  49. }
  50. #endregion
  51. #region Tamer's Security effect to play oneself
  52. public static ICardEffect PlaySelfTamerSecurityEffect(CardSource card)
  53. {
  54. ActivateClass activateClass = new ActivateClass();
  55. activateClass.SetUpICardEffect("Play this card", CanUseCondition, card);
  56. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
  57. activateClass.SetIsSecurityEffect(true);
  58. string EffectDiscription()
  59. {
  60. return "[Security] Play this card without paying its memory cost.";
  61. }
  62. bool CanUseCondition(Hashtable hashtable)
  63. {
  64. return CardEffectCommons.CanTriggerSecurityEffect(hashtable, card);
  65. }
  66. bool CanActivateCondition(Hashtable hashtable)
  67. {
  68. if (card.Owner.ExecutingCards.Contains(card))
  69. {
  70. if (CardEffectCommons.CanPlayAsNewPermanent(cardSource: card, payCost: false, cardEffect: activateClass))
  71. {
  72. return true;
  73. }
  74. }
  75. return false;
  76. }
  77. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  78. {
  79. yield return ContinuousController.instance.StartCoroutine(
  80. CardEffectCommons.PlayPermanentCards(
  81. cardSources: new List<CardSource>() { card },
  82. activateClass: activateClass,
  83. payCost: false,
  84. isTapped: false,
  85. root: SelectCardEffect.Root.Execution,
  86. activateETB: true));
  87. }
  88. return activateClass;
  89. }
  90. #endregion
  91. #region Digimon's Security effect to play oneself after battle
  92. public static ICardEffect PlaySelfDigimonAfterBattleSecurityEffect(CardSource card)
  93. {
  94. ActivateClass activateClass = new ActivateClass();
  95. activateClass.SetUpICardEffect("Play this card at the end of the battle", CanUseCondition, card);
  96. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
  97. activateClass.SetIsSecurityEffect(true);
  98. string EffectDiscription()
  99. {
  100. return "[Security] At the end of the battle, play this card without paying its memory cost.";
  101. }
  102. bool CanUseCondition(Hashtable hashtable)
  103. {
  104. return CardEffectCommons.CanTriggerSecurityEffect(hashtable, card);
  105. }
  106. bool CanActivateCondition(Hashtable hashtable)
  107. {
  108. if (CardEffectCommons.IsExistOnExecutingArea(card))
  109. {
  110. return true;
  111. }
  112. return false;
  113. }
  114. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  115. {
  116. yield return null;
  117. ContinuousController.instance.PlaySE(GManager.instance.GetComponent<Effects>().BuffSE);
  118. ActivateClass activateClass1 = new ActivateClass();
  119. activateClass1.SetUpICardEffect("Play this card", CanUseCondition1, card);
  120. activateClass1.SetUpActivateClass(CanActivateCondition1, ActivateCoroutine1, -1, false, EffectDiscription1());
  121. card.Owner.UntilEndBattleEffects.Add(GetCardEffect1);
  122. string EffectDiscription1()
  123. {
  124. return "Play this card without paying its memory cost.";
  125. }
  126. bool CanUseCondition1(Hashtable hashtable)
  127. {
  128. return true;
  129. }
  130. bool CanActivateCondition1(Hashtable hashtable)
  131. {
  132. if (CardEffectCommons.CanPlayAsNewPermanent(cardSource: card, payCost: false, cardEffect: activateClass1, root: SelectCardEffect.Root.Security))
  133. {
  134. if (!card.Owner.LibraryCards.Contains(card) && !card.Owner.SecurityCards.Contains(card))
  135. {
  136. return true;
  137. }
  138. }
  139. return false;
  140. }
  141. IEnumerator ActivateCoroutine1(Hashtable _hashtable1)
  142. {
  143. if (CardEffectCommons.CanPlayAsNewPermanent(cardSource: card, payCost: false, cardEffect: activateClass1, root: SelectCardEffect.Root.Security))
  144. {
  145. if (!card.Owner.LibraryCards.Contains(card) && !card.Owner.SecurityCards.Contains(card))
  146. {
  147. yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayPermanentCards(
  148. cardSources: new List<CardSource>() { card },
  149. activateClass: activateClass1,
  150. payCost: false,
  151. isTapped: false,
  152. root: SelectCardEffect.Root.Security,
  153. activateETB: true));
  154. }
  155. }
  156. }
  157. ICardEffect GetCardEffect1(EffectTiming _timing)
  158. {
  159. if (_timing == EffectTiming.OnEndBattle)
  160. {
  161. return activateClass1;
  162. }
  163. return null;
  164. }
  165. }
  166. return activateClass;
  167. }
  168. #endregion
  169. #region Delay Option's Security effect to place oneself in battle area
  170. public static ICardEffect PlaceSelfDelayOptionSecurityEffect(CardSource card)
  171. {
  172. ActivateClass activateClass = new ActivateClass();
  173. activateClass.SetUpICardEffect("Place this card in battle area", CanUseCondition, card);
  174. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
  175. activateClass.SetIsSecurityEffect(true);
  176. string EffectDiscription()
  177. {
  178. return "[Security] Place this card in its owner's battle area.";
  179. }
  180. bool CanUseCondition(Hashtable hashtable)
  181. {
  182. return CardEffectCommons.CanTriggerSecurityEffect(hashtable, card);
  183. }
  184. bool CanActivateCondition(Hashtable hashtable)
  185. {
  186. if (CardEffectCommons.CanPlayAsNewPermanent(cardSource: card, payCost: false, cardEffect: activateClass, isPlayOption: true))
  187. {
  188. return true;
  189. }
  190. return false;
  191. }
  192. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  193. {
  194. yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlaceDelayOptionCards(card: card, cardEffect: activateClass));
  195. }
  196. return activateClass;
  197. }
  198. #endregion
  199. #region Option's Security effect that "Activate this card's Main effect"
  200. public static ICardEffect ActivateMainOptionSecurityEffect(CardSource card, string effectName, string effectDiscription = "", Func<ICardEffect, IEnumerator> afterMainEffect = null)
  201. {
  202. ActivateClass mainActivateClass = CardEffectCommons.OptionMainEffect(card);
  203. ActivateClass activateClass = new ActivateClass();
  204. activateClass.SetUpICardEffect(EffectName(), CanUseCondition, card);
  205. activateClass.SetUpActivateClass(null, ActivateCoroutine, -1, false, EffectDiscription());
  206. activateClass.SetIsSecurityEffect(true);
  207. string EffectName()
  208. {
  209. if (!string.IsNullOrEmpty(effectName)) return effectName;
  210. if (mainActivateClass != null) return mainActivateClass.EffectName;
  211. return "";
  212. }
  213. string EffectDiscription()
  214. {
  215. if (!string.IsNullOrEmpty(effectDiscription)) return effectDiscription;
  216. if (mainActivateClass != null) return mainActivateClass.EffectDiscription.Replace("[Main]", "[Security]");
  217. return "";
  218. }
  219. bool CanUseCondition(Hashtable hashtable)
  220. {
  221. return CardEffectCommons.CanTriggerSecurityEffect(CardEffectCommons.OptionMainCheckHashtable(card), card);
  222. }
  223. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  224. {
  225. if (mainActivateClass != null)
  226. {
  227. yield return ContinuousController.instance.StartCoroutine(mainActivateClass.Activate(CardEffectCommons.OptionMainCheckHashtable(card)));
  228. }
  229. if (afterMainEffect != null)
  230. {
  231. yield return ContinuousController.instance.StartCoroutine(afterMainEffect(activateClass));
  232. }
  233. }
  234. return activateClass;
  235. }
  236. #endregion
  237. }