using System.Collections; using System.Collections.Generic; using UnityEngine; namespace YKMoon.Procedure { public class RuntimeProcRunner { private Queue requests = new Queue(); public bool isRunning => requests.Count > 0; public int requestCount => requests.Count; public System.Action onNext; public System.Action onComplete; public void Update(float deltaTime) { while(requests.Count > 0) { var top = requests.Peek(); if(!IsTopFinished(top, deltaTime)) { break; } if(requests.Count > 0) { requests.Dequeue(); if(requests.Count == 0) { onComplete?.Invoke(); } } } } private bool IsTopFinished(ARuntimeProc proc, float deltaTime) { proc.Update(deltaTime); if(!proc.isRunning) { proc.Start(); onNext?.Invoke(proc); } return proc.isFinished; } public void AddProc(ARuntimeProc proc) { requests.Enqueue(proc); } public void Clear() { onComplete = null; requests.Clear(); } public Queue GetRequests() { return requests; } } }