37 lines
		
	
	
		
			894 B
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			894 B
		
	
	
	
		
			C#
		
	
	
	
	
	
using System.Collections;
 | 
						|
using System.Collections.Generic;
 | 
						|
 | 
						|
using Engine.Core;
 | 
						|
 | 
						|
namespace Engine.Physics2D;
 | 
						|
 | 
						|
public class PhysicsCoroutineManager : Behaviour, IPhysicsUpdate
 | 
						|
{
 | 
						|
    private readonly List<IEnumerator> enumerators = [];
 | 
						|
 | 
						|
    public IEnumerator CreateCoroutine(IEnumerator enumerator)
 | 
						|
    {
 | 
						|
        enumerators.Add(enumerator);
 | 
						|
        return enumerator;
 | 
						|
    }
 | 
						|
 | 
						|
    public void StopCoroutine(IEnumerator enumerator)
 | 
						|
    {
 | 
						|
        enumerators.Remove(enumerator);
 | 
						|
    }
 | 
						|
 | 
						|
    public void PhysicsUpdate(float delta)
 | 
						|
    {
 | 
						|
        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 PhysicsCoroutineManager() => Priority = int.MinValue;
 | 
						|
}
 |