Vortex.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using System.Collections;
  2. public partial class CardEffectCommons
  3. {
  4. #region Can activate [Vortex]
  5. public static bool CanActivateVortex(CardSource cardSource, ICardEffect activateClass)
  6. {
  7. return IsExistOnBattleArea(cardSource) &&
  8. cardSource.PermanentOfThisCard().CanAttack(activateClass, isVortex: true) &&
  9. (HasMatchConditionOpponentsPermanent(cardSource, permanent =>
  10. permanent.IsDigimon &&
  11. cardSource.PermanentOfThisCard().CanAttackTargetDigimon(permanent, activateClass, isVortex: true))
  12. || PermanentHasVortexCanAttackPlayers(cardSource.PermanentOfThisCard()));
  13. }
  14. #endregion
  15. public static bool PermanentHasVortexCanAttackPlayers(Permanent permanent)
  16. {
  17. #region the effects of permanents
  18. if (GManager.instance.turnStateMachine.gameContext.Players
  19. .Map(player => player.GetFieldPermanents())
  20. .Flat()
  21. .Map(permanent => permanent.EffectList(EffectTiming.None))
  22. .Flat()
  23. .Some(cardEffect => cardEffect is IVortexCanAttackPlayersEffect
  24. && cardEffect.CanUse(null)
  25. && ((IVortexCanAttackPlayersEffect)cardEffect).VortexCanAttackPlayersPermanent(permanent)))
  26. {
  27. return true;
  28. }
  29. #endregion
  30. #region the effects of players
  31. if (GManager.instance.turnStateMachine.gameContext.Players
  32. .Map(player => player.EffectList(EffectTiming.None))
  33. .Flat()
  34. .Some(cardEffect => cardEffect is IVortexCanAttackPlayersEffect
  35. && cardEffect.CanUse(null)
  36. && ((IVortexCanAttackPlayersEffect)cardEffect).VortexCanAttackPlayersPermanent(permanent)))
  37. {
  38. return true;
  39. }
  40. #endregion
  41. return false;
  42. }
  43. #region Effect process of [Vortex]
  44. public static IEnumerator VortexProcess(CardSource cardSource, ICardEffect activateClass)
  45. {
  46. Permanent selectedPermanent = cardSource.PermanentOfThisCard();
  47. bool canAttackPlayers = PermanentHasVortexCanAttackPlayers(selectedPermanent);
  48. if (selectedPermanent.CanAttack(activateClass, isVortex: true))
  49. {
  50. SelectAttackEffect selectAttackEffect = GManager.instance.GetComponent<SelectAttackEffect>();
  51. selectAttackEffect.SetUp(
  52. attacker: selectedPermanent,
  53. canAttackPlayerCondition: () => canAttackPlayers,
  54. defenderCondition: _ => true,
  55. cardEffect: activateClass);
  56. selectAttackEffect.SetIsVortex();
  57. yield return ContinuousController.instance.StartCoroutine(selectAttackEffect.Activate());
  58. }
  59. }
  60. #endregion
  61. #region Target 1 Digimon gains [Vortex]
  62. public static IEnumerator GainVortex(Permanent targetPermanent, EffectDuration effectDuration, ICardEffect activateClass)
  63. {
  64. if (targetPermanent == null) yield break;
  65. if (!IsPermanentExistsOnBattleArea(targetPermanent)) yield break;
  66. if (activateClass == null) yield break;
  67. if (activateClass.EffectSourceCard == null) yield break;
  68. CardSource card = activateClass.EffectSourceCard;
  69. bool CanUseCondition()
  70. {
  71. return IsPermanentExistsOnBattleArea(targetPermanent) &&
  72. !targetPermanent.TopCard.CanNotBeAffected(activateClass);
  73. }
  74. ActivateClass vortex = CardEffectFactory.VortexEffect(
  75. targetPermanent: targetPermanent,
  76. isInheritedEffect: false,
  77. condition: CanUseCondition,
  78. rootCardEffect: activateClass,
  79. targetPermanent.TopCard);
  80. AddEffectToPermanent(
  81. targetPermanent: targetPermanent,
  82. effectDuration: effectDuration,
  83. card: card,
  84. cardEffect: vortex,
  85. timing: EffectTiming.OnEndTurn);
  86. if (!targetPermanent.TopCard.CanNotBeAffected(activateClass))
  87. {
  88. yield return ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>()
  89. .CreateBuffEffect(targetPermanent));
  90. }
  91. }
  92. #endregion
  93. }