35 lines
		
	
	
		
			830 B
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			830 B
		
	
	
	
		
			C#
		
	
	
	
	
	
using System.Collections;
 | 
						|
using System.Collections.Generic;
 | 
						|
 | 
						|
namespace 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;
 | 
						|
}
 |