diff options
author | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2021-08-12 21:26:12 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2021-11-28 00:01:43 -0500 |
commit | 3a3688e09448b95f8b412154de743df6b2297fe9 (patch) | |
tree | 9a1d8baa554007a343690725babae92a8d7d9016 /src/SMAPI | |
parent | e16d6e98dca581754023a618b3abe603e7905f44 (diff) | |
download | SMAPI-3a3688e09448b95f8b412154de743df6b2297fe9.tar.gz SMAPI-3a3688e09448b95f8b412154de743df6b2297fe9.tar.bz2 SMAPI-3a3688e09448b95f8b412154de743df6b2297fe9.zip |
use new mod hooks to synchronize tasks
Diffstat (limited to 'src/SMAPI')
-rw-r--r-- | src/SMAPI/Framework/SCore.cs | 12 | ||||
-rw-r--r-- | src/SMAPI/Framework/SModHooks.cs | 30 |
2 files changed, 31 insertions, 11 deletions
diff --git a/src/SMAPI/Framework/SCore.cs b/src/SMAPI/Framework/SCore.cs index 95a7ace6..947284a8 100644 --- a/src/SMAPI/Framework/SCore.cs +++ b/src/SMAPI/Framework/SCore.cs @@ -11,7 +11,6 @@ using System.Runtime.ExceptionServices; using System.Security; using System.Text; using System.Threading; -using System.Threading.Tasks; using Microsoft.Xna.Framework; #if SMAPI_FOR_WINDOWS using Microsoft.Win32; @@ -236,7 +235,7 @@ namespace StardewModdingAPI.Framework monitor: this.Monitor, reflection: this.Reflection, eventManager: this.EventManager, - modHooks: new SModHooks(this.OnNewDayAfterFade), + modHooks: new SModHooks(this.OnNewDayAfterFade, this.Monitor), multiplayer: this.Multiplayer, exitGameImmediately: this.ExitGameImmediately, @@ -650,13 +649,6 @@ namespace StardewModdingAPI.Framework this.Monitor.Log("Game loader done."); } - if (instance.NewDayTask?.Status == TaskStatus.Created) - { - this.Monitor.Log("New day task synchronizing..."); - instance.NewDayTask.RunSynchronously(); - this.Monitor.Log("New day task done."); - } - // While a background task is in progress, the game may make changes to the game // state while mods are running their code. This is risky, because data changes can // conflict (e.g. collection changed during enumeration errors) and data may change @@ -666,7 +658,7 @@ namespace StardewModdingAPI.Framework // a small chance that the task will finish after we defer but before the game checks, // which means technically events should be raised, but the effects of missing one // update tick are negligible and not worth the complications of bypassing Game1.Update. - if (instance.NewDayTask != null || Game1.gameMode == Game1.loadingMode) + if (Game1.gameMode == Game1.loadingMode) { events.UnvalidatedUpdateTicking.RaiseEmpty(); runUpdate(); diff --git a/src/SMAPI/Framework/SModHooks.cs b/src/SMAPI/Framework/SModHooks.cs index 7dafc746..101e022a 100644 --- a/src/SMAPI/Framework/SModHooks.cs +++ b/src/SMAPI/Framework/SModHooks.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using StardewValley; namespace StardewModdingAPI.Framework @@ -12,15 +13,20 @@ namespace StardewModdingAPI.Framework /// <summary>A callback to invoke before <see cref="Game1.newDayAfterFade"/> runs.</summary> private readonly Action BeforeNewDayAfterFade; + /// <summary>Writes messages to the console.</summary> + private readonly IMonitor Monitor; + /********* ** Public methods *********/ /// <summary>Construct an instance.</summary> /// <param name="beforeNewDayAfterFade">A callback to invoke before <see cref="Game1.newDayAfterFade"/> runs.</param> - public SModHooks(Action beforeNewDayAfterFade) + /// <param name="monitor">Writes messages to the console.</param> + public SModHooks(Action beforeNewDayAfterFade, IMonitor monitor) { this.BeforeNewDayAfterFade = beforeNewDayAfterFade; + this.Monitor = monitor; } /// <summary>A hook invoked when <see cref="Game1.newDayAfterFade"/> is called.</summary> @@ -30,5 +36,27 @@ namespace StardewModdingAPI.Framework this.BeforeNewDayAfterFade?.Invoke(); action(); } + + /// <summary>Start an asynchronous task for the game.</summary> + /// <param name="task">The task to start.</param> + /// <param name="id">A unique key which identifies the task.</param> + public override Task StartTask(Task task, string id) + { + this.Monitor.Log($"Synchronizing '{id}' task..."); + task.RunSynchronously(); + this.Monitor.Log(" task complete."); + return task; + } + + /// <summary>Start an asynchronous task for the game.</summary> + /// <param name="task">The task to start.</param> + /// <param name="id">A unique key which identifies the task.</param> + public override Task<T> StartTask<T>(Task<T> task, string id) + { + this.Monitor.Log($"Synchronizing '{id}' task..."); + task.RunSynchronously(); + this.Monitor.Log(" task complete."); + return task; + } } } |