Remove TargetActor and TargetLocation from order issuing.

This commit is contained in:
Paul Chote
2017-10-15 16:45:16 +00:00
committed by reaperrr
parent 4896a90b8d
commit d967c564a2
45 changed files with 104 additions and 144 deletions

View File

@@ -157,11 +157,13 @@ namespace OpenRA.Mods.Common.AI
else
{
failCount = 0;
ai.QueueOrder(new Order("PlaceBuilding", player.PlayerActor, false)
ai.QueueOrder(new Order("PlaceBuilding", player.PlayerActor, Target.FromCell(world, location.Value), false)
{
TargetLocation = location.Value,
// Building to place
TargetString = currentBuilding.Item,
TargetActor = queue.Actor,
// Actor ID to associate the placement with
ExtraData = queue.Actor.ActorID,
SuppressVisualFeedback = true
});

View File

@@ -757,7 +757,7 @@ namespace OpenRA.Mods.Common.AI
if (target.Actor == null)
return;
QueueOrder(new Order(target.OrderString, capturer, true) { TargetActor = target.Actor });
QueueOrder(new Order(target.OrderString, capturer, Target.FromActor(target.Actor), true));
BotDebug("AI ({0}): Ordered {1} to capture {2}", Player.ClientIndex, capturer, target.Actor);
activeUnits.Remove(capturer);
}
@@ -813,7 +813,7 @@ namespace OpenRA.Mods.Common.AI
// Tell the idle harvester to quit slacking:
var newSafeResourcePatch = FindNextResource(harvester, harv);
BotDebug("AI: Harvester {0} is idle. Ordering to {1} in search for new resources.".F(harvester, newSafeResourcePatch));
QueueOrder(new Order("Harvest", harvester, false) { TargetLocation = newSafeResourcePatch });
QueueOrder(new Order("Harvest", harvester, Target.FromCell(World, newSafeResourcePatch), false));
}
}
@@ -927,13 +927,16 @@ namespace OpenRA.Mods.Common.AI
void SetRallyPointsForNewProductionBuildings(Actor self)
{
foreach (var rp in self.World.ActorsWithTrait<RallyPoint>())
{
if (rp.Actor.Owner == Player &&
!IsRallyPointValid(rp.Trait.Location, rp.Actor.Info.TraitInfoOrDefault<BuildingInfo>()))
QueueOrder(new Order("SetRallyPoint", rp.Actor, false)
{
QueueOrder(new Order("SetRallyPoint", rp.Actor, Target.FromCell(World, ChooseRallyLocationNear(rp.Actor)), false)
{
TargetLocation = ChooseRallyLocationNear(rp.Actor),
SuppressVisualFeedback = true
});
}
}
}
// Won't work for shipyards...
@@ -992,7 +995,7 @@ namespace OpenRA.Mods.Common.AI
if (desiredLocation == null)
continue;
QueueOrder(new Order("Move", mcv, true) { TargetLocation = desiredLocation.Value });
QueueOrder(new Order("Move", mcv, Target.FromCell(World, desiredLocation.Value), true));
QueueOrder(new Order("DeployTransform", mcv, true));
}
}
@@ -1047,7 +1050,7 @@ namespace OpenRA.Mods.Common.AI
// Valid target found, delay by a few ticks to avoid rescanning before power fires via order
BotDebug("AI: {2} found new target location {0} for support power {1}.", attackLocation, sp.Info.OrderName, Player.PlayerName);
waitingPowers[sp] += 10;
QueueOrder(new Order(sp.Key, supportPowerMngr.Self, false) { TargetLocation = attackLocation.Value, SuppressVisualFeedback = true });
QueueOrder(new Order(sp.Key, supportPowerMngr.Self, Target.FromCell(World, attackLocation.Value), false) { SuppressVisualFeedback = true });
}
}
}
@@ -1199,7 +1202,7 @@ namespace OpenRA.Mods.Common.AI
{
BotDebug("Bot noticed damage {0} {1}->{2}, repairing.",
self, e.PreviousDamageState, e.DamageState);
QueueOrder(new Order("RepairBuilding", self.Owner.PlayerActor, false) { TargetActor = self });
QueueOrder(new Order("RepairBuilding", self.Owner.PlayerActor, Target.FromActor(self), false));
}
}

View File

@@ -223,7 +223,7 @@ namespace OpenRA.Mods.Common.AI
}
if (CanAttackTarget(a, owner.TargetActor))
owner.Bot.QueueOrder(new Order("Attack", a, false) { TargetActor = owner.TargetActor });
owner.Bot.QueueOrder(new Order("Attack", a, Target.FromActor(owner.TargetActor), false));
}
}
@@ -250,7 +250,7 @@ namespace OpenRA.Mods.Common.AI
continue;
}
owner.Bot.QueueOrder(new Order("Move", a, false) { TargetLocation = RandomBuildingLocation(owner) });
owner.Bot.QueueOrder(new Order("Move", a, Target.FromCell(owner.World, RandomBuildingLocation(owner)), false));
}
owner.FuzzyStateMachine.ChangeState(owner, new AirIdleState(), true);

View File

@@ -54,7 +54,7 @@ namespace OpenRA.Mods.Common.AI
if (AttackOrFleeFuzzy.Default.CanAttack(owner.Units, enemyUnits))
{
foreach (var u in owner.Units)
owner.Bot.QueueOrder(new Order("AttackMove", u, false) { TargetLocation = owner.TargetActor.Location });
owner.Bot.QueueOrder(new Order("AttackMove", u, Target.FromCell(owner.World, owner.TargetActor.Location), false));
// We have gathered sufficient units. Attack the nearest enemy unit.
owner.FuzzyStateMachine.ChangeState(owner, new GroundUnitsAttackMoveState(), true);
@@ -100,7 +100,7 @@ namespace OpenRA.Mods.Common.AI
// Let them regroup into tighter formation.
owner.Bot.QueueOrder(new Order("Stop", leader, false));
foreach (var unit in owner.Units.Where(a => !ownUnits.Contains(a)))
owner.Bot.QueueOrder(new Order("AttackMove", unit, false) { TargetLocation = leader.Location });
owner.Bot.QueueOrder(new Order("AttackMove", unit, Target.FromCell(owner.World, leader.Location), false));
}
else
{
@@ -114,7 +114,7 @@ namespace OpenRA.Mods.Common.AI
}
else
foreach (var a in owner.Units)
owner.Bot.QueueOrder(new Order("AttackMove", a, false) { TargetLocation = owner.TargetActor.Location });
owner.Bot.QueueOrder(new Order("AttackMove", a, Target.FromCell(owner.World, owner.TargetActor.Location), false));
}
if (ShouldFlee(owner))
@@ -147,7 +147,7 @@ namespace OpenRA.Mods.Common.AI
foreach (var a in owner.Units)
if (!BusyAttack(a))
owner.Bot.QueueOrder(new Order("Attack", a, false) { TargetActor = owner.TargetActor });
owner.Bot.QueueOrder(new Order("Attack", a, Target.FromActor(owner.TargetActor), false));
if (ShouldFlee(owner))
owner.FuzzyStateMachine.ChangeState(owner, new GroundUnitsFleeState(), true);

View File

@@ -81,7 +81,7 @@ namespace OpenRA.Mods.Common.AI
if (AttackOrFleeFuzzy.Default.CanAttack(owner.Units, enemyUnits))
{
foreach (var u in owner.Units)
owner.Bot.QueueOrder(new Order("AttackMove", u, false) { TargetLocation = owner.TargetActor.Location });
owner.Bot.QueueOrder(new Order("AttackMove", u, Target.FromCell(owner.World, owner.TargetActor.Location), false));
// We have gathered sufficient units. Attack the nearest enemy unit.
owner.FuzzyStateMachine.ChangeState(owner, new NavyUnitsAttackMoveState(), true);
@@ -127,7 +127,7 @@ namespace OpenRA.Mods.Common.AI
// Let them regroup into tighter formation.
owner.Bot.QueueOrder(new Order("Stop", leader, false));
foreach (var unit in owner.Units.Where(a => !ownUnits.Contains(a)))
owner.Bot.QueueOrder(new Order("AttackMove", unit, false) { TargetLocation = leader.Location });
owner.Bot.QueueOrder(new Order("AttackMove", unit, Target.FromCell(owner.World, leader.Location), false));
}
else
{
@@ -141,7 +141,7 @@ namespace OpenRA.Mods.Common.AI
}
else
foreach (var a in owner.Units)
owner.Bot.QueueOrder(new Order("AttackMove", a, false) { TargetLocation = owner.TargetActor.Location });
owner.Bot.QueueOrder(new Order("AttackMove", a, Target.FromCell(owner.World, owner.TargetActor.Location), false));
}
if (ShouldFlee(owner))
@@ -174,7 +174,7 @@ namespace OpenRA.Mods.Common.AI
foreach (var a in owner.Units)
if (!BusyAttack(a))
owner.Bot.QueueOrder(new Order("Attack", a, false) { TargetActor = owner.TargetActor });
owner.Bot.QueueOrder(new Order("Attack", a, Target.FromActor(owner.TargetActor), false));
if (ShouldFlee(owner))
owner.FuzzyStateMachine.ChangeState(owner, new NavyUnitsFleeState(), true);

View File

@@ -9,6 +9,8 @@
*/
#endregion
using OpenRA.Traits;
namespace OpenRA.Mods.Common.AI
{
class UnitsForProtectionIdleState : GroundStateBase, IState
@@ -55,7 +57,7 @@ namespace OpenRA.Mods.Common.AI
else
{
foreach (var a in owner.Units)
owner.Bot.QueueOrder(new Order("AttackMove", a, false) { TargetLocation = owner.TargetActor.Location });
owner.Bot.QueueOrder(new Order("AttackMove", a, Target.FromCell(owner.World, owner.TargetActor.Location), false));
}
}

View File

@@ -26,7 +26,7 @@ namespace OpenRA.Mods.Common.AI
{
var loc = RandomBuildingLocation(squad);
foreach (var a in squad.Units)
squad.Bot.QueueOrder(new Order("Move", a, false) { TargetLocation = loc });
squad.Bot.QueueOrder(new Order("Move", a, Target.FromCell(squad.World, loc), false));
}
protected static CPos RandomBuildingLocation(Squad squad)

View File

@@ -11,6 +11,7 @@
using System.Collections.Generic;
using OpenRA.Graphics;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Orders
{
@@ -21,7 +22,7 @@ namespace OpenRA.Mods.Common.Orders
world.CancelInputMode();
if (mi.Button == MouseButton.Left)
yield return new Order("PlaceBeacon", world.LocalPlayer.PlayerActor, false) { TargetLocation = cell, SuppressVisualFeedback = true };
yield return new Order("PlaceBeacon", world.LocalPlayer.PlayerActor, Target.FromCell(world, cell), false) { SuppressVisualFeedback = true };
}
public virtual void Tick(World world) { }

View File

@@ -13,6 +13,7 @@ using System.Collections.Generic;
using System.Linq;
using OpenRA.Mods.Common.Traits;
using OpenRA.Orders;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Orders
{
@@ -35,7 +36,7 @@ namespace OpenRA.Mods.Common.Orders
var queued = mi.Modifiers.HasModifier(Modifiers.Shift);
foreach (var subject in Subjects)
if (subject != target)
yield return new Order(OrderName, subject, queued) { TargetActor = target };
yield return new Order(OrderName, subject, Target.FromActor(target), queued);
}
public override void Tick(World world)

View File

@@ -133,11 +133,13 @@ namespace OpenRA.Mods.Common.Orders
orderType = "LineBuild";
}
yield return new Order(orderType, owner.PlayerActor, false)
yield return new Order(orderType, owner.PlayerActor, Target.FromCell(world, topLeft), false)
{
TargetLocation = topLeft,
TargetActor = queue.Actor,
// Building to place
TargetString = building,
// Actor to associate the placement with
ExtraData = queue.Actor.ActorID,
SuppressVisualFeedback = true
};
}
@@ -267,9 +269,8 @@ namespace OpenRA.Mods.Common.Orders
if (availableCells.Count == 0)
continue;
yield return new Order("Move", blocker.Actor, false)
yield return new Order("Move", blocker.Actor, Target.FromCell(world, blocker.Actor.ClosestCell(availableCells)), false)
{
TargetLocation = blocker.Actor.ClosestCell(availableCells),
SuppressVisualFeedback = true
};
}

View File

@@ -43,7 +43,7 @@ namespace OpenRA.Mods.Common.Orders
// Repair a building.
if (underCursor.Info.HasTraitInfo<RepairableBuildingInfo>())
yield return new Order("RepairBuilding", world.LocalPlayer.PlayerActor, false) { TargetActor = underCursor };
yield return new Order("RepairBuilding", world.LocalPlayer.PlayerActor, Target.FromActor(underCursor), false);
// Don't command allied units
if (underCursor.Owner != world.LocalPlayer)
@@ -69,7 +69,7 @@ namespace OpenRA.Mods.Common.Orders
if (repairBuilding == null)
yield break;
yield return new Order(orderId, underCursor, false) { TargetActor = repairBuilding, VisualFeedbackTarget = underCursor };
yield return new Order(orderId, underCursor, Target.FromActor(repairBuilding), false) { VisualFeedbackTarget = underCursor };
}
public void Tick(World world)

View File

@@ -655,11 +655,8 @@ namespace OpenRA.Mods.Common.Traits
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
{
if (order.OrderID == "Enter")
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
if (order.OrderID == "Move")
return new Order(order.OrderID, self, queued) { TargetLocation = self.World.Map.CellContaining(target.CenterPosition) };
if (order.OrderID == "Enter" || order.OrderID == "Move")
return new Order(order.OrderID, self, target, queued);
return null;
}

View File

@@ -132,17 +132,7 @@ namespace OpenRA.Mods.Common.Traits
Order IIssueOrder.IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
{
if (order is AttackOrderTargeter)
{
switch (target.Type)
{
case TargetType.Actor:
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
case TargetType.FrozenActor:
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
case TargetType.Terrain:
return new Order(order.OrderID, self, queued) { TargetLocation = self.World.Map.CellContaining(target.CenterPosition) };
}
}
return new Order(order.OrderID, self, target, queued);
return null;
}

View File

@@ -50,10 +50,7 @@ namespace OpenRA.Mods.Common.Traits
if (order.OrderID != "DetonateAttack" && order.OrderID != "Detonate")
return null;
if (target.Type == TargetType.FrozenActor)
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
return new Order(order.OrderID, self, target, queued);
}
Order IIssueDeployOrder.IssueDeployOrder(Actor self)

View File

@@ -150,7 +150,7 @@ namespace OpenRA.Mods.Common.Traits
// Cells outside the playable area should be clamped to the edge for consistency with move orders
cell = world.Map.Clamp(cell);
foreach (var s in subjects)
yield return new Order(orderName, s.Actor, queued) { TargetLocation = cell };
yield return new Order(orderName, s.Actor, Target.FromCell(world, cell), queued);
}
}

View File

@@ -32,7 +32,7 @@ namespace OpenRA.Mods.Common.Traits
public override void DoAction(Actor self, CPos targetCell)
{
attackMove.ResolveOrder(self, new Order("AttackMove", self, false) { TargetLocation = targetCell });
attackMove.ResolveOrder(self, new Order("AttackMove", self, Target.FromCell(self.World, targetCell), false));
}
}
}

View File

@@ -77,7 +77,7 @@ namespace OpenRA.Mods.Common.Traits
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
{
if (order.OrderID == OrderID)
return new Order(order.OrderID, self, false) { TargetLocation = self.World.Map.CellContaining(target.CenterPosition), SuppressVisualFeedback = true,
return new Order(order.OrderID, self, target, false) { SuppressVisualFeedback = true,
ExtraData = ((RallyPointOrderTargeter)order).ForceSet ? ForceSet : 0 };
return null;

View File

@@ -65,10 +65,7 @@ namespace OpenRA.Mods.Common.Traits
if (order.OrderID != "CaptureActor")
return null;
if (target.Type == TargetType.FrozenActor)
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
return new Order(order.OrderID, self, target, queued);
}
public string VoicePhraseForOrder(Actor self, Order order)

View File

@@ -205,21 +205,8 @@ namespace OpenRA.Mods.Common.Traits
Order IIssueOrder.IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
{
if (order.OrderID == "PickupUnit")
{
if (target.Type == TargetType.FrozenActor)
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
}
else if (order.OrderID == "DeliverUnit")
{
return new Order(order.OrderID, self, queued) { TargetLocation = self.World.Map.CellContaining(target.CenterPosition) };
}
else if (order.OrderID == "Unload")
{
return new Order(order.OrderID, self, queued) { TargetLocation = self.World.Map.CellContaining(target.CenterPosition) };
}
if (order.OrderID == "PickupUnit" || order.OrderID == "DeliverUnit" || order.OrderID == "Unload")
return new Order(order.OrderID, self, target, queued);
return null;
}

View File

@@ -57,10 +57,7 @@ namespace OpenRA.Mods.Common.Traits
if (order.OrderID != "DeliverCash")
return null;
if (target.Type == TargetType.FrozenActor)
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
return new Order(order.OrderID, self, target, queued);
}
public string VoicePhraseForOrder(Actor self, Order order)

View File

@@ -58,10 +58,7 @@ namespace OpenRA.Mods.Common.Traits
if (order.OrderID != "DeliverExperience")
return null;
if (target.Type == TargetType.FrozenActor)
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
return new Order(order.OrderID, self, target, queued);
}
public string VoicePhraseForOrder(Actor self, Order order)

View File

@@ -67,10 +67,7 @@ namespace OpenRA.Mods.Common.Traits
if (order.OrderID != "C4")
return null;
if (target.Type == TargetType.FrozenActor)
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
return new Order(order.OrderID, self, target, queued);
}
public void ResolveOrder(Actor self, Order order)

View File

@@ -51,10 +51,7 @@ namespace OpenRA.Mods.Common.Traits
if (order.OrderID != "EngineerRepair")
return null;
if (target.Type == TargetType.FrozenActor)
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
return new Order(order.OrderID, self, target, queued);
}
static bool IsValidOrder(Actor self, Order order)

View File

@@ -52,10 +52,7 @@ namespace OpenRA.Mods.Common.Traits
if (order.OrderID != "EnterTunnel")
return null;
if (target.Type == TargetType.FrozenActor)
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID, SuppressVisualFeedback = true };
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor, SuppressVisualFeedback = true };
return new Order(order.OrderID, self, target, queued) { SuppressVisualFeedback = true };
}
public string VoicePhraseForOrder(Actor self, Order order)

View File

@@ -66,10 +66,7 @@ namespace OpenRA.Mods.Common.Traits
if (order.OrderID != "ExternalCaptureActor")
return null;
if (target.Type == TargetType.FrozenActor)
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
return new Order(order.OrderID, self, target, queued);
}
static bool IsValidOrder(Actor self, Order order)

View File

@@ -342,11 +342,8 @@ namespace OpenRA.Mods.Common.Traits
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
{
if (order.OrderID == "Deliver")
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
if (order.OrderID == "Harvest")
return new Order(order.OrderID, self, queued) { TargetLocation = self.World.Map.CellContaining(target.CenterPosition) };
if (order.OrderID == "Deliver" || order.OrderID == "Harvest")
return new Order(order.OrderID, self, target, queued);
return null;
}

View File

@@ -585,7 +585,7 @@ namespace OpenRA.Mods.Common.Traits
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
{
if (order is MoveOrderTargeter)
return new Order("Move", self, queued) { TargetLocation = self.World.Map.CellContaining(target.CenterPosition) };
return new Order("Move", self, target, queued);
return null;
}

View File

@@ -66,7 +66,7 @@ namespace OpenRA.Mods.Common.Traits
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
{
if (order.OrderID == "EnterTransport" || order.OrderID == "EnterTransports")
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
return new Order(order.OrderID, self, target, queued);
return null;
}

View File

@@ -56,12 +56,13 @@ namespace OpenRA.Mods.Common.Traits
self.World.AddFrameEndTask(w =>
{
var prevItems = GetNumBuildables(self.Owner);
var targetActor = w.GetActorById(order.ExtraData);
if (order.TargetActor.IsDead)
if (targetActor.IsDead)
return;
var unit = self.World.Map.Rules.Actors[order.TargetString];
var queue = order.TargetActor.TraitsImplementing<ProductionQueue>()
var queue = targetActor.TraitsImplementing<ProductionQueue>()
.FirstOrDefault(q => q.CanBuild(unit) && q.CurrentItem() != null && q.CurrentItem().Item == order.TargetString && q.CurrentItem().RemainingTime == 0);
if (queue == null)

View File

@@ -55,7 +55,7 @@ namespace OpenRA.Mods.Common.Traits
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
{
if (order.OrderID == "Repair")
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
return new Order(order.OrderID, self, target, queued);
return null;
}

View File

@@ -52,7 +52,7 @@ namespace OpenRA.Mods.Common.Traits
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
{
if (order.OrderID == "RepairNear")
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
return new Order(order.OrderID, self, target, queued);
return null;
}

View File

@@ -55,7 +55,7 @@ namespace OpenRA.Mods.Common.Traits
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
{
if (order.OrderID == "RepairBridge")
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
return new Order(order.OrderID, self, target, queued);
return null;
}

View File

@@ -120,7 +120,7 @@ namespace OpenRA.Mods.Common.Traits
{
world.CancelInputMode();
if (mi.Button == MouseButton.Left && power.UnitsInRange(cell).Any())
yield return new Order(order, manager.Self, false) { TargetLocation = cell, SuppressVisualFeedback = true };
yield return new Order(order, manager.Self, Target.FromCell(world, cell), false) { SuppressVisualFeedback = true };
}
public void Tick(World world)

View File

@@ -280,7 +280,7 @@ namespace OpenRA.Mods.Common.Traits
{
world.CancelInputMode();
if (mi.Button == expectedButton && world.Map.Contains(cell))
yield return new Order(order, manager.Self, false) { TargetLocation = cell, SuppressVisualFeedback = true };
yield return new Order(order, manager.Self, Target.FromCell(world, cell), false) { SuppressVisualFeedback = true };
}
public virtual void Tick(World world)

View File

@@ -115,7 +115,7 @@ namespace OpenRA.Mods.Common.Traits
public virtual void DoAction(Actor self, CPos targetCell)
{
move.ResolveOrder(self, new Order("Move", self, false) { TargetLocation = targetCell });
move.ResolveOrder(self, new Order("Move", self, Target.FromCell(self.World, targetCell), false));
}
}
}