Engage.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public partial class CardEffectFactory
  5. {
  6. #region [Engage] self effect
  7. public static ActivateClass EngageSelfStaticEffect(bool isInheritedEffect, CardSource card, Func<bool> condition, bool isLinkedEffect = false)
  8. {
  9. return EngageEffect(
  10. targetPermanent: card.PermanentOfThisCard(),
  11. isInheritedEffect,
  12. condition,
  13. rootCardEffect: null,
  14. card,
  15. beforeOnAttackCoroutine: null,
  16. isLinkedEffect
  17. );
  18. }
  19. #endregion
  20. #region [Engage] effect
  21. public static ActivateClass EngageEffect(
  22. Permanent targetPermanent,
  23. bool isInheritedEffect,
  24. Func<bool> condition,
  25. ICardEffect rootCardEffect,
  26. CardSource card,
  27. Func<IEnumerator> beforeOnAttackCoroutine = null,
  28. bool isLinkedEffect = false)
  29. {
  30. if (targetPermanent == null) return null;
  31. if (targetPermanent.TopCard == null) return null;
  32. if (card == null) return null;
  33. ActivateClass activateClass = new ActivateClass();
  34. activateClass.SetUpICardEffect("Engage", CanUseCondition, card);
  35. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDescription());
  36. activateClass.SetIsInheritedEffect(isInheritedEffect);
  37. string EffectDescription()
  38. {
  39. return $"{DataBase.EngageEffectDescription()}";
  40. }
  41. if (rootCardEffect != null)
  42. {
  43. activateClass.SetIsInheritedEffect(false);
  44. activateClass.SetEffectSourcePermanent(targetPermanent);
  45. activateClass.SetRootCardEffect(rootCardEffect);
  46. }
  47. bool CanUseCondition(Hashtable hashtable)
  48. {
  49. return CardEffectCommons.IsOwnerTurn(card)
  50. && CardEffectCommons.IsPermanentExistsOnBattleAreaDigimon(targetPermanent);
  51. }
  52. bool CanActivateCondition(Hashtable hashtable)
  53. {
  54. return CardEffectCommons.CanActivateEngage(targetPermanent.TopCard, activateClass)
  55. && (condition == null
  56. || condition());
  57. }
  58. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  59. {
  60. return CardEffectCommons.EngageProcess(targetPermanent.TopCard, activateClass, beforeOnAttackCoroutine);
  61. }
  62. return activateClass;
  63. }
  64. #endregion
  65. }