|
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- using Svelto.Tasks.Lean;
- using Svelto.Tasks.ExtraLean;
-
- namespace GamecraftModdingAPI.Tasks
- {
- /// <summary>
- /// Asynchronous task scheduling for ISchedulables.
- /// Asynchronous tasks will not freeze the main program, which makes them ideal for slow or blocking operations which don't need to be completed post-haste.
- /// The functionality of this class works in any state.
- /// </summary>
- public static class Scheduler
- {
- public static Svelto.Tasks.Lean.Unity.UpdateMonoRunner leanRunnerUI
- {
- get
- {
- return RobocraftX.Schedulers.Lean.UIScheduler;
- }
- }
-
- public static Svelto.Tasks.ExtraLean.Unity.UpdateMonoRunner extraLeanRunnerUI
- {
- get
- {
- return RobocraftX.Schedulers.ExtraLean.UIScheduler;
- }
- }
-
- public static readonly Svelto.Tasks.ExtraLean.Unity.UpdateMonoRunner extraLeanRunner = new Svelto.Tasks.ExtraLean.Unity.UpdateMonoRunner("GamecraftModdingAPIExtraLean");
-
- public static readonly Svelto.Tasks.Lean.Unity.UpdateMonoRunner leanRunner = new Svelto.Tasks.Lean.Unity.UpdateMonoRunner("GamecraftModdingAPILean");
-
- /// <summary>
- /// Schedule a task to run asynchronously.
- /// This uses custom task runners (by default) to not interfere with the game.
- /// </summary>
- /// <param name="toRun">The task to run</param>
- /// <param name="extraLean">Schedule toRun on an extra lean runner?</param>
- /// <param name="ui">Schedule toRun on Gamecraft's built-in UI task runner?</param>
- public static void Schedule(ISchedulable toRun, bool extraLean = false, bool ui = false)
- {
- if (extraLean)
- {
- if (ui)
- {
- toRun.Run().RunOn(extraLeanRunnerUI);
- }
- else
- {
- toRun.Run().RunOn(extraLeanRunner);
- }
-
- }
- else
- {
- if (ui)
- {
- toRun.Run().RunOn(leanRunnerUI);
- }
- else
- {
- toRun.Run().RunOn(leanRunner);
- }
- }
-
- }
-
- public static void Dispose()
- {
- leanRunner.Stop();
- extraLeanRunner.Stop();
- leanRunner.Dispose();
- extraLeanRunner.Dispose();
- }
- }
- }
|