Restart movement if you're unmounted while moving (Logistics of War)
authorLiza Carvelli <liza@carvel.li>
Wed, 4 Sep 2024 21:18:25 +0000 (23:18 +0200)
committerLiza Carvelli <liza@carvel.li>
Wed, 4 Sep 2024 21:18:25 +0000 (23:18 +0200)
Questionable/Controller/MovementController.cs

index 676d51d06e32c3bcf81ebe004514f1d93df02677..95950e14cce9022bd3d7c7658b3a5901053f76a9 100644 (file)
@@ -120,7 +120,8 @@ internal sealed class MovementController : IDisposable
                     {
                         Destination.NavmeshCalculations++;
                         Destination.PartialRoute.AddRange(navPoints);
-                        _logger.LogInformation("Running navmesh recalculation with fudged point ({From} to {To})", navPoints.Last(), Destination.Position);
+                        _logger.LogInformation("Running navmesh recalculation with fudged point ({From} to {To})",
+                            navPoints.Last(), Destination.Position);
 
                         _cancellationTokenSource = new();
                         _cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(30));
@@ -161,20 +162,12 @@ internal sealed class MovementController : IDisposable
             if (Destination is { IsFlying: true } && _condition[ConditionFlag.Swimming])
             {
                 _logger.LogInformation("Flying but swimming, restarting as non-flying path...");
-                var dest = Destination;
-                Stop();
-
-                if (dest.UseNavmesh)
-                {
-                    NavigateTo(EMovementType.None, dest.DataId, dest.Position, false, false, dest.StopDistance,
-                        dest.IgnoreDistanceToObject);
-                }
-                else
-                {
-                    NavigateTo(EMovementType.None, dest.DataId, [dest.Position], false, false, dest.StopDistance,
-                        dest.IgnoreDistanceToObject);
-                }
-
+                Restart(Destination);
+            }
+            else if (Destination is { IsFlying: true } && !_condition[ConditionFlag.Mounted])
+            {
+                _logger.LogInformation("Flying but not mounted, restarting as non-flying path...");
+                Restart(Destination);
                 return;
             }
 
@@ -260,6 +253,22 @@ internal sealed class MovementController : IDisposable
         }
     }
 
+    private void Restart(DestinationData destination)
+    {
+        Stop();
+
+        if (destination.UseNavmesh)
+        {
+            NavigateTo(EMovementType.None, destination.DataId, destination.Position, false, false,
+                destination.StopDistance, destination.IgnoreDistanceToObject);
+        }
+        else
+        {
+            NavigateTo(EMovementType.None, destination.DataId, [destination.Position], false, false,
+                destination.StopDistance, destination.IgnoreDistanceToObject);
+        }
+    }
+
     private bool IsOnFlightPath(Vector3 p)
     {
         Vector3? pointOnFloor = _navmeshIpc.GetPointOnFloor(p, true);