Don't auto-close levemete interactions if questionable isn't running, part 2
authorLiza Carvelli <liza@carvel.li>
Thu, 8 Aug 2024 13:31:08 +0000 (15:31 +0200)
committerLiza Carvelli <liza@carvel.li>
Thu, 8 Aug 2024 13:31:08 +0000 (15:31 +0200)
Questionable/Controller/GameUiController.cs
Questionable/Controller/QuestController.cs

index d8c314eeb364fd07aba5c1bcd0b5431102178f89..8e92e23101279d85edf20583d25708e02a17b6ff 100644 (file)
@@ -337,7 +337,8 @@ internal sealed class GameUiController : IDisposable
                 }
             }
 
-            if (_questController.IsRunning && _questController.NextQuest == null)
+            if ((_questController.IsRunning || _questController.WasLastTaskUpdateWithin(TimeSpan.FromSeconds(5)))
+                && _questController.NextQuest == null)
             {
                 // make sure to always close the leve dialogue
                 if (_questData.GetAllByIssuerDataId(target.DataId).Any(x => x.QuestId is LeveId))
index cb1cb91db9a00cf2f7dd34a5c6e564d562034225..34ff86b02c364061d0ca3c78fa6943ffd81650fc 100644 (file)
@@ -47,6 +47,11 @@ internal sealed class QuestController : MiniTaskController<QuestController>
     /// </summary>
     private DateTime _safeAnimationEnd = DateTime.MinValue;
 
+    /// <summary>
+    ///
+    /// </summary>
+    private DateTime _lastTaskUpdate = DateTime.Now;
+
     public QuestController(
         IClientState clientState,
         GameFunctions gameFunctions,
@@ -443,6 +448,8 @@ internal sealed class QuestController : MiniTaskController<QuestController>
                 ExecuteNextStep(_automationType);
             else
                 _logger.LogInformation("Couldn't execute next step during Stop() call");
+
+            _lastTaskUpdate = DateTime.Now;
         }
         else if (_automationType != EAutomationType.Manual)
         {
@@ -450,6 +457,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>
             _automationType = EAutomationType.Manual;
             _nextQuest = null;
             _gatheringQuest = null;
+            _lastTaskUpdate = DateTime.Now;
         }
     }
 
@@ -716,6 +724,12 @@ internal sealed class QuestController : MiniTaskController<QuestController>
         return false;
     }
 
+    public bool WasLastTaskUpdateWithin(TimeSpan timeSpan)
+    {
+        _logger.LogInformation("Last update: {Update}", _lastTaskUpdate);
+        return IsRunning || DateTime.Now <= _lastTaskUpdate.Add(timeSpan);
+    }
+
     public sealed record StepProgress(
         DateTime StartedAt,
         int PointMenuCounter = 0);