Clear placed mines queued fields too.

This commit is contained in:
Paul Chote
2019-08-18 16:03:44 +01:00
committed by teinarss
parent 9aec48aec3
commit 7311ae889f
2 changed files with 16 additions and 9 deletions

View File

@@ -39,7 +39,6 @@ namespace OpenRA.Mods.Cnc.Activities
movement = self.Trait<IMove>();
rearmableInfo = self.Info.TraitInfoOrDefault<RearmableInfo>();
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<TargetLineNode> TargetLineNodes(Actor self)
{
if (returnToBase)

View File

@@ -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<LayMines>())
field.CleanPlacedMines(self);
}
string IOrderVoice.VoicePhraseForOrder(Actor self, Order order)
{
if (order.OrderString == "PlaceMine" || order.OrderString == "PlaceMinefield")