summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_EditorResourceManager.cs
diff options
context:
space:
mode:
authorAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
committerAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
commitc55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch)
treeee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_EditorResourceManager.cs
downloadProject-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.gz
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.bz2
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.zip
Inital commit
Diffstat (limited to 'Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_EditorResourceManager.cs')
-rw-r--r--Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_EditorResourceManager.cs142
1 files changed, 142 insertions, 0 deletions
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<Object> m_ObjectUpdateQueue = new List<Object>();
+ private Dictionary<int, int> m_ObjectUpdateQueueLookup = new Dictionary<int, int>();
+
+ private readonly List<Object> m_ObjectReImportQueue = new List<Object>();
+ private Dictionary<int, int> m_ObjectReImportQueueLookup = new Dictionary<int, int>();
+
+ /// <summary>
+ /// Get a singleton instance of the manager.
+ /// </summary>
+ public static TMP_EditorResourceManager instance
+ {
+ get
+ {
+ if (s_Instance == null)
+ s_Instance = new TMP_EditorResourceManager();
+
+ return s_Instance;
+ }
+ }
+
+ /// <summary>
+ /// Register to receive rendering callbacks.
+ /// </summary>
+ private TMP_EditorResourceManager()
+ {
+ Camera.onPostRender += OnCameraPostRender;
+ }
+
+
+ void OnCameraPostRender(Camera cam)
+ {
+ // Exclude the PreRenderCamera
+ if (cam.cameraType == CameraType.Preview)
+ return;
+
+ DoUpdates();
+ }
+
+ /// <summary>
+ /// Register resource for re-import.
+ /// </summary>
+ /// <param name="obj"></param>
+ 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;
+ }
+
+ /// <summary>
+ /// Register resource to be updated.
+ /// </summary>
+ /// <param name="textObject"></param>
+ 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