using System.Collections; using System.Collections.Generic; using Syntriax.Engine.Core; namespace Syntriax.Engine.Physics2D; public class PhysicsCoroutineManager : Behaviour, IPhysicsUpdate { private readonly Event.EventHandler delegateOnUpdate = null!; private readonly List enumerators = []; private IPhysicsEngine2D? physicsEngine = null; 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; }