Files
Main/Assets/Launcher/ExternalLibs/SceneDataSplit/EditorCoroutineRunner.cs
2025-01-25 04:38:09 +08:00

76 lines
1.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
#if UNITY_EDITOR
using UnityEditor;
#endif
public static class EditorCoroutineRunner
{
private static List<EditorCoroutine> editorCoroutineList;
private static List<IEnumerator> buffer;
public static IEnumerator StartEditorCoroutine(IEnumerator iterator)
{
if (editorCoroutineList == null)
{
editorCoroutineList = new List<EditorCoroutine>();
}
if (buffer == null)
{
buffer = new List<IEnumerator>();
}
if (editorCoroutineList.Count == 0)
{
#if UNITY_EDITOR
EditorApplication.update += Update;
#endif
}
buffer.Add(iterator);
return iterator;
}
private static bool Find(IEnumerator iterator)
{
foreach (EditorCoroutine editorCoroutine in editorCoroutineList)
{
if (editorCoroutine.Find(iterator))
{
return true;
}
}
return false;
}
private static void Update()
{
editorCoroutineList.RemoveAll
(
coroutine => { return coroutine.MoveNext() == false; }
);
if (buffer.Count > 0)
{
foreach (IEnumerator iterator in buffer)
{
if (!Find(iterator))
{
editorCoroutineList.Add(new EditorCoroutine(iterator));
}
}
buffer.Clear();
}
if (editorCoroutineList.Count == 0)
{
#if UNITY_EDITOR
EditorApplication.update -= Update;
#endif
}
}
}