SelectAppFusionEffect.cs 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5. using System.Linq;
  6. public class SelectAppFusionEffect : MonoBehaviour
  7. {
  8. public void SetUp_SelectWheterToAppFusion
  9. (CardSource card,
  10. CardSource evoRoot,
  11. bool canNoSelect,
  12. Func<IEnumerator> endSelectCoroutine_Digivolve,
  13. Func<IEnumerator> endSelectCoroutine_AppFusion,
  14. Func<IEnumerator> noSelectCoroutine)
  15. {
  16. _card = card;
  17. EvoRoot = evoRoot;
  18. _canNoSelect = canNoSelect;
  19. _endSelectCoroutine_Digivolve = endSelectCoroutine_Digivolve;
  20. _endSelectCoroutine_AppFusion = endSelectCoroutine_AppFusion;
  21. _noSelectCoroutine = noSelectCoroutine;
  22. }
  23. public void SetUp_SelectLink
  24. (CardSource card,
  25. bool isLocal,
  26. bool isPayCost,
  27. bool canNoSelect,
  28. Func<CardSource, IEnumerator> endSelectCoroutine_SelectLink,
  29. Func<IEnumerator> noSelectCoroutine)
  30. {
  31. _card = card;
  32. _isLocal = isLocal;
  33. _isPayCost = isPayCost;
  34. _canNoSelect = canNoSelect;
  35. _endSelectCoroutine_SelectLink = endSelectCoroutine_SelectLink;
  36. _noSelectCoroutine = noSelectCoroutine;
  37. }
  38. CardSource _card = null;
  39. public CardSource EvoRoot = null;
  40. bool _isLocal = false;
  41. bool _isPayCost = false;
  42. bool _canNoSelect = false;
  43. Func<IEnumerator> _endSelectCoroutine_Digivolve = null;
  44. Func<IEnumerator> _endSelectCoroutine_AppFusion = null;
  45. Func<CardSource, IEnumerator> _endSelectCoroutine_SelectLink = null;
  46. Func<IEnumerator> _noSelectCoroutine = null;
  47. public bool LinkAdded { get; private set; } = false;
  48. public CardSource selectedLink = null;
  49. public IEnumerator SelectWheterToAppFusion()
  50. {
  51. if (_card != null)
  52. {
  53. if (EvoRoot != null)
  54. {
  55. yield return StartCoroutine(GManager.instance.selectCardPanel.OpenSelectCardPanel(
  56. Message: "With which method would you like to Digivolve?",
  57. RootCardSources: new List<CardSource>() { _card, _card },
  58. _CanTargetCondition: (cardSource) => true,
  59. _CanTargetCondition_ByPreSelecetedList: null,
  60. _CanEndSelectCondition: null,
  61. _MaxCount: 1,
  62. _CanEndNotMax: false,
  63. _CanNoSelect: () => _canNoSelect,
  64. CanLookReverseCard: true,
  65. skillInfos: null,
  66. root: SelectCardEffect.Root.None,
  67. isCenter: true,
  68. evoRootsArray: new CardSource[][] { new CardSource[] { EvoRoot }, new CardSource[] { EvoRoot } },
  69. titleStrings: new List<string>() { "Normal Digivolution", "<color=#FF633E>App Fusion</color>" }));
  70. if (GManager.instance.selectCardPanel.SelectedIndex.Count > 0)
  71. {
  72. int index = GManager.instance.selectCardPanel.SelectedIndex[0];
  73. switch (index)
  74. {
  75. case 0:
  76. if (_endSelectCoroutine_Digivolve != null)
  77. {
  78. yield return ContinuousController.instance.StartCoroutine(_endSelectCoroutine_Digivolve());
  79. }
  80. break;
  81. case 1:
  82. if (_endSelectCoroutine_AppFusion != null)
  83. {
  84. yield return ContinuousController.instance.StartCoroutine(_endSelectCoroutine_AppFusion());
  85. }
  86. break;
  87. }
  88. }
  89. else
  90. {
  91. if (_noSelectCoroutine != null)
  92. {
  93. yield return ContinuousController.instance.StartCoroutine(_noSelectCoroutine());
  94. }
  95. }
  96. }
  97. }
  98. }
  99. public IEnumerator SelectLink(Permanent targetPermanent)
  100. {
  101. bool active = false;
  102. SelectCardEffect selectCardEffect = null;
  103. if (_card != null && EvoRoot != null)
  104. {
  105. if (_card.appFusionCondition != null)
  106. {
  107. if (GManager.instance != null)
  108. {
  109. if (GManager.instance.turnStateMachine != null)
  110. {
  111. if (GManager.instance.turnStateMachine.gameContext != null)
  112. {
  113. if (GManager.instance.turnStateMachine.gameContext.ActiveCardList.Count >= 1)
  114. {
  115. selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
  116. if (selectCardEffect != null)
  117. {
  118. active = true;
  119. }
  120. }
  121. }
  122. }
  123. }
  124. }
  125. }
  126. if (active)
  127. {
  128. AppFusionCondition appFusionCondition = _card.appFusionCondition;
  129. bool CanSelectSourceCondition(CardSource link)
  130. {
  131. if(appFusionCondition != null)
  132. {
  133. if (appFusionCondition.linkedCondition != null)
  134. {
  135. if (link != null)
  136. {
  137. if (appFusionCondition.linkedCondition(targetPermanent, link))
  138. {
  139. return true;
  140. }
  141. }
  142. }
  143. }
  144. return false;
  145. }
  146. int maxCount = Math.Min(1, targetPermanent.LinkedCards.Count(CanSelectSourceCondition));
  147. if (maxCount >= 1)
  148. {
  149. selectCardEffect.SetUp(
  150. canTargetCondition: CanSelectSourceCondition,
  151. canTargetCondition_ByPreSelecetedList: null,
  152. canEndSelectCondition: null,
  153. canNoSelect: () => _canNoSelect,
  154. selectCardCoroutine: SelectCardCoroutine,
  155. afterSelectCardCoroutine: null,
  156. message: $"Select 1 card to add as source.",
  157. maxCount: maxCount,
  158. canEndNotMax: false,
  159. isShowOpponent: true,
  160. mode: SelectCardEffect.Mode.Custom,
  161. root: SelectCardEffect.Root.Custom,
  162. customRootCardList: targetPermanent.LinkedCards,
  163. canLookReverseCard: false,
  164. selectPlayer: _card.Owner,
  165. cardEffect: null);
  166. if (this._isLocal)
  167. {
  168. selectCardEffect.SetIsLocal();
  169. }
  170. yield return ContinuousController.instance.StartCoroutine(selectCardEffect.Activate());
  171. IEnumerator SelectCardCoroutine(CardSource source)
  172. {
  173. selectedLink = source;
  174. yield return null;
  175. }
  176. }
  177. //バースト進化しない
  178. if (selectedLink == null)
  179. {
  180. if (_noSelectCoroutine != null)
  181. {
  182. yield return ContinuousController.instance.StartCoroutine(_noSelectCoroutine());
  183. }
  184. }
  185. //バースト進化する
  186. else
  187. {
  188. if (_endSelectCoroutine_AppFusion != null)
  189. {
  190. yield return ContinuousController.instance.StartCoroutine(_endSelectCoroutine_SelectLink(selectedLink));
  191. }
  192. }
  193. }
  194. }
  195. public IEnumerator AddToSources()
  196. {
  197. LinkAdded = false;
  198. if (selectedLink != null)
  199. {
  200. yield return ContinuousController.instance.StartCoroutine(EvoRoot.PermanentOfThisCard().RemoveLinkedCard(selectedLink));
  201. yield return ContinuousController.instance.StartCoroutine(EvoRoot.PermanentOfThisCard().AddDigivolutionCardsTop(new List<CardSource> { selectedLink, EvoRoot }, null));
  202. //yield return ContinuousController.instance.StartCoroutine(EvoRoot.PermanentOfThisCard().AddDigivolutionCardsBottom(new List<CardSource> { selectedLink }, null, true));
  203. //yield return ContinuousController.instance.StartCoroutine(EvoRoot.PermanentOfThisCard().AddDigivolutionCardsBottom(new List<CardSource> { EvoRoot }, null, true));
  204. LinkAdded = true;
  205. }
  206. }
  207. }