FR2_UsedInBuild.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using UnityEditor;
  4. using UnityEngine;
  5. namespace vietlabs.fr2
  6. {
  7. public class FR2_UsedInBuild : IRefDraw
  8. {
  9. private readonly FR2_TreeUI2.GroupDrawer groupDrawer;
  10. private bool dirty;
  11. private readonly FR2_RefDrawer drawer;
  12. internal Dictionary<string, FR2_Ref> refs;
  13. public FR2_UsedInBuild(IWindow window)
  14. {
  15. this.window = window;
  16. drawer = new FR2_RefDrawer(window);
  17. dirty = true;
  18. drawer.SetDirty();
  19. }
  20. public IWindow window { get; set; }
  21. public int ElementCount()
  22. {
  23. return refs == null ? 0 : refs.Count;
  24. }
  25. public bool Draw(Rect rect)
  26. {
  27. if (dirty)
  28. {
  29. RefreshView();
  30. }
  31. return drawer.Draw(rect);
  32. }
  33. public bool DrawLayout()
  34. {
  35. //Debug.Log("draw");
  36. if (dirty)
  37. {
  38. RefreshView();
  39. }
  40. return drawer.DrawLayout();
  41. }
  42. public void SetDirty()
  43. {
  44. dirty = true;
  45. drawer.SetDirty();
  46. }
  47. public void RefreshView()
  48. {
  49. var scenes = new HashSet<string>();
  50. // string[] scenes = new string[sceneCount];
  51. foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
  52. {
  53. if (scene == null)
  54. {
  55. continue;
  56. }
  57. if (scene.enabled == false)
  58. {
  59. continue;
  60. }
  61. string sce = AssetDatabase.AssetPathToGUID(scene.path);
  62. if (scenes.Contains(sce))
  63. {
  64. continue;
  65. }
  66. scenes.Add(sce);
  67. }
  68. refs = FR2_Ref.FindUsage(scenes.ToArray());
  69. foreach (string VARIABLE in scenes)
  70. {
  71. FR2_Ref asset = null;
  72. if (!refs.TryGetValue(VARIABLE, out asset))
  73. {
  74. continue;
  75. }
  76. asset.depth = 1;
  77. }
  78. List<FR2_Asset> list = FR2_Cache.Api.AssetList;
  79. int count = list.Count;
  80. for (var i = 0; i < count; i++)
  81. {
  82. FR2_Asset item = list[i];
  83. if (item.inEditor) continue;
  84. if (item.inPlugins)
  85. {
  86. if (item.type == FR2_AssetType.SCENE) continue;
  87. }
  88. if (item.inResources || item.inStreamingAsset || item.inPlugins)
  89. {
  90. if (refs.ContainsKey(item.guid))
  91. {
  92. continue;
  93. }
  94. refs.Add(item.guid, new FR2_Ref(0, 1, item, null));
  95. }
  96. }
  97. // remove ignored items
  98. var vals = refs.Values.ToArray();
  99. foreach (var item in vals)
  100. {
  101. foreach (var ig in FR2_Setting.s.listIgnore)
  102. {
  103. if (!item.asset.assetPath.StartsWith(ig)) continue;
  104. refs.Remove(item.asset.guid);
  105. //Debug.Log("Remove: " + item.asset.assetPath + "\n" + ig);
  106. break;
  107. }
  108. }
  109. drawer.SetRefs(refs);
  110. dirty = false;
  111. }
  112. internal void RefreshSort()
  113. {
  114. drawer.RefreshSort();
  115. }
  116. }
  117. }