From c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 19 Apr 2020 17:19:32 -0400 Subject: Inital commit --- .../Scripts/Runtime/TMP_EditorResourceManager.cs | 142 +++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_EditorResourceManager.cs (limited to 'Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_EditorResourceManager.cs') diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_EditorResourceManager.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_EditorResourceManager.cs new file mode 100644 index 0000000..6fd4aa6 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_EditorResourceManager.cs @@ -0,0 +1,142 @@ +#if UNITY_EDITOR + +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + + +namespace TMPro +{ + public class TMP_EditorResourceManager + { + private static TMP_EditorResourceManager s_Instance; + + private readonly List m_ObjectUpdateQueue = new List(); + private Dictionary m_ObjectUpdateQueueLookup = new Dictionary(); + + private readonly List m_ObjectReImportQueue = new List(); + private Dictionary m_ObjectReImportQueueLookup = new Dictionary(); + + /// + /// Get a singleton instance of the manager. + /// + public static TMP_EditorResourceManager instance + { + get + { + if (s_Instance == null) + s_Instance = new TMP_EditorResourceManager(); + + return s_Instance; + } + } + + /// + /// Register to receive rendering callbacks. + /// + private TMP_EditorResourceManager() + { + Camera.onPostRender += OnCameraPostRender; + } + + + void OnCameraPostRender(Camera cam) + { + // Exclude the PreRenderCamera + if (cam.cameraType == CameraType.Preview) + return; + + DoUpdates(); + } + + /// + /// Register resource for re-import. + /// + /// + internal static void RegisterResourceForReimport(Object obj) + { + instance.InternalRegisterResourceForReimport(obj); + } + + private void InternalRegisterResourceForReimport(Object obj) + { + int id = obj.GetInstanceID(); + + if (m_ObjectReImportQueueLookup.ContainsKey(id)) + return; + + m_ObjectReImportQueueLookup[id] = id; + m_ObjectReImportQueue.Add(obj); + + return; + } + + /// + /// Register resource to be updated. + /// + /// + internal static void RegisterResourceForUpdate(Object obj) + { + instance.InternalRegisterResourceForUpdate(obj); + } + + private void InternalRegisterResourceForUpdate(Object obj) + { + int id = obj.GetInstanceID(); + + if (m_ObjectUpdateQueueLookup.ContainsKey(id)) + return; + + m_ObjectUpdateQueueLookup[id] = id; + m_ObjectUpdateQueue.Add(obj); + + return; + } + + + void DoUpdates() + { + // Handle objects that need updating + int objUpdateCount = m_ObjectUpdateQueue.Count; + + for (int i = 0; i < objUpdateCount; i++) + { + Object obj = m_ObjectUpdateQueue[i]; + if (obj != null) + { + EditorUtility.SetDirty(obj); + } + } + + if (objUpdateCount > 0) + { + //Debug.Log("Saving assets"); + //AssetDatabase.SaveAssets(); + + m_ObjectUpdateQueue.Clear(); + m_ObjectUpdateQueueLookup.Clear(); + } + + // Handle objects that need re-importing + int objReImportCount = m_ObjectReImportQueue.Count; + + for (int i = 0; i < objReImportCount; i++) + { + Object obj = m_ObjectReImportQueue[i]; + if (obj != null) + { + //Debug.Log("Re-importing [" + obj.name + "]"); + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(obj)); + } + } + + if (objReImportCount > 0) + { + m_ObjectReImportQueue.Clear(); + m_ObjectReImportQueueLookup.Clear(); + } + } + + } +} +#endif -- cgit v1.2.3