XChartsDaemon.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System.IO;
  2. using UnityEditor;
  3. using UnityEngine;
  4. using XCharts.Runtime;
  5. namespace XCharts.Editor
  6. {
  7. internal static class XChartsDaemon
  8. {
  9. public class XChartsAssetPostprocessor : AssetPostprocessor
  10. {
  11. static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets,
  12. string[] movedFromAssetsPaths)
  13. {
  14. foreach (var assetPath in importedAssets)
  15. {
  16. CheckAddedAsset(assetPath);
  17. }
  18. foreach (var assetPath in deletedAssets)
  19. {
  20. CheckDeletedAsset(assetPath);
  21. }
  22. }
  23. }
  24. public static void CheckAddedAsset(string assetPath)
  25. {
  26. var fileName = Path.GetFileName(assetPath);
  27. if (fileName.Equals("XCSettings.asset"))
  28. {
  29. CheckAsmdef();
  30. XCThemeMgr.ReloadThemeList();
  31. }
  32. else if (IsThemeAsset(assetPath))
  33. {
  34. var theme = AssetDatabase.LoadAssetAtPath<Theme>(assetPath);
  35. if (XCSettings.AddCustomTheme(theme))
  36. {
  37. XCThemeMgr.ReloadThemeList();
  38. }
  39. }
  40. }
  41. public static void CheckAsmdef()
  42. {
  43. #if UNITY_2017_1_OR_NEWER
  44. #if dUI_TextMeshPro
  45. XChartsEditor.CheckAsmdefTmpReference(true);
  46. #else
  47. XChartsEditor.CheckAsmdefTmpReference(false);
  48. #endif
  49. #elif UNITY_2019_1_OR_NEWER
  50. #if INPUT_SYSTEM_ENABLED
  51. XChartsEditor.CheckAsmdefInputSystemReference(true);
  52. #else
  53. XChartsEditor.CheckAsmdefInputSystemReference(false);
  54. #endif
  55. #endif
  56. }
  57. public static void CheckDeletedAsset(string assetPath)
  58. {
  59. if (!IsThemeAsset(assetPath)) return;
  60. if (XCSettings.Instance == null) return;
  61. var themes = XCSettings.customThemes;
  62. var changed = false;
  63. for (int i = themes.Count - 1; i >= 0; i--)
  64. {
  65. if (themes[i] == null)
  66. {
  67. themes.RemoveAt(i);
  68. changed = true;
  69. }
  70. }
  71. if (changed)
  72. {
  73. XCThemeMgr.ReloadThemeList();
  74. }
  75. }
  76. private static bool IsThemeAsset(string assetPath)
  77. {
  78. if (!assetPath.EndsWith(".asset")) return false;
  79. var assetName = Path.GetFileNameWithoutExtension(assetPath);
  80. if (!assetName.StartsWith(XCSettings.THEME_ASSET_NAME_PREFIX)) return false;
  81. return true;
  82. }
  83. }
  84. }