FindMissingAAs.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. using DCGO.CardEntities;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Net;
  7. using System.Security.Policy;
  8. using Unity.EditorCoroutines.Editor;
  9. using UnityEditor;
  10. using UnityEditor.PackageManager;
  11. using UnityEngine;
  12. using UnityEngine.Networking;
  13. namespace DCGO.Tools
  14. {
  15. public class FindMissingAAs : MonoBehaviour
  16. {
  17. static FindMissingAAs instance;
  18. string baseURL = "https://raw.githubusercontent.com/TakaOtaku/Digimon-Card-App/main/src/assets/";
  19. public List<CardData> _cardData;
  20. string debugText = "";
  21. int matchedCount = 0;
  22. [MenuItem("Window/DCGO/Find Missing AAs")]
  23. static void ErrataImages()
  24. {
  25. instance = new FindMissingAAs();
  26. EditorCoroutineUtility.StartCoroutine(instance.FindAAs(), instance);
  27. }
  28. IEnumerator FindAAs()
  29. {
  30. yield return EditorCoroutineUtility.StartCoroutine(instance.GetJsonData(), instance);
  31. List<CardData> aaCards = _cardData.Filter(x => x.AAs.Count > 0);
  32. foreach (CardData card in aaCards)
  33. {
  34. foreach(AlternateArt AA in card.AAs)
  35. {
  36. string ID = AA.id.Replace("-Errata", "");
  37. if (FindFile(ID, card))
  38. {
  39. debugText += $"{ID}\n";
  40. matchedCount++;
  41. }
  42. }
  43. }
  44. Debug.Log(debugText);
  45. Debug.Log($"COMPLETED: {matchedCount}");
  46. }
  47. bool FindFile(string ID, CardData data)
  48. {
  49. string fileName = $"{FixCharactersInClassName($"{ID}")}.asset";
  50. string folderName_SetID = $"{GetParseByHyphen(data.id)[0]}";
  51. string folderName_CardColor = $"{DataBase.CardColorNameDictionary[GetCardColors(data.color)[0]]}";
  52. folderName_CardColor = char.ToUpper(folderName_CardColor[0]) + folderName_CardColor.Substring(1);
  53. string folderName_CardKind = $"{DataBase.CardKindENNameDictionary[DictionaryUtility.GetCardKind(data.cardType.Replace("-", ""), DataBase.CardKindENNameDictionary)]}";
  54. string folderPath = $"Assets/CardBaseEntity/{folderName_SetID}/{folderName_CardColor}/{folderName_CardKind}";
  55. if (Directory.Exists(folderPath))
  56. {
  57. string filePath = $"{folderPath}/{fileName}".Trim().Replace("\t", "").Replace("\n", "").Replace("\r", "").Replace(" ", "");
  58. CEntity_Base card = GetAsset.Load<CEntity_Base>(filePath);
  59. if (card == null)
  60. {
  61. return GetImage(ID);
  62. }
  63. }
  64. return false;
  65. }
  66. bool GetImage(string ID)
  67. {
  68. string imgURL = $"{baseURL}images/cards/{ID}.webp";
  69. Debug.Log(imgURL);
  70. try
  71. {
  72. WebClient wc = new WebClient();
  73. string HTMLSource = wc.DownloadString(imgURL);
  74. return true;
  75. }
  76. catch (Exception ex)
  77. {
  78. return false;
  79. }
  80. }
  81. IEnumerator GetJsonData()
  82. {
  83. string url = baseURL + "cardlists/DigimonCards.json";
  84. UnityWebRequest jsonWebRequest = UnityWebRequest.Get(url);
  85. yield return jsonWebRequest.SendWebRequest();
  86. if (jsonWebRequest.result != UnityWebRequest.Result.Success)
  87. {
  88. Debug.Log(jsonWebRequest.error);
  89. }
  90. else
  91. {
  92. RootObject root = JsonUtility.FromJson<RootObject>("{\"cards\":" + jsonWebRequest.downloadHandler.text + "}");
  93. _cardData = root.cards;
  94. }
  95. yield return null;
  96. }
  97. //Parse ScriptableObject Name
  98. string FixCharactersInName(string str)
  99. {
  100. string name = str;
  101. name = name
  102. .Replace(" ", "_")
  103. .Replace(":", "")
  104. .Replace("?", "")
  105. .Replace("!", "")
  106. .Replace("<", "")
  107. .Replace(">", "");
  108. return name;
  109. }
  110. //Parse ScriptableObject Class Name
  111. public string FixCharactersInClassName(string str)
  112. {
  113. string name = str;
  114. name = FixCharactersInName(name);
  115. name = name
  116. .Replace("-", "_")
  117. .Replace(".", "")
  118. .Replace("'", "")
  119. .Replace("&", "And")
  120. .Replace("(", "")
  121. .Replace(")", "");
  122. return name;
  123. }
  124. public static string[] GetParseByHyphen(string CardImageName)
  125. {
  126. string[] parseByHyphen = new string[] { CardImageName };
  127. if (CardImageName.Contains('-'))
  128. {
  129. parseByHyphen = CardImageName.Split('-');
  130. }
  131. return parseByHyphen;
  132. }
  133. //Parse card colors to list
  134. List<CardColor> GetCardColors(string colors)
  135. {
  136. List<CardColor> cardColors = new List<CardColor>();
  137. foreach (string cardColorName in colors.Split("/"))
  138. {
  139. foreach (string cardColorNameValues in DataBase.CardColorNameDictionary.Values)
  140. {
  141. if (cardColorName.ToLower().Trim() == cardColorNameValues)
  142. {
  143. cardColors.Add(DictionaryUtility.GetCardColor(cardColorName.ToLower().Trim(), DataBase.CardColorNameDictionary));
  144. }
  145. }
  146. }
  147. return cardColors;
  148. }
  149. }
  150. }