Clear placed mines queued fields too.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user