using System; using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace TMPro.EditorUtilities { /// /// Simple implementation of coroutine working in the Unity Editor. /// public class TMP_EditorCoroutine { //private static Dictionary s_ActiveCoroutines; readonly IEnumerator coroutine; /// /// Constructor /// /// TMP_EditorCoroutine(IEnumerator routine) { this.coroutine = routine; } /// /// Starts a new EditorCoroutine. /// /// Coroutine /// new EditorCoroutine public static TMP_EditorCoroutine StartCoroutine(IEnumerator routine) { TMP_EditorCoroutine coroutine = new TMP_EditorCoroutine(routine); coroutine.Start(); // Add coroutine to tracking list //if (s_ActiveCoroutines == null) // s_ActiveCoroutines = new Dictionary(); // Add new instance of editor coroutine to dictionary. //s_ActiveCoroutines.Add(coroutine.GetHashCode(), coroutine); return coroutine; } /// /// Clear delegate list /// //public static void StopAllEditorCoroutines() //{ // EditorApplication.update = null; //} /// /// Register callback for editor updates /// void Start() { EditorApplication.update += EditorUpdate; } /// /// Unregister callback for editor updates. /// public void Stop() { if (EditorApplication.update != null) EditorApplication.update -= EditorUpdate; //s_ActiveCoroutines.Remove(this.GetHashCode()); } /// /// Delegate function called on editor updates. /// void EditorUpdate() { // Stop editor coroutine if it does not continue. if (coroutine.MoveNext() == false) Stop(); // Process the different types of EditorCoroutines. if (coroutine.Current != null) { } } } }