BT25_030.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. // Elecmon
  4. namespace DCGO.CardEffects.BT25
  5. {
  6. public class BT25_030 : CEntity_Effect
  7. {
  8. public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
  9. {
  10. List<ICardEffect> cardEffects = new List<ICardEffect>();
  11. #region Alternative Digivolve Condition
  12. if (timing == EffectTiming.None)
  13. {
  14. static bool PermanentCondition(Permanent targetPermanent)
  15. {
  16. return targetPermanent.TopCard.HasTSTraits;
  17. }
  18. cardEffects.Add(CardEffectFactory.AddSelfDigivolutionRequirementStaticEffect(PermanentCondition, 0, false, card, null, level: 2));
  19. }
  20. #endregion
  21. #region On Start of Main Phase
  22. if (timing == EffectTiming.OnStartMainPhase)
  23. {
  24. ActivateClass activateClass = new ActivateClass();
  25. activateClass.SetUpICardEffect("By adding the top security card to hand, gain 1 memory", CanUseCondition, card);
  26. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
  27. cardEffects.Add(activateClass);
  28. string EffectDiscription()
  29. {
  30. return "[Start of Your Main Phase] By adding your top security card to the hand, gain 1 memory.";
  31. }
  32. bool CanUseCondition(Hashtable hashtable)
  33. {
  34. return CardEffectCommons.IsExistOnBattleAreaDigimon(card)
  35. && CardEffectCommons.IsOwnerTurn(card);
  36. }
  37. bool CanActivateCondition(Hashtable hashtable)
  38. {
  39. return CardEffectCommons.IsExistOnBattleAreaDigimon(card)
  40. && card.Owner.SecurityCards.Count > 0;
  41. }
  42. IEnumerator ActivateCoroutine(Hashtable hashtable)
  43. {
  44. if (card.Owner.SecurityCards.Count > 0)
  45. {
  46. yield return ContinuousController.instance.StartCoroutine(CardObjectController.AddHandCards(new List<CardSource>() { card.Owner.SecurityCards[0] }, false, activateClass));
  47. yield return ContinuousController.instance.StartCoroutine(new IReduceSecurity(
  48. player: card.Owner,
  49. refSkillInfos: ref ContinuousController.instance.nullSkillInfos,
  50. activateClass).ReduceSecurity());
  51. yield return ContinuousController.instance.StartCoroutine(card.Owner.AddMemory(1, activateClass));
  52. }
  53. }
  54. }
  55. #endregion
  56. #region When Attacking - Inherited
  57. if (timing == EffectTiming.OnAllyAttack)
  58. {
  59. ActivateClass activateClass = new ActivateClass();
  60. activateClass.SetUpICardEffect("May add top sec card to hand, if at 0 <Recovery +1>.", CanUseCondition, card);
  61. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, 1, false, EffectDescription());
  62. activateClass.SetHashString("BT25_030_Inherited");
  63. activateClass.SetIsInheritedEffect(true);
  64. cardEffects.Add(activateClass);
  65. string EffectDescription()
  66. {
  67. return "[When Attacking] [Once Per Turn] You may add your top security card to the hand. Then, if you have 0 security cards, <Recovery +1 (Deck)>.";
  68. }
  69. bool CanUseCondition(Hashtable hashtable)
  70. {
  71. return CardEffectCommons.CanTriggerOnAttack(hashtable, card)
  72. && CardEffectCommons.IsExistOnBattleAreaDigimon(card);
  73. }
  74. bool CanActivateCondition(Hashtable hashtable)
  75. {
  76. return CardEffectCommons.IsExistOnBattleAreaDigimon(card);
  77. }
  78. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  79. {
  80. bool activated = false;
  81. if (card.Owner.SecurityCards.Count > 0)
  82. {
  83. List<SelectionElement<bool>> selectionElements = new List<SelectionElement<bool>>()
  84. {
  85. new SelectionElement<bool>(message: $"Add to hand", value : true, spriteIndex: 0),
  86. new SelectionElement<bool>(message: $"Not add to hand", value : false, spriteIndex: 1),
  87. };
  88. string selectPlayerMessage = "Will you add the card to hand?";
  89. string notSelectPlayerMessage = "The opponent is choosing whether to add the card to hand.";
  90. GManager.instance.userSelectionManager.SetBoolSelection(selectionElements: selectionElements, selectPlayer: card.Owner, selectPlayerMessage: selectPlayerMessage, notSelectPlayerMessage: notSelectPlayerMessage);
  91. yield return ContinuousController.instance.StartCoroutine(GManager.instance.userSelectionManager.WaitForEndSelect());
  92. bool addHand = GManager.instance.userSelectionManager.SelectedBoolValue;
  93. if (addHand)
  94. {
  95. activated = true;
  96. CardSource topCard = card.Owner.SecurityCards[0];
  97. yield return ContinuousController.instance.StartCoroutine(CardObjectController.AddHandCards(new List<CardSource>() { topCard }, false, activateClass));
  98. yield return ContinuousController.instance.StartCoroutine(new IReduceSecurity(
  99. player: card.Owner,
  100. refSkillInfos: ref ContinuousController.instance.nullSkillInfos,
  101. activateClass).ReduceSecurity());
  102. }
  103. }
  104. if (card.Owner.SecurityCards.Count == 0)
  105. {
  106. activated = true;
  107. yield return ContinuousController.instance.StartCoroutine(new IRecovery(card.Owner, 1, activateClass).Recovery());
  108. }
  109. if (!activated) activateClass.RemoveUse();
  110. }
  111. }
  112. #endregion
  113. return cardEffects;
  114. }
  115. }
  116. }