using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
|
|
namespace TMPro.EditorUtilities
|
|
{
|
|
/// <summary>
|
|
/// Simple implementation of coroutine working in the Unity Editor.
|
|
/// </summary>
|
|
public class EditorCoroutine
|
|
{
|
|
//private static Dictionary<int, EditorCoroutine> s_ActiveCoroutines;
|
|
|
|
readonly IEnumerator coroutine;
|
|
|
|
/// <summary>
|
|
/// Constructor
|
|
/// </summary>
|
|
/// <param name="routine"></param>
|
|
EditorCoroutine(IEnumerator routine)
|
|
{
|
|
this.coroutine = routine;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Starts a new EditorCoroutine.
|
|
/// </summary>
|
|
/// <param name="newCoroutine">Coroutine</param>
|
|
/// <returns>new EditorCoroutine</returns>
|
|
public static EditorCoroutine StartCoroutine(IEnumerator routine)
|
|
{
|
|
EditorCoroutine coroutine = new EditorCoroutine(routine);
|
|
coroutine.Start();
|
|
|
|
// Add coroutine to tracking list
|
|
//if (s_ActiveCoroutines == null)
|
|
// s_ActiveCoroutines = new Dictionary<int, EditorCoroutine>();
|
|
|
|
// Add new instance of editor coroutine to dictionary.
|
|
//s_ActiveCoroutines.Add(coroutine.GetHashCode(), coroutine);
|
|
|
|
return coroutine;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Clear delegate list
|
|
/// </summary>
|
|
//public static void StopAllEditorCoroutines()
|
|
//{
|
|
// EditorApplication.update = null;
|
|
//}
|
|
|
|
|
|
/// <summary>
|
|
/// Register callback for editor updates
|
|
/// </summary>
|
|
void Start()
|
|
{
|
|
EditorApplication.update += EditorUpdate;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Unregister callback for editor updates.
|
|
/// </summary>
|
|
public void Stop()
|
|
{
|
|
if (EditorApplication.update != null)
|
|
EditorApplication.update -= EditorUpdate;
|
|
|
|
//s_ActiveCoroutines.Remove(this.GetHashCode());
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Delegate function called on editor updates.
|
|
/// </summary>
|
|
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)
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|