Decode.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System.Collections;
  2. using System;
  3. public partial class CardEffectFactory
  4. {
  5. #region Trigger effect of [Decode] on oneself
  6. public static ActivateClass DecodeSelfEffect(CardSource card, bool isInheritedEffect, string[] decodeStrings, Func<CardSource, bool> sourceCondition, Func<bool> condition,
  7. ICardEffect rootCardEffect = null)
  8. {
  9. Permanent targetPermanent = card.PermanentOfThisCard();
  10. bool CanUseCondition()
  11. {
  12. return CardEffectCommons.IsExistOnBattleAreaDigimon(card) &&
  13. (condition == null || condition());
  14. }
  15. if (sourceCondition == null) sourceCondition = _ => true;
  16. return DecodeEffect(targetPermanent: targetPermanent, isInheritedEffect: isInheritedEffect, decodeStrings,
  17. condition: CanUseCondition, sourceCondition: sourceCondition, rootCardEffect: rootCardEffect, card);
  18. }
  19. #endregion
  20. #region Trigger effect of [Decode]
  21. public static ActivateClass DecodeEffect(Permanent targetPermanent, bool isInheritedEffect, string[] decodeStrings,
  22. Func<bool> condition, Func<CardSource, bool> sourceCondition, ICardEffect rootCardEffect, CardSource card)
  23. {
  24. if (targetPermanent == null) return null;
  25. if (targetPermanent.TopCard == null) return null;
  26. if (card == null) return null;
  27. if (sourceCondition == null) sourceCondition = _ => true;
  28. // EX: "Decode (Red/Black)"
  29. string effectname = $"Decode {decodeStrings[0]}";
  30. ActivateClass activateClass = new ActivateClass();
  31. activateClass.SetUpICardEffect(effectname, CanUseCondition, card);
  32. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, DataBase.DecodeEffectDiscription(decodeStrings));
  33. activateClass.SetIsInheritedEffect(isInheritedEffect);
  34. if (rootCardEffect != null)
  35. {
  36. activateClass.SetIsInheritedEffect(false);
  37. activateClass.SetEffectSourcePermanent(targetPermanent);
  38. activateClass.SetRootCardEffect(rootCardEffect);
  39. }
  40. bool CanUseCondition(Hashtable hashtable)
  41. {
  42. return CardEffectCommons.IsExistOnBattleAreaDigimon(card) &&
  43. CardEffectCommons.CanTriggerWhenRemoveField(hashtable, card) &&
  44. !CardEffectCommons.IsByBattle(hashtable);
  45. }
  46. bool CanActivateCondition(Hashtable hashtable)
  47. {
  48. return CardEffectCommons.CanActivateDecode(targetPermanent.TopCard, sourceCondition, activateClass) &&
  49. (condition == null || condition());
  50. }
  51. IEnumerator ActivateCoroutine(Hashtable hashtable)
  52. {
  53. return CardEffectCommons.DecodeProcess(targetPermanent.TopCard, sourceCondition, decodeStrings, activateClass);
  54. }
  55. return activateClass;
  56. }
  57. #endregion
  58. }