35 lines
839 B
C#
35 lines
839 B
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Syntriax.Engine.Core;
|
|
|
|
public class CoroutineManager : Behaviour, IUpdate
|
|
{
|
|
private readonly List<IEnumerator> enumerators = [];
|
|
|
|
public IEnumerator StartCoroutine(IEnumerator enumerator)
|
|
{
|
|
enumerators.Add(enumerator);
|
|
return enumerator;
|
|
}
|
|
|
|
public void StopCoroutine(IEnumerator enumerator)
|
|
{
|
|
enumerators.Remove(enumerator);
|
|
}
|
|
|
|
void IUpdate.Update()
|
|
{
|
|
for (int i = enumerators.Count - 1; i >= 0; i--)
|
|
{
|
|
if (enumerators[i].Current is ICoroutineYield coroutineYield && coroutineYield.Yield())
|
|
continue;
|
|
|
|
if (!enumerators[i].MoveNext())
|
|
enumerators.RemoveAt(i);
|
|
}
|
|
}
|
|
|
|
public CoroutineManager() => Priority = int.MinValue;
|
|
}
|