FixErrataImages.cs 5.8 KB

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