Engage.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.Collections;
  3. public partial class CardEffectCommons
  4. {
  5. #region Can activate [Engage]
  6. public static bool CanActivateEngage(CardSource cardSource, ICardEffect activateClass)
  7. {
  8. return IsExistOnBattleArea(cardSource)
  9. && cardSource.PermanentOfThisCard().CanAttack(activateClass)
  10. && !GManager.instance.attackProcess.IsAttacking;
  11. }
  12. #endregion
  13. #region Effect process of [Engage]
  14. public static IEnumerator EngageProcess(CardSource cardSource, ICardEffect activateClass, Func<IEnumerator> beforeOnAttackCoroutine = null)
  15. {
  16. if (CanActivateEngage(cardSource, activateClass))
  17. {
  18. SelectAttackEffect selectAttackEffect = GManager.instance.GetComponent<SelectAttackEffect>();
  19. selectAttackEffect.SetUp(
  20. attacker: cardSource.PermanentOfThisCard(),
  21. canAttackPlayerCondition: () => true,
  22. defenderCondition: (permanent) => true,
  23. cardEffect: activateClass);
  24. yield return ContinuousController.instance.StartCoroutine(selectAttackEffect.Activate());
  25. }
  26. }
  27. #endregion
  28. #region Target 1 Digimon gains [Engage]
  29. public static IEnumerator GainEngage(Permanent targetPermanent, EffectDuration effectDuration, ICardEffect activateClass)
  30. {
  31. if (targetPermanent == null) yield break;
  32. if (!IsPermanentExistsOnBattleArea(targetPermanent)) yield break;
  33. if (activateClass == null) yield break;
  34. if (activateClass.EffectSourceCard == null) yield break;
  35. CardSource card = activateClass.EffectSourceCard;
  36. bool CanUseCondition()
  37. {
  38. return IsPermanentExistsOnBattleArea(targetPermanent)
  39. && !targetPermanent.TopCard.CanNotBeAffected(activateClass);
  40. }
  41. ActivateClass engage = CardEffectFactory.EngageEffect(
  42. targetPermanent: targetPermanent,
  43. isInheritedEffect: false,
  44. condition: CanUseCondition,
  45. rootCardEffect: activateClass,
  46. card: card);
  47. AddEffectToPermanent(
  48. targetPermanent: targetPermanent,
  49. effectDuration: effectDuration,
  50. card: card,
  51. cardEffect: engage,
  52. timing: EffectTiming.OnEndTurn);
  53. if (!targetPermanent.TopCard.CanNotBeAffected(activateClass))
  54. {
  55. yield return ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>().CreateBuffEffect(targetPermanent));
  56. }
  57. }
  58. #endregion
  59. }