Cancel movement in invalid states

(cherry picked from commit d9cfb2c278aa7fd9c7928ebfc43cded5e85ed1a3)
This commit is contained in:
Gustas
2024-12-02 21:18:16 +02:00
committed by Pavel Penev
parent 52102da839
commit 2ccfa425b2

View File

@@ -29,6 +29,8 @@ namespace OpenRA.Mods.Common.Activities
readonly bool forceEnter; readonly bool forceEnter;
readonly bool ignoreOccupancy; readonly bool ignoreOccupancy;
bool dockingCancelled;
public MoveToDock(Actor self, Actor dockHostActor = null, IDockHost dockHost = null, public MoveToDock(Actor self, Actor dockHostActor = null, IDockHost dockHost = null,
bool forceEnter = false, bool ignoreOccupancy = false, Color? dockLineColor = null) bool forceEnter = false, bool ignoreOccupancy = false, Color? dockLineColor = null)
{ {
@@ -44,17 +46,25 @@ namespace OpenRA.Mods.Common.Activities
protected override void OnFirstRun(Actor self) protected override void OnFirstRun(Actor self)
{ {
if (IsCanceling || dockClient.IsTraitDisabled) if (dockClient.IsTraitDisabled)
return; return;
// We were ordered to dock to an actor but host was unspecified. // We were ordered to dock to an actor but host was unspecified.
if (dockHostActor != null && dockHost == null) if (dockHostActor != null && dockHost == null)
{ {
if (dockHostActor.IsDead || !dockHostActor.IsInWorld)
{
dockingCancelled = true;
return;
}
var link = dockClient.AvailableDockHosts(dockHostActor, default, forceEnter, ignoreOccupancy) var link = dockClient.AvailableDockHosts(dockHostActor, default, forceEnter, ignoreOccupancy)
.ClosestDock(self, dockClient); .ClosestDock(self, dockClient);
if (link.HasValue) if (link.HasValue)
dockHost = link.Value.Trait; dockHost = link.Value.Trait;
else
dockingCancelled = true;
} }
} }
@@ -63,7 +73,7 @@ namespace OpenRA.Mods.Common.Activities
if (IsCanceling) if (IsCanceling)
return true; return true;
if (dockClient.IsTraitDisabled) if (dockingCancelled || dockClient.IsTraitDisabled)
{ {
Cancel(self, true); Cancel(self, true);
return true; return true;