diff --git a/OpenRA.Mods.Cnc/Activities/LayMines.cs b/OpenRA.Mods.Cnc/Activities/LayMines.cs index 49bf68b3d6..b3162f9cac 100644 --- a/OpenRA.Mods.Cnc/Activities/LayMines.cs +++ b/OpenRA.Mods.Cnc/Activities/LayMines.cs @@ -39,7 +39,6 @@ namespace OpenRA.Mods.Cnc.Activities movement = self.Trait(); rearmableInfo = self.Info.TraitInfoOrDefault(); this.minefield = minefield; - ChildHasPriority = false; } protected override void OnFirstRun(Actor self) @@ -60,13 +59,6 @@ namespace OpenRA.Mods.Cnc.Activities public override bool Tick(Actor self) { - // Remove cells that have already been mined - minefield.RemoveAll(c => self.World.ActorMap.GetActorsAt(c) - .Any(a => a.Info.Name == minelayer.Info.Mine.ToLowerInvariant())); - - if (!TickChild(self)) - return false; - returnToBase = false; if (IsCanceling) @@ -109,6 +101,14 @@ namespace OpenRA.Mods.Cnc.Activities return true; } + public void CleanPlacedMines(Actor self) + { + // Remove cells that have already been mined + if (minefield != null) + minefield.RemoveAll(c => self.World.ActorMap.GetActorsAt(c) + .Any(a => a.Info.Name == minelayer.Info.Mine.ToLowerInvariant())); + } + public override IEnumerable TargetLineNodes(Actor self) { if (returnToBase) diff --git a/OpenRA.Mods.Cnc/Traits/Minelayer.cs b/OpenRA.Mods.Cnc/Traits/Minelayer.cs index c6b400e1d0..f2aafaca6d 100644 --- a/OpenRA.Mods.Cnc/Traits/Minelayer.cs +++ b/OpenRA.Mods.Cnc/Traits/Minelayer.cs @@ -37,7 +37,7 @@ namespace OpenRA.Mods.Cnc.Traits public object Create(ActorInitializer init) { return new Minelayer(init.Self, this); } } - public class Minelayer : IIssueOrder, IResolveOrder, ISync, IIssueDeployOrder, IOrderVoice + public class Minelayer : IIssueOrder, IResolveOrder, ISync, IIssueDeployOrder, IOrderVoice, ITick { public readonly MinelayerInfo Info; @@ -115,6 +115,13 @@ namespace OpenRA.Mods.Cnc.Traits } } + void ITick.Tick(Actor self) + { + if (self.CurrentActivity != null) + foreach (var field in self.CurrentActivity.ActivitiesImplementing()) + field.CleanPlacedMines(self); + } + string IOrderVoice.VoicePhraseForOrder(Actor self, Order order) { if (order.OrderString == "PlaceMine" || order.OrderString == "PlaceMinefield")