FixErrataImages.cs 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. using DCGO.CardEntities;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using Unity.EditorCoroutines.Editor;
  6. using UnityEditor;
  7. using UnityEngine;
  8. using UnityEngine.Networking;
  9. namespace DCGO.Tools.Repair
  10. {
  11. public class FixErrataImages : MonoBehaviour
  12. {
  13. static FixErrataImages instance;
  14. string baseURL = "https://raw.githubusercontent.com/TakaOtaku/Digimon-Cards/main/src/";
  15. public List<CardData> _cardData;
  16. string debugText = "";
  17. int matchedCount = 0;
  18. #region Fix Errata Images
  19. [MenuItem("Window/DCGO/Repair/Fix Errata Images")]
  20. static void ErrataImages()
  21. {
  22. instance = new FixErrataImages();
  23. EditorCoroutineUtility.StartCoroutine(instance.FixImages(), instance);
  24. }
  25. IEnumerator FixImages()
  26. {
  27. yield return EditorCoroutineUtility.StartCoroutine(instance.GetJsonData(), instance);
  28. List<CEntity_Base> Entities = GetAsset.LoadAll<CEntity_Base>("Assets/CardBaseEntity/");
  29. foreach (CEntity_Base card in Entities)
  30. {
  31. CardData data = _cardData.Where(x => x.id == card.CardID).First();
  32. if (card.CardSpriteName.Contains("-Errata"))
  33. {
  34. Debug.Log($"Already is an Errata: {card.CardID}");
  35. continue;
  36. }
  37. string errataName = FindMatchingErrata(card.CardSpriteName, data);
  38. if (card.CardSpriteName != errataName)
  39. {
  40. card.CardSpriteName = errataName;
  41. EditorUtility.SetDirty(card);
  42. }
  43. }
  44. Debug.Log(debugText);
  45. Debug.Log($"COMPLETED: {matchedCount}");
  46. }
  47. string FindMatchingErrata(string imageName, CardData data)
  48. {
  49. string name = imageName;
  50. foreach (AlternateArt AA in data.AAs)
  51. {
  52. if (AA.id.Replace("-Errata", "") != imageName)
  53. continue;
  54. name = AA.id;
  55. }
  56. if (name != imageName)
  57. {
  58. debugText += $"{imageName}\n";
  59. matchedCount++;
  60. }
  61. return name;
  62. }
  63. #endregion
  64. #region Fix Sample Images
  65. [MenuItem("Window/DCGO/Repair/Fix Sample Images")]
  66. static void SampleImages()
  67. {
  68. instance = new FixErrataImages();
  69. instance.FixSampleImages();
  70. }
  71. void FixSampleImages()
  72. {
  73. string path = "Assets/CardBaseEntity/";
  74. if (Selection.assetGUIDs.Length != 0)
  75. path = AssetDatabase.GUIDToAssetPath(Selection.assetGUIDs[0]);
  76. Debug.Log($"ASSET PATH: {path}");
  77. List<CEntity_Base> Entities = GetAsset.LoadAll<CEntity_Base>(path);
  78. foreach (CEntity_Base card in Entities)
  79. {
  80. string errataName = FindMatchingSample(card.CardSpriteName);
  81. if (card.CardSpriteName != errataName)
  82. {
  83. card.CardSpriteName = errataName;
  84. EditorUtility.SetDirty(card);
  85. }
  86. }
  87. Debug.Log($"COMPLETED");
  88. }
  89. string FindMatchingSample(string imageName)
  90. {
  91. string name = imageName;
  92. if (!name.Contains("_P"))
  93. name += "-Sample";
  94. return name;
  95. }
  96. #endregion
  97. #region Remove Sample Images
  98. [MenuItem("Window/DCGO/Repair/Remove Sample Images")]
  99. static void RemoveSample()
  100. {
  101. instance = new FixErrataImages();
  102. instance.RemoveSampleImages();
  103. }
  104. void RemoveSampleImages()
  105. {
  106. string path = "Assets/CardBaseEntity/";
  107. if (Selection.assetGUIDs.Length != 0)
  108. path = AssetDatabase.GUIDToAssetPath(Selection.assetGUIDs[0]);
  109. Debug.Log($"ASSET PATH: {path}");
  110. List<CEntity_Base> Entities = GetAsset.LoadAll<CEntity_Base>(path);
  111. foreach (CEntity_Base card in Entities)
  112. {
  113. string errataName = RemoveMatchingSample(card.CardSpriteName);
  114. if (card.CardSpriteName != errataName)
  115. {
  116. card.CardSpriteName = errataName;
  117. EditorUtility.SetDirty(card);
  118. }
  119. }
  120. Debug.Log($"COMPLETED");
  121. }
  122. string RemoveMatchingSample(string imageName)
  123. {
  124. string name = imageName;
  125. if (name.Contains("-Sample"))
  126. name = name.Remove(name.IndexOf("-Sample"));
  127. return name;
  128. }
  129. #endregion
  130. IEnumerator GetJsonData()
  131. {
  132. string url = baseURL + "assets/cardlists/DigimonCards.json";
  133. UnityWebRequest jsonWebRequest = UnityWebRequest.Get(url);
  134. yield return jsonWebRequest.SendWebRequest();
  135. if (jsonWebRequest.result != UnityWebRequest.Result.Success)
  136. {
  137. Debug.Log(jsonWebRequest.error);
  138. }
  139. else
  140. {
  141. RootObject root = JsonUtility.FromJson<RootObject>("{\"cards\":" + jsonWebRequest.downloadHandler.text + "}");
  142. _cardData = root.cards;
  143. }
  144. yield return null;
  145. }
  146. void SetSpriteName(string ID, CardData data)
  147. {
  148. string fileName = $"{FixCharactersInClassName($"{ID}")}.asset";
  149. string folderName_SetID = $"{GetParseByHyphen(data.id)[0]}";
  150. string folderName_CardColor = $"{DataBase.CardColorNameDictionary[GetCardColors(data.color)[0]]}";
  151. folderName_CardColor = char.ToUpper(folderName_CardColor[0]) + folderName_CardColor.Substring(1);
  152. string folderName_CardKind = $"{DataBase.CardKindENNameDictionary[DictionaryUtility.GetCardKind(data.cardType.Replace("-", ""), DataBase.CardKindENNameDictionary)[0]]}";
  153. string folderPath = $"Assets/CardBaseEntity/{folderName_SetID}/{folderName_CardColor}/{folderName_CardKind}";
  154. string filePath = $"{folderPath}/{fileName}".Trim().Replace("\t", "").Replace("\n", "").Replace("\r", "").Replace(" ", "");
  155. CEntity_Base card = GetAsset.Load<CEntity_Base>(filePath);
  156. if (card == null)
  157. {
  158. Debug.Log($"NO ASSET FOUND: {fileName}");
  159. return;
  160. }
  161. string errataName = GetImageURL(data.cardImage, data.cardNumber, data.AAs);
  162. if (!errataName.Equals(card.CardSpriteName))
  163. {
  164. debugText += $"{fileName}: {errataName}\n";
  165. matchedCount++;
  166. //card.CardSpriteName = errataName;
  167. //EditorUtility.SetDirty(card);
  168. }
  169. }
  170. string GetImageURL(string url, string ID, List<AlternateArt> AA)
  171. {
  172. string[] urlSplit = url.Split(".");
  173. string startURL = urlSplit[0].Substring(0, urlSplit[0].LastIndexOf("/"));
  174. if (!ID.Contains("Errata") && !ID.Contains("_") && AA.Count > 0)
  175. {
  176. AlternateArt errata = AA.Where(x => x.id.StartsWith(ID) && x.id.Contains("Errata")).FirstOrDefault();
  177. if(ID.Contains("BT16-077"))
  178. if (errata != null)
  179. ID = errata.id;
  180. }
  181. return $"{ID}";
  182. }
  183. //Parse ScriptableObject Name
  184. string FixCharactersInName(string str)
  185. {
  186. string name = str;
  187. name = name
  188. .Replace(" ", "_")
  189. .Replace(":", "")
  190. .Replace("?", "")
  191. .Replace("!", "")
  192. .Replace("<", "")
  193. .Replace(">", "");
  194. return name;
  195. }
  196. //Parse ScriptableObject Class Name
  197. public string FixCharactersInClassName(string str)
  198. {
  199. string name = str;
  200. name = FixCharactersInName(name);
  201. name = name
  202. .Replace("-", "_")
  203. .Replace(".", "")
  204. .Replace("'", "")
  205. .Replace("&", "And")
  206. .Replace("(", "")
  207. .Replace(")", "");
  208. return name;
  209. }
  210. public static string[] GetParseByHyphen(string CardImageName)
  211. {
  212. string[] parseByHyphen = new string[] { CardImageName };
  213. if (CardImageName.Contains('-'))
  214. {
  215. parseByHyphen = CardImageName.Split('-');
  216. }
  217. return parseByHyphen;
  218. }
  219. //Parse card colors to list
  220. List<CardColor> GetCardColors(string colors)
  221. {
  222. List<CardColor> cardColors = new List<CardColor>();
  223. foreach (string cardColorName in colors.Split("/"))
  224. {
  225. foreach (string cardColorNameValues in DataBase.CardColorNameDictionary.Values)
  226. {
  227. if (cardColorName.ToLower().Trim() == cardColorNameValues)
  228. {
  229. cardColors.Add(DictionaryUtility.GetCardColor(cardColorName.ToLower().Trim(), DataBase.CardColorNameDictionary));
  230. }
  231. }
  232. }
  233. return cardColors;
  234. }
  235. }
  236. }