DeckInfoPanel.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5. using UnityEngine.UI;
  6. using System.Linq;
  7. using UnityEngine.Events;
  8. using System.IO;
  9. using System.Text;
  10. using System.Runtime.Serialization.Formatters.Binary;
  11. using System.Threading.Tasks;
  12. public class DeckInfoPanel : MonoBehaviour
  13. {
  14. [Header("デッキ情報パネルオブジェクト")]
  15. public GameObject DeckInfoPanelObject;
  16. [Header("キーカード画像")]
  17. public Image KeyCardImage;
  18. [Header("デッキ名InputField")]
  19. public InputField DeckName;
  20. [Header("デッキ名Text")]
  21. public Text DeckNameText;
  22. [Header("カード色カウント")]
  23. public List<CardColorCount> cardColorCountList = new List<CardColorCount>();
  24. [Header("デッキコード取得ボタン")]
  25. public Button GetDeckCodeButton;
  26. [Header("デッキ枚数テキスト")]
  27. public Text DeckCountText;
  28. public Button TrialDrawButton;
  29. public bool isFromSelectDeck;
  30. public DeckData ShowingDeckData = null;
  31. public async Task SetUpDeckInfoPanel(DeckData deckData)
  32. {
  33. DeckInfoPanelObject.SetActive(deckData != null);
  34. if (deckData != null)
  35. {
  36. if (GetComponent<Animator>() != null)
  37. {
  38. GetComponent<Animator>().SetInteger("Open", 1);
  39. GetComponent<Animator>().SetInteger("Close", 0);
  40. }
  41. ShowingDeckData = deckData;
  42. //MC card image
  43. KeyCardImage.gameObject.SetActive(deckData.KeyCard != null);
  44. if (deckData.KeyCard != null)
  45. {
  46. KeyCardImage.sprite = await deckData.KeyCard.GetCardSprite();
  47. }
  48. else
  49. {
  50. KeyCardImage.sprite = null;
  51. }
  52. //deck name
  53. if (DeckName != null)
  54. {
  55. DeckName.text = deckData.DeckName;
  56. DeckName.onEndEdit.RemoveAllListeners();
  57. DeckName.onEndEdit.AddListener(SetDeckName);
  58. }
  59. if (DeckNameText != null)
  60. {
  61. DeckNameText.text = deckData.DeckName;
  62. DeckNameText.transform.parent.gameObject.SetActive(deckData.GetThisDeckCode() != DeckData.EmptyDeckData().GetThisDeckCode());
  63. }
  64. //Number of cards of each color
  65. if (cardColorCountList != null)
  66. {
  67. if (cardColorCountList.Count > 0)
  68. {
  69. foreach (CardColorCount cardColorCount in cardColorCountList)
  70. {
  71. if (cardColorCount != null)
  72. {
  73. cardColorCount.SetUpCardColorCount(deckData);
  74. ContinuousController.instance.StartCoroutine(cardColorCount.SetIconScale());
  75. }
  76. }
  77. }
  78. }
  79. //Number of cards in the deck
  80. if (DeckCountText != null)
  81. {
  82. DeckCountText.text = $"{deckData.DeckCards().Count}+{deckData.DigitamaDeckCards().Count}/50+5";
  83. if (deckData.IsValidDeckData())
  84. {
  85. DeckCountText.color = new Color32(69, 255, 69, 255);
  86. }
  87. else
  88. {
  89. DeckCountText.color = new Color32(255, 64, 64, 255);
  90. }
  91. }
  92. //Get Deck Code button
  93. if (GetDeckCodeButton != null)
  94. {
  95. GetDeckCodeButton.gameObject.SetActive(deckData.IsValidDeckData());
  96. }
  97. if (TrialDrawButton != null)
  98. {
  99. TrialDrawButton.gameObject.SetActive(ShowingDeckData.DeckCards().Count >= 1);
  100. }
  101. }
  102. }
  103. public void OnClickTrial5DrawButton()
  104. {
  105. Opening.instance.deck.trialDraw.Off();
  106. ContinuousController.instance.StartCoroutine(Opening.instance.deck.trialDraw.SetUpTrialDraw(ShowingDeckData.DeckCards()));
  107. }
  108. public void OnClickEditButton()
  109. {
  110. if (ShowingDeckData != null)
  111. {
  112. Opening.instance.deck.editDeck.SetUpCreateDeck(ShowingDeckData, isFromSelectDeck);
  113. }
  114. }
  115. public void OnClickShowDeckButton()
  116. {
  117. if (ShowingDeckData != null)
  118. {
  119. Opening.instance.deck.deckListPanel.Off();
  120. ContinuousController.instance.StartCoroutine(Opening.instance.deck.deckListPanel.SetUpDeckListPanel(ShowingDeckData, null, ""));
  121. }
  122. }
  123. public void OnClickDeleteDeckButton()
  124. {
  125. if (ShowingDeckData != null)
  126. {
  127. DeckData deckData = ShowingDeckData;
  128. List<UnityAction> Commands = new List<UnityAction>()
  129. {
  130. () =>
  131. {
  132. if(isFromSelectDeck)
  133. {
  134. ContinuousController.instance.DeckDatas.Remove(deckData);
  135. ContinuousController.instance.StartCoroutine(Opening.instance.deck.selectDeck.SetDeckList(false));
  136. Opening.instance.deck.selectDeck.ResetDeckInfoPanel();
  137. ContinuousController.instance.SaveDeckDatas();
  138. ContinuousController.instance.DeleteDeck(deckData);
  139. }
  140. },
  141. null
  142. };
  143. List<string> CommandTexts = new List<string>()
  144. {
  145. LocalizeUtility.GetLocalizedString(
  146. EngMessage: "Yes",
  147. JpnMessage: "はい"
  148. ),
  149. LocalizeUtility.GetLocalizedString(
  150. EngMessage: "No",
  151. JpnMessage: "いいえ"
  152. ),
  153. };
  154. Opening.instance.SetUpActiveYesNoObject(
  155. Commands,
  156. CommandTexts,
  157. LocalizeUtility.GetLocalizedString(
  158. EngMessage: "Delete the deck?",
  159. JpnMessage: "デッキを削除しますか?"
  160. ),
  161. true);
  162. }
  163. }
  164. public void OnClickGetDeckCodeButton()
  165. {
  166. if (ShowingDeckData != null)
  167. {
  168. if (ShowingDeckData != null)
  169. {
  170. GUIUtility.systemCopyBuffer = DeckCodeUtility.GetDeckBuilderDeckCode(ShowingDeckData.AllDeckCards());
  171. List<UnityAction> Commands = new List<UnityAction>()
  172. {
  173. null
  174. };
  175. List<string> CommandTexts = new List<string>()
  176. {
  177. "OK"
  178. };
  179. Opening.instance.SetUpActiveYesNoObject(
  180. Commands,
  181. CommandTexts,
  182. LocalizeUtility.GetLocalizedString(
  183. EngMessage: "Copied the deck code to the clipboard!\n(Also, you can use it for Digimon Card dev.)",
  184. JpnMessage: "デッキコードをクリップボードにコピーしました!\n(Digimon Card dev.でも使えます)"
  185. ),
  186. true);
  187. }
  188. }
  189. }
  190. public void SetDeckName(string text)
  191. {
  192. if (string.IsNullOrEmpty(text))
  193. {
  194. text = ShowingDeckData.DeckName;
  195. DeckName.text = ShowingDeckData.DeckName;
  196. }
  197. if (ShowingDeckData.DeckName == text)
  198. {
  199. return;
  200. }
  201. text = DeckData.ValidateDeckName(text);
  202. while (text.Length > DeckName.characterLimit)
  203. {
  204. text = text.Substring(0, text.Length - 1);
  205. }
  206. ShowingDeckData.DeckName = text;
  207. ContinuousController.instance.SaveDeckDatas();
  208. ContinuousController.instance.SaveDeckData(ShowingDeckData);
  209. if (isFromSelectDeck)
  210. {
  211. if (Opening.instance.deck.selectDeck != null)
  212. {
  213. if (Opening.instance.deck.editDeck != null)
  214. {
  215. if (Opening.instance.deck.editDeck.CreateDeckObject.activeSelf)
  216. {
  217. return;
  218. }
  219. }
  220. ContinuousController.instance.StartCoroutine(Opening.instance.deck.selectDeck.SetDeckList(false));
  221. for (int i = 0; i < Opening.instance.deck.selectDeck.deckInfoPrefabParentScroll.content.childCount; i++)
  222. {
  223. if (Opening.instance.deck.selectDeck.deckInfoPrefabParentScroll.content.GetChild(i).GetComponent<DeckInfoPrefab>() != null)
  224. {
  225. if (Opening.instance.deck.selectDeck.deckInfoPrefabParentScroll.content.GetChild(i).GetComponent<DeckInfoPrefab>().thisDeckData == ShowingDeckData)
  226. {
  227. Opening.instance.deck.selectDeck.deckInfoPrefabParentScroll.content.GetChild(i).GetComponent<DeckInfoPrefab>().OnClick_DeckInfoPrefab(true);
  228. }
  229. }
  230. }
  231. }
  232. }
  233. else
  234. {
  235. if (Opening.instance.battle.selectBattleDeck != null)
  236. {
  237. if (Opening.instance.deck.editDeck != null)
  238. {
  239. if (Opening.instance.deck.editDeck.CreateDeckObject.activeSelf)
  240. {
  241. return;
  242. }
  243. }
  244. ContinuousController.instance.StartCoroutine(Opening.instance.battle.selectBattleDeck.SetDeckList(false));
  245. for (int i = 0; i < Opening.instance.battle.selectBattleDeck.deckInfoPrefabParentScroll.content.childCount; i++)
  246. {
  247. if (Opening.instance.battle.selectBattleDeck.deckInfoPrefabParentScroll.content.GetChild(i).GetComponent<DeckInfoPrefab>() != null)
  248. {
  249. if (Opening.instance.battle.selectBattleDeck.deckInfoPrefabParentScroll.content.GetChild(i).GetComponent<DeckInfoPrefab>().thisDeckData == ShowingDeckData)
  250. {
  251. Opening.instance.battle.selectBattleDeck.deckInfoPrefabParentScroll.content.GetChild(i).GetComponent<DeckInfoPrefab>().OnClick_DeckInfoPrefab(true);
  252. }
  253. }
  254. }
  255. }
  256. }
  257. }
  258. public UnityAction OnClickSelectDeckAction;
  259. public void OnClickSelectDeck()
  260. {
  261. Opening.instance.PlayDecisionSE();
  262. OnClickSelectDeckAction?.Invoke();
  263. }
  264. }
  265. [Serializable]
  266. public class CardColorCount
  267. {
  268. [Header("Corresponding color")]
  269. public CardColor cardColor;
  270. [Header("Count Text")]
  271. public Text CountText;
  272. public Image icon;
  273. public void SetUpCardColorCount(DeckData deckData)
  274. {
  275. if (CountText != null)
  276. {
  277. CountText.text = $"{deckData.DeckCards().Count((card) => card.cardColors[0] == cardColor)}";
  278. }
  279. }
  280. public IEnumerator SetIconScale()
  281. {
  282. if (icon != null)
  283. {
  284. icon.transform.localScale = new Vector3(1.02f, 1.02f, 1);
  285. yield return null;
  286. icon.transform.localScale = new Vector3(1, 1, 1);
  287. }
  288. }
  289. }