DeckBuildingRule.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using UnityEngine;
  4. public class DeckBuildingRule : MonoBehaviour
  5. {
  6. public static bool IsValidDeck(DeckData deckData)
  7. {
  8. if (ContinuousController.instance != null)
  9. {
  10. foreach (CEntity_Base cEntity_Base in deckData.DeckCards())
  11. {
  12. if (!cEntity_Base.IsStandardValid)
  13. {
  14. return false;
  15. }
  16. }
  17. }
  18. return true;
  19. }
  20. #region インポートしたデッキデータを修正
  21. public static DeckData ModifiedDeckData(DeckData deckData)
  22. {
  23. List<CEntity_Base> deckCards = new List<CEntity_Base>();
  24. List<CEntity_Base> digitamaDeckCards = new List<CEntity_Base>();
  25. foreach (CEntity_Base cEntity_Base in deckData.AllDeckCards())
  26. {
  27. if (cEntity_Base.cardKind != CardKind.DigiEgg)
  28. {
  29. deckCards.Add(cEntity_Base);
  30. }
  31. else
  32. {
  33. digitamaDeckCards.Add(cEntity_Base);
  34. }
  35. }
  36. List<CEntity_Base> modifiedDeckCards = modifiedList(deckCards);
  37. List<CEntity_Base> modifiedDigitamaDeckCards = modifiedList(digitamaDeckCards);
  38. List<CEntity_Base> modifiedList(List<CEntity_Base> cEntity_Bases)
  39. {
  40. //カードリストを重複なしのリストにする
  41. List<CEntity_Base> DistinctDeckCards = cEntity_Bases.Distinct().ToList();
  42. List<CEntity_Base> DistinctDeckCards1 = new List<CEntity_Base>();
  43. foreach (CEntity_Base cEntity_Base in DistinctDeckCards)
  44. {
  45. if (DistinctDeckCards1.Count((cEntity_Base1) => cEntity_Base.CardID == cEntity_Base1.CardID) == 0)
  46. {
  47. DistinctDeckCards1.Add(cEntity_Base);
  48. }
  49. }
  50. List<CEntity_Base> deckCards = new List<CEntity_Base>();
  51. foreach (CEntity_Base cEntity_Base in cEntity_Bases)
  52. {
  53. deckCards.Add(cEntity_Base);
  54. }
  55. //規定枚数以上のカードを抜く
  56. foreach (CEntity_Base cEntity_Base in DistinctDeckCards1)
  57. {
  58. foreach (CardLimitCount cardLimitCount in ContinuousController.instance.BanList.CardLimitCounts)
  59. {
  60. if (cEntity_Base.CardID == cardLimitCount.CardID)
  61. {
  62. while (cEntity_Base.SameCardIDCount(deckCards) > cardLimitCount.LimitCount)
  63. {
  64. CEntity_Base removeCard = deckCards.Find(cEntity_Base1 => cEntity_Base1.CardID == cEntity_Base.CardID);
  65. if (removeCard != null)
  66. {
  67. deckCards.Remove(removeCard);
  68. }
  69. }
  70. }
  71. }
  72. foreach (BannedPair bannedPair in ContinuousController.instance.BanList.BannedPairs)
  73. {
  74. if (cEntity_Base.CardID == bannedPair.CardID_A)
  75. {
  76. while (deckCards.Some(cEntity_Base1 => bannedPair.CardIDs_B.Contains(cEntity_Base1.CardID)))
  77. {
  78. CEntity_Base removeCard = deckCards.Find(cEntity_Base1 => bannedPair.CardIDs_B.Contains(cEntity_Base1.CardID));
  79. if (removeCard != null)
  80. {
  81. deckCards.Remove(removeCard);
  82. }
  83. }
  84. }
  85. }
  86. }
  87. return deckCards;
  88. }
  89. DeckData deckData1 = new DeckData(DeckData.GetDeckCode(deckData.DeckName, modifiedDeckCards, modifiedDigitamaDeckCards, deckData.KeyCard));
  90. if (!deckData1.AllDeckCards().Contains(deckData1.KeyCard))
  91. {
  92. deckData1.KeyCardId = -1;
  93. }
  94. return deckData1;
  95. }
  96. #endregion
  97. public static int MaxCount_BanList(CEntity_Base cEntity_Base)
  98. {
  99. int count = cEntity_Base.MaxCountInDeck;
  100. foreach (CardLimitCount cardLimitCount in ContinuousController.instance.BanList.CardLimitCounts)
  101. {
  102. if (cEntity_Base.CardID == cardLimitCount.CardID)
  103. {
  104. count = cardLimitCount.LimitCount;
  105. break;
  106. }
  107. }
  108. return count;
  109. }
  110. public static bool CanAddCard(CEntity_Base cEntity_Base, DeckData deckData)
  111. {
  112. if (cEntity_Base.cardKind == CardKind.DigiEgg)
  113. {
  114. if (cEntity_Base.SameCardIDCount(deckData.DigitamaDeckCards()) >= cEntity_Base.MaxCountInDeck)
  115. {
  116. return false;
  117. }
  118. if (deckData.DigitamaDeckCards().Count >= 5)
  119. {
  120. return false;
  121. }
  122. }
  123. else
  124. {
  125. if (cEntity_Base.SameCardIDCount(deckData.DeckCards()) >= cEntity_Base.MaxCountInDeck)
  126. {
  127. return false;
  128. }
  129. }
  130. foreach (CardLimitCount cardLimitCount in ContinuousController.instance.BanList.CardLimitCounts)
  131. {
  132. if (cEntity_Base.CardID == cardLimitCount.CardID)
  133. {
  134. if (cEntity_Base.SameCardIDCount(deckData.AllDeckCards()) >= cardLimitCount.LimitCount)
  135. {
  136. return false;
  137. }
  138. }
  139. }
  140. foreach (BannedPair bannedPair in ContinuousController.instance.BanList.BannedPairs)
  141. {
  142. if (cEntity_Base.CardID == bannedPair.CardID_A)
  143. {
  144. if (deckData.AllDeckCards().Some(cEntity_Base1 => bannedPair.CardIDs_B.Contains(cEntity_Base1.CardID)))
  145. {
  146. return false;
  147. }
  148. }
  149. if (bannedPair.CardIDs_B.Contains(cEntity_Base.CardID))
  150. {
  151. if (deckData.AllDeckCards().Some(cEntity_Base1 => cEntity_Base1.CardID == bannedPair.CardID_A))
  152. {
  153. return false;
  154. }
  155. }
  156. }
  157. return true;
  158. }
  159. }
  160. public class CardRestriction
  161. {
  162. public CardRestriction(List<CardLimitCount> cardLimitCounts, List<BannedPair> bannedPairs)
  163. {
  164. CardLimitCounts = cardLimitCounts.Clone();
  165. BannedPairs = bannedPairs.Clone();
  166. }
  167. public List<CardLimitCount> CardLimitCounts { get; private set; } = new List<CardLimitCount>();
  168. public List<BannedPair> BannedPairs { get; private set; } = new List<BannedPair>();
  169. }
  170. public class CardLimitCount
  171. {
  172. public CardLimitCount(string cardID, int limitCount)
  173. {
  174. CardID = cardID;
  175. LimitCount = limitCount;
  176. }
  177. public string CardID { get; private set; } = "";
  178. public int LimitCount { get; private set; } = 4;
  179. }
  180. public class BannedPair
  181. {
  182. public BannedPair(string cardID_A, List<string> cardIDs_B)
  183. {
  184. CardID_A = cardID_A;
  185. CardIDs_B = cardIDs_B.Clone();
  186. }
  187. public string CardID_A { get; private set; } = "";
  188. public List<string> CardIDs_B { get; private set; } = new List<string>();
  189. }