Fix production door not closing if the actor stays on the exit cell.
This commit is contained in:
@@ -636,7 +636,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
return new ReturnToCellActivity(self);
|
return new ReturnToCellActivity(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
class ReturnToCellActivity : Activity
|
public class ReturnToCellActivity : Activity
|
||||||
{
|
{
|
||||||
readonly Mobile mobile;
|
readonly Mobile mobile;
|
||||||
readonly bool recalculateSubCell;
|
readonly bool recalculateSubCell;
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ namespace OpenRA.Mods.Common.Traits.Render
|
|||||||
readonly Animation door;
|
readonly Animation door;
|
||||||
int desiredFrame;
|
int desiredFrame;
|
||||||
CPos openExit;
|
CPos openExit;
|
||||||
|
Actor exitingActor;
|
||||||
|
|
||||||
public WithProductionDoorOverlay(Actor self, WithProductionDoorOverlayInfo info)
|
public WithProductionDoorOverlay(Actor self, WithProductionDoorOverlayInfo info)
|
||||||
: base(info)
|
: base(info)
|
||||||
@@ -57,8 +58,14 @@ namespace OpenRA.Mods.Common.Traits.Render
|
|||||||
|
|
||||||
void ITick.Tick(Actor self)
|
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;
|
desiredFrame = 0;
|
||||||
|
exitingActor = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void INotifyDamageStateChanged.DamageStateChanged(Actor self, AttackInfo e)
|
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)
|
void INotifyProduction.UnitProduced(Actor self, Actor other, CPos exit)
|
||||||
{
|
{
|
||||||
openExit = exit;
|
openExit = exit;
|
||||||
|
exitingActor = other;
|
||||||
desiredFrame = door.CurrentSequence.Length - 1;
|
desiredFrame = door.CurrentSequence.Length - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user