UGUICacheInfo.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. #if UNITY_EDITOR
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using UnityEditor;
  5. using UnityEngine.U2D;
  6. namespace UnityEngine.UI.PackgTool
  7. {
  8. public static class UGUICacheInfo
  9. {
  10. public static List<SpriteAtlas> atlasList
  11. {
  12. get
  13. {
  14. int cunt = GetAtlasFileCount();
  15. if (_atlasList == null || cunt != atlasCount)
  16. {
  17. atlasCount = cunt;
  18. SetAtlasList();
  19. }
  20. return _atlasList;
  21. }
  22. }
  23. public static UGUIPackDB uguiPackDB
  24. {
  25. get
  26. {
  27. if (_uguiPackDB == null)
  28. {
  29. SetUGUIPackDB();
  30. }
  31. return _uguiPackDB;
  32. }
  33. }
  34. private static int atlasCount;
  35. private static List<SpriteAtlas> _atlasList;
  36. private static UGUIPackDB _uguiPackDB;
  37. private static Dictionary<string, List<SpriteAtlas>> imagePacks = new Dictionary<string, List<SpriteAtlas>>();
  38. public static List<TextrueJson> AllTextrueJsons
  39. {
  40. get
  41. {
  42. if (_allTextrueJsons == null)
  43. {
  44. _allTextrueJsons = new List<TextrueJson>();
  45. }
  46. return _allTextrueJsons;
  47. }
  48. }
  49. public static List<TextrueJson> _allTextrueJsons;
  50. public static List<SpriteAtlas> GetAllSpriteAtlas(string name)
  51. {
  52. if (imagePacks.ContainsKey(name))
  53. {
  54. return imagePacks[name];
  55. }
  56. List<SpriteAtlas> spriteAtlasList = new List<SpriteAtlas>();
  57. for (int i = 0; i < atlasList.Count; i++)
  58. {
  59. Sprite atlasSprite = atlasList[i].GetSprite(name);
  60. if (atlasSprite != null)
  61. {
  62. spriteAtlasList.Add(atlasList[i]);
  63. }
  64. }
  65. imagePacks.Add(name,spriteAtlasList);
  66. return spriteAtlasList;
  67. }
  68. public static void Clare()
  69. {
  70. _uguiPackDB = null;
  71. _atlasList = null;
  72. }
  73. public static TextrueJson GetTongYong(string textrueName)
  74. {
  75. for (int i = 0; i < AllTextrueJsons.Count; i++)
  76. {
  77. TextrueJson textrueJson= AllTextrueJsons[i];
  78. if (textrueJson.isTyPack)
  79. {
  80. for (int j = 0; j < textrueJson.newTextureJson.Count; j++)
  81. {
  82. if (textrueJson.newTextureJson[j].textrueName.Equals(textrueName))
  83. {
  84. return textrueJson;
  85. }
  86. }
  87. }
  88. }
  89. return null;
  90. }
  91. private static int GetAtlasFileCount()
  92. {
  93. string[] allPath = System.IO.Directory.GetFiles(Application.dataPath + "/Res/UIAtlas/", "*.spriteatlasv2");
  94. return allPath.Length;
  95. }
  96. private static void SetAtlasList()
  97. {
  98. _atlasList = new List<SpriteAtlas>();
  99. string[] allPath = System.IO.Directory.GetFiles(Application.dataPath + "/Res/UIAtlas/", "*.spriteatlasv2");
  100. for (int i = 0; i < allPath.Length; i++)
  101. {
  102. if (allPath[i].Contains(".meta"))
  103. {
  104. continue;
  105. }
  106. string p = allPath[i].Replace(Application.dataPath, "Assets");
  107. SpriteAtlas spriteAtlas = AssetDatabase.LoadAssetAtPath<SpriteAtlas>(p);
  108. if (spriteAtlas != null)
  109. {
  110. _atlasList.Add(spriteAtlas);
  111. }
  112. }
  113. }
  114. public static PackInfo GetPackDB(string packName)
  115. {
  116. for (int i = 0; i < uguiPackDB.allPackgInfos.Count; i++)
  117. {
  118. if (uguiPackDB.allPackgInfos[i].packName.Equals(packName))
  119. {
  120. return uguiPackDB.allPackgInfos[i];
  121. }
  122. }
  123. return null;
  124. }
  125. public static PackInfo AddNewPackInfo(string jsonPath, TextrueJson textrueJson)
  126. {
  127. PackInfo packInfo = new PackInfo();
  128. packInfo.packgJsonPath = jsonPath;
  129. packInfo.textrueJson = textrueJson;
  130. packInfo.packName = textrueJson.packName;
  131. packInfo.spriteAtlas = GetSpriteAtlas( textrueJson.packName);
  132. uguiPackDB.allPackgInfos.Add(packInfo);
  133. string json = JsonUtility.ToJson(uguiPackDB);
  134. string packgPath = Application.dataPath.Replace("Assets", "UGUIPack/uguiconfig.db");
  135. File.WriteAllText(packgPath, json);
  136. return packInfo;
  137. }
  138. public static SpriteAtlas GetSpriteAtlas(string packName)
  139. {
  140. List<SpriteAtlas> spriteAtlasList= atlasList;
  141. for (int i = 0; i < spriteAtlasList.Count; i++)
  142. {
  143. if (spriteAtlasList[i].name.Equals(packName))
  144. {
  145. return spriteAtlasList[i];
  146. }
  147. }
  148. return null;
  149. }
  150. public static void SaveDB()
  151. {
  152. string packgPath = Application.dataPath.Replace("Assets", "UGUIPack/uguiconfig.db");
  153. string json = JsonUtility.ToJson(UGUICacheInfo.uguiPackDB);
  154. File.WriteAllText(packgPath, json);
  155. }
  156. private static void SetUGUIPackDB()
  157. {
  158. string packgPath = Application.dataPath.Replace("Assets", "UGUIPack/");
  159. if (!System.IO.Directory.Exists(packgPath))
  160. {
  161. Directory.CreateDirectory(packgPath);
  162. }
  163. string dbPath = packgPath + "uguiconfig.db";
  164. if (!File.Exists(dbPath))
  165. {
  166. _uguiPackDB = new UGUIPackDB();
  167. }
  168. else
  169. {
  170. string json = File.ReadAllText(dbPath);
  171. _uguiPackDB = JsonUtility.FromJson<UGUIPackDB>(json);
  172. }
  173. }
  174. }
  175. }
  176. #endif