FindMissingAAs.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  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-Cards/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)[0]]}";
  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. Debug.LogWarning(ex.Message);
  79. return false;
  80. }
  81. }
  82. IEnumerator GetJsonData()
  83. {
  84. string url = baseURL + "cardlists/DigimonCards.json";
  85. UnityWebRequest jsonWebRequest = UnityWebRequest.Get(url);
  86. yield return jsonWebRequest.SendWebRequest();
  87. if (jsonWebRequest.result != UnityWebRequest.Result.Success)
  88. {
  89. Debug.Log(jsonWebRequest.error);
  90. }
  91. else
  92. {
  93. RootObject root = JsonUtility.FromJson<RootObject>("{\"cards\":" + jsonWebRequest.downloadHandler.text + "}");
  94. _cardData = root.cards;
  95. }
  96. yield return null;
  97. }
  98. //Parse ScriptableObject Name
  99. string FixCharactersInName(string str)
  100. {
  101. string name = str;
  102. name = name
  103. .Replace(" ", "_")
  104. .Replace(":", "")
  105. .Replace("?", "")
  106. .Replace("!", "")
  107. .Replace("<", "")
  108. .Replace(">", "");
  109. return name;
  110. }
  111. //Parse ScriptableObject Class Name
  112. public string FixCharactersInClassName(string str)
  113. {
  114. string name = str;
  115. name = FixCharactersInName(name);
  116. name = name
  117. .Replace("-", "_")
  118. .Replace(".", "")
  119. .Replace("'", "")
  120. .Replace("&", "And")
  121. .Replace("(", "")
  122. .Replace(")", "");
  123. return name;
  124. }
  125. public static string[] GetParseByHyphen(string CardImageName)
  126. {
  127. string[] parseByHyphen = new string[] { CardImageName };
  128. if (CardImageName.Contains('-'))
  129. {
  130. parseByHyphen = CardImageName.Split('-');
  131. }
  132. return parseByHyphen;
  133. }
  134. //Parse card colors to list
  135. List<CardColor> GetCardColors(string colors)
  136. {
  137. List<CardColor> cardColors = new List<CardColor>();
  138. foreach (string cardColorName in colors.Split("/"))
  139. {
  140. foreach (string cardColorNameValues in DataBase.CardColorNameDictionary.Values)
  141. {
  142. if (cardColorName.ToLower().Trim() == cardColorNameValues)
  143. {
  144. cardColors.Add(DictionaryUtility.GetCardColor(cardColorName.ToLower().Trim(), DataBase.CardColorNameDictionary));
  145. }
  146. }
  147. }
  148. return cardColors;
  149. }
  150. }
  151. }