using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Svelto.Tasks; using Svelto.Tasks.Enumerators; namespace GamecraftModdingAPI.Tasks { /// <summary> /// An asynchronous task to be performed once. /// Once constructed, this can be run by scheduling it with Scheduler.Schedule() /// </summary> public class Once : ISchedulable { private Action task; private float delay; public IEnumerator<TaskContract> Run() { yield return new WaitForSecondsEnumerator(delay).Continue(); task(); yield return Yield.It; } /// <summary> /// Construct a single-run task /// </summary> /// <param name="task">The task to run once</param> /// <param name="after">The delay (in seconds) before the task is run</param> public Once(Action task, float after = 0.0f) { this.task = task; this.delay = after; } } }