diff --git a/OpenRA.Mods.Common/Traits/Mobile.cs b/OpenRA.Mods.Common/Traits/Mobile.cs index 1e83280496..88aa5fbb99 100644 --- a/OpenRA.Mods.Common/Traits/Mobile.cs +++ b/OpenRA.Mods.Common/Traits/Mobile.cs @@ -636,7 +636,7 @@ namespace OpenRA.Mods.Common.Traits return new ReturnToCellActivity(self); } - class ReturnToCellActivity : Activity + public class ReturnToCellActivity : Activity { readonly Mobile mobile; readonly bool recalculateSubCell; diff --git a/OpenRA.Mods.Common/Traits/Render/WithProductionDoorOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithProductionDoorOverlay.cs index 0dd65f5347..6f387c6dad 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithProductionDoorOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithProductionDoorOverlay.cs @@ -40,6 +40,7 @@ namespace OpenRA.Mods.Common.Traits.Render readonly Animation door; int desiredFrame; CPos openExit; + Actor exitingActor; public WithProductionDoorOverlay(Actor self, WithProductionDoorOverlayInfo info) : base(info) @@ -57,8 +58,14 @@ namespace OpenRA.Mods.Common.Traits.Render void ITick.Tick(Actor self) { - if (desiredFrame > 0 && !self.World.ActorMap.GetActorsAt(openExit).Any(a => a != self)) + if (exitingActor == null) + return; + + if (!exitingActor.IsInWorld || exitingActor.Location != openExit || !(exitingActor.CurrentActivity is Mobile.ReturnToCellActivity)) + { desiredFrame = 0; + exitingActor = null; + } } void INotifyDamageStateChanged.DamageStateChanged(Actor self, AttackInfo e) @@ -70,6 +77,7 @@ namespace OpenRA.Mods.Common.Traits.Render void INotifyProduction.UnitProduced(Actor self, Actor other, CPos exit) { openExit = exit; + exitingActor = other; desiredFrame = door.CurrentSequence.Length - 1; } }