Link_Examples.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace DCGO.CardEffects.Examples
  5. {
  6. public class Link_Examples : CEntity_Effect
  7. {
  8. public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
  9. {
  10. List<ICardEffect> cardEffects = new List<ICardEffect>();
  11. #region Link Condition
  12. if (timing == EffectTiming.None)
  13. {
  14. static bool PermanentCondition(Permanent targetPermanent)
  15. {
  16. return targetPermanent.TopCard.HasAppmonTraits;
  17. }
  18. /// <summary>
  19. /// Used to add a link condition to itself
  20. /// </summary>
  21. /// <param name="permanentCondition">Function to check for target permanent conditions</param>
  22. /// <param name="linkCost">Cost to perform link</param>
  23. /// <param name="card">Reference to this card</param>
  24. /// <param name="condition">OPTIONAL - Function to check for effect conditions</param>
  25. /// <param name="cardCondition">OPTIONAL - Function to check for cards conditions</param>
  26. /// <param name="effectName">OPTIONAL - name to show for effect (default "Link")</param>
  27. /// <author>Mike Bunch</author>
  28. cardEffects.Add(CardEffectFactory.AddSelfLinkConditionStaticEffect(permanentCondition: PermanentCondition, linkCost: 0, card: card));
  29. }
  30. #endregion
  31. #region Basic link effect keyword
  32. if (timing == EffectTiming.OnDeclaration)
  33. {
  34. /// <summary>
  35. /// Used to link a card
  36. /// </summary>
  37. /// <param name="card">Reference to this card</param>
  38. /// <param name="condition">OPTIONAL - Function to check for effect conditions</param>
  39. /// <author>Mike Bunch</author>
  40. cardEffects.Add(CardEffectFactory.LinkEffect(card));
  41. }
  42. #endregion
  43. #region When Linked Example, Specifically When THIS card is added as a linked card
  44. if (timing == EffectTiming.WhenLinked)
  45. {
  46. ActivateClass activateClass = new ActivateClass();
  47. activateClass.SetUpICardEffect("Testing When Linking", CanUseCondition, card);
  48. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
  49. activateClass.SetIsLinkedEffect(true);
  50. cardEffects.Add(activateClass);
  51. string EffectDiscription()
  52. {
  53. return "[When linked] Testing When linking";
  54. }
  55. bool CanUseCondition(Hashtable hashtable)
  56. {
  57. return CardEffectCommons.CanTriggerWhenLinking(hashtable, null, card);
  58. }
  59. bool CanActivateCondition(Hashtable hashtable)
  60. {
  61. return isExistOnField(card);
  62. }
  63. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  64. {
  65. UnityEngine.Debug.Log("CARD SUCCESSFULLY LINKED");
  66. yield return null;
  67. }
  68. }
  69. #endregion
  70. #region When Linked Example, When A card is linked at all
  71. if (timing == EffectTiming.WhenLinked)
  72. {
  73. ActivateClass activateClass = new ActivateClass();
  74. activateClass.SetUpICardEffect("Testing When Linked", CanUseCondition, card);
  75. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
  76. cardEffects.Add(activateClass);
  77. string EffectDiscription()
  78. {
  79. return "[Your Turn] When this Digimon gets linked";
  80. }
  81. bool PermanentCondition(Permanent permanent)
  82. {
  83. return permanent == card.PermanentOfThisCard();
  84. }
  85. bool CardCondition(CardSource source)
  86. {
  87. return true;
  88. }
  89. bool CanUseCondition(Hashtable hashtable)
  90. {
  91. return CardEffectCommons.CanTriggerWhenLinked(hashtable, PermanentCondition, CardCondition);
  92. }
  93. bool CanActivateCondition(Hashtable hashtable)
  94. {
  95. return isExistOnField(card);
  96. }
  97. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  98. {
  99. UnityEngine.Debug.Log("CARD LINKED");
  100. yield return null;
  101. }
  102. }
  103. #endregion
  104. #region Trash 1 Link card
  105. if (timing == EffectTiming.OnStartMainPhase)
  106. {
  107. ActivateClass activateClass = new ActivateClass();
  108. activateClass.SetUpICardEffect("", CanUseCondition, card);
  109. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
  110. cardEffects.Add(activateClass);
  111. string EffectDiscription()
  112. {
  113. return "";
  114. }
  115. bool CanSelectPermanentCondition(Permanent permanent)
  116. {
  117. if (CardEffectCommons.IsPermanentExistsOnBattleAreaDigimon(permanent))
  118. {
  119. if (permanent.LinkedCards.Count(CanSelectCardCondition) >= 1)
  120. {
  121. return true;
  122. }
  123. }
  124. return false;
  125. }
  126. bool CanSelectCardCondition(CardSource cardSource)
  127. {
  128. return true;
  129. }
  130. bool CanUseCondition(Hashtable hashtable)
  131. {
  132. if (CardEffectCommons.IsExistOnBattleArea(card))
  133. {
  134. if (CardEffectCommons.IsOwnerTurn(card))
  135. {
  136. return true;
  137. }
  138. }
  139. return false;
  140. }
  141. bool CanActivateCondition(Hashtable hashtable)
  142. {
  143. if (CardEffectCommons.IsExistOnBattleArea(card))
  144. {
  145. return true;
  146. }
  147. return false;
  148. }
  149. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  150. {
  151. yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.SelectTrashLinkedCards(
  152. permanentCondition: CanSelectPermanentCondition,
  153. cardCondition: CanSelectCardCondition,
  154. maxCount: 1,
  155. canNoTrash: false,
  156. isFromOnly1Permanent: true,
  157. activateClass: activateClass
  158. ));
  159. }
  160. }
  161. #endregion
  162. #region Change Link Max Count
  163. if (timing == EffectTiming.None)
  164. {
  165. bool Condition()
  166. {
  167. if (CardEffectCommons.IsExistOnBattleArea(card))
  168. {
  169. return true;
  170. }
  171. return false;
  172. }
  173. cardEffects.Add(CardEffectFactory.ChangeSelfLinkMaxStaticEffect(
  174. changeValue: 1,
  175. isInheritedEffect: true,
  176. card: card,
  177. condition: Condition));
  178. }
  179. #endregion
  180. #region App Fusion
  181. if (timing == EffectTiming.None)
  182. {
  183. AddAppFusionConditionClass addAppFusionConditionClass = new AddAppFusionConditionClass();
  184. addAppFusionConditionClass.SetUpICardEffect($"App Fusion", (hashtable) => true, card);
  185. addAppFusionConditionClass.SetUpAddAppFusionConditionClass(getAppFusionCondition: GetAppFusion);
  186. addAppFusionConditionClass.SetNotShowUI(true);
  187. cardEffects.Add(addAppFusionConditionClass);
  188. AppFusionCondition GetAppFusion(CardSource cardSource)
  189. {
  190. bool linkCondition(Permanent permanent, CardSource source)
  191. {
  192. if (source != null)
  193. {
  194. if (source != card)
  195. {
  196. if (permanent.TopCard.EqualsCardName("First Name"))
  197. {
  198. if (permanent.LinkedCards.Find(x => x.EqualsCardName("Second Name")))
  199. {
  200. return true;
  201. }
  202. }
  203. if (permanent.TopCard.EqualsCardName("Second Name"))
  204. {
  205. if (permanent.LinkedCards.Find(x => x.EqualsCardName("First Name")))
  206. {
  207. return true;
  208. }
  209. }
  210. }
  211. return false;
  212. }
  213. return false;
  214. }
  215. bool digimonCondition(Permanent permanent)
  216. {
  217. if (CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card))
  218. {
  219. if (permanent.TopCard.EqualsCardName("First Name"))
  220. {
  221. if (permanent.LinkedCards.Find(x => x.EqualsCardName("Second Name")))
  222. {
  223. return true;
  224. }
  225. }
  226. if (permanent.TopCard.EqualsCardName("Second Name"))
  227. {
  228. if (permanent.LinkedCards.Find(x => x.EqualsCardName("First Name")))
  229. {
  230. return true;
  231. }
  232. }
  233. return false;
  234. }
  235. return false;
  236. }
  237. if (cardSource == card)
  238. {
  239. AppFusionCondition AppFusionCondition = new AppFusionCondition(
  240. linkedCondition: linkCondition,
  241. digimonCondition: digimonCondition,
  242. cost: 0);
  243. return AppFusionCondition;
  244. }
  245. return null;
  246. }
  247. }
  248. #endregion
  249. return cardEffects;
  250. }
  251. }
  252. }