ChangeSAttack.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System;
  4. using System.Linq;
  5. using UnityEngine;
  6. public partial class CardEffectCommons
  7. {
  8. #region Player gains effect to change Digimon's SAttack
  9. public static IEnumerator ChangeDigimonSAttackPlayerEffect(
  10. Func<Permanent, bool> permanentCondition,
  11. int changeValue,
  12. EffectDuration effectDuration,
  13. ICardEffect activateClass)
  14. {
  15. if (activateClass == null) yield break;
  16. if (activateClass.EffectSourceCard == null) yield break;
  17. if (changeValue == 0) yield break;
  18. CardSource card = activateClass.EffectSourceCard;
  19. bool isUpValue = changeValue > 0;
  20. bool PermanentCondition(Permanent permanent)
  21. {
  22. if (IsPermanentExistsOnBattleArea(permanent))
  23. {
  24. if (!permanent.TopCard.CanNotBeAffected(activateClass))
  25. {
  26. if (permanentCondition == null || permanentCondition(permanent))
  27. {
  28. return true;
  29. }
  30. }
  31. }
  32. return false;
  33. }
  34. bool CanUseCondition()
  35. {
  36. return true;
  37. }
  38. ChangeSAttackClass changeDPClass = CardEffectFactory.ChangeSAttackStaticEffect(
  39. permanentCondition: PermanentCondition,
  40. changeValue: changeValue,
  41. isInheritedEffect: false,
  42. card: card,
  43. condition: CanUseCondition);
  44. AddEffectToPlayer(effectDuration: effectDuration, card: card, cardEffect: changeDPClass, timing: EffectTiming.None);
  45. foreach (Permanent permanent in GManager.instance.turnStateMachine.gameContext.PermanentsForTurnPlayer)
  46. {
  47. if (PermanentCondition(permanent))
  48. {
  49. if (isUpValue)
  50. {
  51. yield return ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>().CreateBuffEffect(permanent));
  52. }
  53. else
  54. {
  55. yield return ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>().CreateDebuffEffect(permanent));
  56. }
  57. }
  58. }
  59. }
  60. #endregion
  61. #region Player gains effect to invert Digimon's SAttack
  62. public static IEnumerator InvertDigimonSAttackPlayerEffect(
  63. Func<Permanent, bool> permanentCondition,
  64. int changeValue,
  65. EffectDuration effectDuration,
  66. ICardEffect activateClass)
  67. {
  68. if (activateClass == null) yield break;
  69. if (activateClass.EffectSourceCard == null) yield break;
  70. if (changeValue == 0) yield break;
  71. CardSource card = activateClass.EffectSourceCard;
  72. bool isUpValue = changeValue > 0;
  73. bool PermanentCondition(Permanent permanent)
  74. {
  75. if (IsPermanentExistsOnBattleArea(permanent))
  76. {
  77. if (!permanent.TopCard.CanNotBeAffected(activateClass))
  78. {
  79. if (permanentCondition == null || permanentCondition(permanent))
  80. {
  81. return true;
  82. }
  83. }
  84. }
  85. return false;
  86. }
  87. bool CanUseCondition()
  88. {
  89. return true;
  90. }
  91. InvertSAttackClass invertSAttackClass = CardEffectFactory.InvertSAttackStaticEffect(
  92. permanentCondition: PermanentCondition,
  93. changeValue: changeValue,
  94. isInheritedEffect: false,
  95. card: card,
  96. condition: CanUseCondition);
  97. AddEffectToPlayer(effectDuration: effectDuration, card: card, cardEffect: invertSAttackClass, timing: EffectTiming.None);
  98. foreach (Permanent permanent in GManager.instance.turnStateMachine.gameContext.PermanentsForTurnPlayer)
  99. {
  100. if (PermanentCondition(permanent))
  101. {
  102. if (!isUpValue)
  103. {
  104. yield return ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>().CreateBuffEffect(permanent));
  105. }
  106. else
  107. {
  108. yield return ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>().CreateDebuffEffect(permanent));
  109. }
  110. }
  111. }
  112. }
  113. #endregion
  114. }