FixErrataImages.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  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 Errata 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. IEnumerator GetJsonData()
  98. {
  99. string url = baseURL + "assets/cardlists/DigimonCards.json";
  100. UnityWebRequest jsonWebRequest = UnityWebRequest.Get(url);
  101. yield return jsonWebRequest.SendWebRequest();
  102. if (jsonWebRequest.result != UnityWebRequest.Result.Success)
  103. {
  104. Debug.Log(jsonWebRequest.error);
  105. }
  106. else
  107. {
  108. RootObject root = JsonUtility.FromJson<RootObject>("{\"cards\":" + jsonWebRequest.downloadHandler.text + "}");
  109. _cardData = root.cards;
  110. }
  111. yield return null;
  112. }
  113. void SetSpriteName(string ID, CardData data)
  114. {
  115. string fileName = $"{FixCharactersInClassName($"{ID}")}.asset";
  116. string folderName_SetID = $"{GetParseByHyphen(data.id)[0]}";
  117. string folderName_CardColor = $"{DataBase.CardColorNameDictionary[GetCardColors(data.color)[0]]}";
  118. folderName_CardColor = char.ToUpper(folderName_CardColor[0]) + folderName_CardColor.Substring(1);
  119. string folderName_CardKind = $"{DataBase.CardKindENNameDictionary[DictionaryUtility.GetCardKind(data.cardType.Replace("-", ""), DataBase.CardKindENNameDictionary)]}";
  120. string folderPath = $"Assets/CardBaseEntity/{folderName_SetID}/{folderName_CardColor}/{folderName_CardKind}";
  121. string filePath = $"{folderPath}/{fileName}".Trim().Replace("\t", "").Replace("\n", "").Replace("\r", "").Replace(" ", "");
  122. CEntity_Base card = GetAsset.Load<CEntity_Base>(filePath);
  123. if (card == null)
  124. {
  125. Debug.Log($"NO ASSET FOUND: {fileName}");
  126. return;
  127. }
  128. string errataName = GetImageURL(data.cardImage, data.cardNumber, data.AAs);
  129. if (!errataName.Equals(card.CardSpriteName))
  130. {
  131. debugText += $"{fileName}: {errataName}\n";
  132. matchedCount++;
  133. //card.CardSpriteName = errataName;
  134. //EditorUtility.SetDirty(card);
  135. }
  136. }
  137. string GetImageURL(string url, string ID, List<AlternateArt> AA)
  138. {
  139. string[] urlSplit = url.Split(".");
  140. string startURL = urlSplit[0].Substring(0, urlSplit[0].LastIndexOf("/"));
  141. if (!ID.Contains("Errata") && !ID.Contains("_") && AA.Count > 0)
  142. {
  143. AlternateArt errata = AA.Where(x => x.id.StartsWith(ID) && x.id.Contains("Errata")).FirstOrDefault();
  144. if(ID.Contains("BT16-077"))
  145. if (errata != null)
  146. ID = errata.id;
  147. }
  148. return $"{ID}";
  149. }
  150. //Parse ScriptableObject Name
  151. string FixCharactersInName(string str)
  152. {
  153. string name = str;
  154. name = name
  155. .Replace(" ", "_")
  156. .Replace(":", "")
  157. .Replace("?", "")
  158. .Replace("!", "")
  159. .Replace("<", "")
  160. .Replace(">", "");
  161. return name;
  162. }
  163. //Parse ScriptableObject Class Name
  164. public string FixCharactersInClassName(string str)
  165. {
  166. string name = str;
  167. name = FixCharactersInName(name);
  168. name = name
  169. .Replace("-", "_")
  170. .Replace(".", "")
  171. .Replace("'", "")
  172. .Replace("&", "And")
  173. .Replace("(", "")
  174. .Replace(")", "");
  175. return name;
  176. }
  177. public static string[] GetParseByHyphen(string CardImageName)
  178. {
  179. string[] parseByHyphen = new string[] { CardImageName };
  180. if (CardImageName.Contains('-'))
  181. {
  182. parseByHyphen = CardImageName.Split('-');
  183. }
  184. return parseByHyphen;
  185. }
  186. //Parse card colors to list
  187. List<CardColor> GetCardColors(string colors)
  188. {
  189. List<CardColor> cardColors = new List<CardColor>();
  190. foreach (string cardColorName in colors.Split("/"))
  191. {
  192. foreach (string cardColorNameValues in DataBase.CardColorNameDictionary.Values)
  193. {
  194. if (cardColorName.ToLower().Trim() == cardColorNameValues)
  195. {
  196. cardColors.Add(DictionaryUtility.GetCardColor(cardColorName.ToLower().Trim(), DataBase.CardColorNameDictionary));
  197. }
  198. }
  199. }
  200. return cardColors;
  201. }
  202. }
  203. }