Clear placed mines queued fields too.
This commit is contained in:
@@ -39,7 +39,6 @@ namespace OpenRA.Mods.Cnc.Activities
|
|||||||
movement = self.Trait<IMove>();
|
movement = self.Trait<IMove>();
|
||||||
rearmableInfo = self.Info.TraitInfoOrDefault<RearmableInfo>();
|
rearmableInfo = self.Info.TraitInfoOrDefault<RearmableInfo>();
|
||||||
this.minefield = minefield;
|
this.minefield = minefield;
|
||||||
ChildHasPriority = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnFirstRun(Actor self)
|
protected override void OnFirstRun(Actor self)
|
||||||
@@ -60,13 +59,6 @@ namespace OpenRA.Mods.Cnc.Activities
|
|||||||
|
|
||||||
public override bool Tick(Actor self)
|
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;
|
returnToBase = false;
|
||||||
|
|
||||||
if (IsCanceling)
|
if (IsCanceling)
|
||||||
@@ -109,6 +101,14 @@ namespace OpenRA.Mods.Cnc.Activities
|
|||||||
return true;
|
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)
|
public override IEnumerable<TargetLineNode> TargetLineNodes(Actor self)
|
||||||
{
|
{
|
||||||
if (returnToBase)
|
if (returnToBase)
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ namespace OpenRA.Mods.Cnc.Traits
|
|||||||
public object Create(ActorInitializer init) { return new Minelayer(init.Self, this); }
|
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;
|
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)
|
string IOrderVoice.VoicePhraseForOrder(Actor self, Order order)
|
||||||
{
|
{
|
||||||
if (order.OrderString == "PlaceMine" || order.OrderString == "PlaceMinefield")
|
if (order.OrderString == "PlaceMine" || order.OrderString == "PlaceMinefield")
|
||||||
|
|||||||
Reference in New Issue
Block a user