using System.Collections; using System.Threading.Tasks; using RobocraftX.Schedulers; using Svelto.ECS; using Svelto.Tasks.ExtraLean; using GamecraftModdingAPI.Engines; namespace GamecraftModdingAPI.Utility { public class AsyncUtilsEngine : IApiEngine { private IEntityFunctions _efu; private IEntityFactory _efa; private IEnumerator WaitForSubmissionInternal(IEntityFunctions efu, IEntityFactory efa, EntitiesDB entitiesDB, TaskCompletionSource task) { var waitEnumerator = new WaitForSubmissionEnumerator(efu, efa, entitiesDB); while (waitEnumerator.MoveNext()) yield return null; task.SetResult(null); } private IEnumerator WaitForNextFrameInternal(TaskCompletionSource task) { yield return null; task.SetResult(null); } public Task WaitForSubmission() { var task = new TaskCompletionSource(); WaitForSubmissionInternal(_efu, _efa, entitiesDB, task).RunOn(ExtraLean.EveryFrameStepRunner_TimeStopped); return task.Task; } public Task WaitForNextFrame() { var task = new TaskCompletionSource(); WaitForNextFrameInternal(task).RunOn(ExtraLean.EveryFrameStepRunner_TimeStopped); return task.Task; } public void Setup(IEntityFunctions efu, IEntityFactory efa) { _efu = efu; _efa = efa; } public void Ready() { } public EntitiesDB entitiesDB { get; set; } public void Dispose() { } public string Name { get; } = "GamecraftModdingAPIAsyncUtilsGameEngine"; public bool isRemovable { get; } = false; } }