Remove TargetActor and TargetLocation from order issuing.
This commit is contained in:
@@ -40,8 +40,8 @@ namespace OpenRA
|
|||||||
public readonly string OrderString;
|
public readonly string OrderString;
|
||||||
public readonly Actor Subject;
|
public readonly Actor Subject;
|
||||||
public readonly bool Queued;
|
public readonly bool Queued;
|
||||||
public Actor TargetActor;
|
public Actor TargetActor { get; private set; }
|
||||||
public CPos TargetLocation;
|
public CPos TargetLocation { get; private set; }
|
||||||
public string TargetString;
|
public string TargetString;
|
||||||
public CPos ExtraLocation;
|
public CPos ExtraLocation;
|
||||||
public uint ExtraData;
|
public uint ExtraData;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
namespace OpenRA.Orders
|
namespace OpenRA.Orders
|
||||||
{
|
{
|
||||||
@@ -52,7 +53,7 @@ namespace OpenRA.Orders
|
|||||||
|
|
||||||
var queued = mi.Modifiers.HasModifier(Modifiers.Shift);
|
var queued = mi.Modifiers.HasModifier(Modifiers.Shift);
|
||||||
foreach (var subject in Subjects)
|
foreach (var subject in Subjects)
|
||||||
yield return new Order(OrderName, subject, queued) { TargetLocation = cell };
|
yield return new Order(OrderName, subject, Target.FromCell(world, cell), queued);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ namespace OpenRA.Mods.Cnc.Traits
|
|||||||
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
||||||
{
|
{
|
||||||
if (order.OrderID == "Disguise")
|
if (order.OrderID == "Disguise")
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
return new Order(order.OrderID, self, target, queued);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,10 +64,7 @@ namespace OpenRA.Mods.Cnc.Traits
|
|||||||
if (order.OrderID != "Infiltrate")
|
if (order.OrderID != "Infiltrate")
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (target.Type == TargetType.FrozenActor)
|
return new Order(order.OrderID, self, target, queued);
|
||||||
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
|
|
||||||
|
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsValidOrder(Actor self, Order order)
|
bool IsValidOrder(Actor self, Order order)
|
||||||
|
|||||||
@@ -121,10 +121,7 @@ namespace OpenRA.Mods.Cnc.Traits
|
|||||||
if (order.OrderID != "DetonateAttack" && order.OrderID != "Detonate")
|
if (order.OrderID != "DetonateAttack" && order.OrderID != "Detonate")
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (target.Type == TargetType.FrozenActor)
|
return new Order(order.OrderID, self, target, queued);
|
||||||
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
|
|
||||||
|
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Order IIssueDeployOrder.IssueDeployOrder(Actor self)
|
Order IIssueDeployOrder.IssueDeployOrder(Actor self)
|
||||||
|
|||||||
@@ -73,9 +73,9 @@ namespace OpenRA.Mods.Cnc.Traits
|
|||||||
else
|
else
|
||||||
self.World.OrderGenerator = new MinefieldOrderGenerator(self, start);
|
self.World.OrderGenerator = new MinefieldOrderGenerator(self, start);
|
||||||
|
|
||||||
return new Order("BeginMinefield", self, false) { TargetLocation = start };
|
return new Order("BeginMinefield", self, Target.FromCell(self.World, start), false);
|
||||||
case "PlaceMine":
|
case "PlaceMine":
|
||||||
return new Order("PlaceMine", self, false) { TargetLocation = self.Location };
|
return new Order("PlaceMine", self, Target.FromCell(self.World, self.Location), false);
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -83,7 +83,7 @@ namespace OpenRA.Mods.Cnc.Traits
|
|||||||
|
|
||||||
Order IIssueDeployOrder.IssueDeployOrder(Actor self)
|
Order IIssueDeployOrder.IssueDeployOrder(Actor self)
|
||||||
{
|
{
|
||||||
return new Order("PlaceMine", self, false) { TargetLocation = self.Location };
|
return new Order("PlaceMine", self, Target.FromCell(self.World, self.Location), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IResolveOrder.ResolveOrder(Actor self, Order order)
|
void IResolveOrder.ResolveOrder(Actor self, Order order)
|
||||||
@@ -195,7 +195,7 @@ namespace OpenRA.Mods.Cnc.Traits
|
|||||||
{
|
{
|
||||||
minelayers.First().World.CancelInputMode();
|
minelayers.First().World.CancelInputMode();
|
||||||
foreach (var minelayer in minelayers)
|
foreach (var minelayer in minelayers)
|
||||||
yield return new Order("PlaceMinefield", minelayer, false) { TargetLocation = cell };
|
yield return new Order("PlaceMinefield", minelayer, Target.FromCell(world, cell), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -88,9 +88,9 @@ namespace OpenRA.Mods.Cnc.Traits
|
|||||||
self.World.OrderGenerator = new PortableChronoOrderGenerator(self, Info);
|
self.World.OrderGenerator = new PortableChronoOrderGenerator(self, Info);
|
||||||
|
|
||||||
if (order.OrderID == "PortableChronoTeleport")
|
if (order.OrderID == "PortableChronoTeleport")
|
||||||
return new Order(order.OrderID, self, queued) { TargetLocation = self.World.Map.CellContaining(target.CenterPosition) };
|
return new Order(order.OrderID, self, target, queued);
|
||||||
|
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResolveOrder(Actor self, Order order)
|
public void ResolveOrder(Actor self, Order order)
|
||||||
@@ -185,7 +185,7 @@ namespace OpenRA.Mods.Cnc.Traits
|
|||||||
&& self.Trait<PortableChrono>().CanTeleport && self.Owner.Shroud.IsExplored(cell))
|
&& self.Trait<PortableChrono>().CanTeleport && self.Owner.Shroud.IsExplored(cell))
|
||||||
{
|
{
|
||||||
world.CancelInputMode();
|
world.CancelInputMode();
|
||||||
yield return new Order("PortableChronoTeleport", self, mi.Modifiers.HasModifier(Modifiers.Shift)) { TargetLocation = cell };
|
yield return new Order("PortableChronoTeleport", self, Target.FromCell(world, cell), mi.Modifiers.HasModifier(Modifiers.Shift));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -97,9 +97,8 @@ namespace OpenRA.Mods.Cnc.Traits
|
|||||||
{
|
{
|
||||||
world.CancelInputMode();
|
world.CancelInputMode();
|
||||||
if (mi.Button == expectedButton && IsValidTarget(world, cell))
|
if (mi.Button == expectedButton && IsValidTarget(world, cell))
|
||||||
yield return new Order(order, manager.Self, false)
|
yield return new Order(order, manager.Self, Target.FromCell(world, cell), false)
|
||||||
{
|
{
|
||||||
TargetLocation = cell,
|
|
||||||
SuppressVisualFeedback = true
|
SuppressVisualFeedback = true
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -221,9 +221,8 @@ namespace OpenRA.Mods.Cnc.Traits
|
|||||||
{
|
{
|
||||||
// Cannot chronoshift into unexplored location
|
// Cannot chronoshift into unexplored location
|
||||||
if (IsValidTarget(xy))
|
if (IsValidTarget(xy))
|
||||||
yield return new Order(order, manager.Self, false)
|
yield return new Order(order, manager.Self, Target.FromCell(manager.Self.World, xy), false)
|
||||||
{
|
{
|
||||||
TargetLocation = xy,
|
|
||||||
ExtraLocation = sourceLocation,
|
ExtraLocation = sourceLocation,
|
||||||
SuppressVisualFeedback = true
|
SuppressVisualFeedback = true
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -157,11 +157,13 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
failCount = 0;
|
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,
|
TargetString = currentBuilding.Item,
|
||||||
TargetActor = queue.Actor,
|
|
||||||
|
// Actor ID to associate the placement with
|
||||||
|
ExtraData = queue.Actor.ActorID,
|
||||||
SuppressVisualFeedback = true
|
SuppressVisualFeedback = true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -757,7 +757,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
if (target.Actor == null)
|
if (target.Actor == null)
|
||||||
return;
|
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);
|
BotDebug("AI ({0}): Ordered {1} to capture {2}", Player.ClientIndex, capturer, target.Actor);
|
||||||
activeUnits.Remove(capturer);
|
activeUnits.Remove(capturer);
|
||||||
}
|
}
|
||||||
@@ -813,7 +813,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
// Tell the idle harvester to quit slacking:
|
// Tell the idle harvester to quit slacking:
|
||||||
var newSafeResourcePatch = FindNextResource(harvester, harv);
|
var newSafeResourcePatch = FindNextResource(harvester, harv);
|
||||||
BotDebug("AI: Harvester {0} is idle. Ordering to {1} in search for new resources.".F(harvester, newSafeResourcePatch));
|
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)
|
void SetRallyPointsForNewProductionBuildings(Actor self)
|
||||||
{
|
{
|
||||||
foreach (var rp in self.World.ActorsWithTrait<RallyPoint>())
|
foreach (var rp in self.World.ActorsWithTrait<RallyPoint>())
|
||||||
|
{
|
||||||
if (rp.Actor.Owner == Player &&
|
if (rp.Actor.Owner == Player &&
|
||||||
!IsRallyPointValid(rp.Trait.Location, rp.Actor.Info.TraitInfoOrDefault<BuildingInfo>()))
|
!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
|
SuppressVisualFeedback = true
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Won't work for shipyards...
|
// Won't work for shipyards...
|
||||||
@@ -992,7 +995,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
if (desiredLocation == null)
|
if (desiredLocation == null)
|
||||||
continue;
|
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));
|
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
|
// 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);
|
BotDebug("AI: {2} found new target location {0} for support power {1}.", attackLocation, sp.Info.OrderName, Player.PlayerName);
|
||||||
waitingPowers[sp] += 10;
|
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.",
|
BotDebug("Bot noticed damage {0} {1}->{2}, repairing.",
|
||||||
self, e.PreviousDamageState, e.DamageState);
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (CanAttackTarget(a, owner.TargetActor))
|
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;
|
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);
|
owner.FuzzyStateMachine.ChangeState(owner, new AirIdleState(), true);
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
if (AttackOrFleeFuzzy.Default.CanAttack(owner.Units, enemyUnits))
|
if (AttackOrFleeFuzzy.Default.CanAttack(owner.Units, enemyUnits))
|
||||||
{
|
{
|
||||||
foreach (var u in owner.Units)
|
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.
|
// We have gathered sufficient units. Attack the nearest enemy unit.
|
||||||
owner.FuzzyStateMachine.ChangeState(owner, new GroundUnitsAttackMoveState(), true);
|
owner.FuzzyStateMachine.ChangeState(owner, new GroundUnitsAttackMoveState(), true);
|
||||||
@@ -100,7 +100,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
// Let them regroup into tighter formation.
|
// Let them regroup into tighter formation.
|
||||||
owner.Bot.QueueOrder(new Order("Stop", leader, false));
|
owner.Bot.QueueOrder(new Order("Stop", leader, false));
|
||||||
foreach (var unit in owner.Units.Where(a => !ownUnits.Contains(a)))
|
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
|
else
|
||||||
{
|
{
|
||||||
@@ -114,7 +114,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
foreach (var a in owner.Units)
|
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))
|
if (ShouldFlee(owner))
|
||||||
@@ -147,7 +147,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
|
|
||||||
foreach (var a in owner.Units)
|
foreach (var a in owner.Units)
|
||||||
if (!BusyAttack(a))
|
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))
|
if (ShouldFlee(owner))
|
||||||
owner.FuzzyStateMachine.ChangeState(owner, new GroundUnitsFleeState(), true);
|
owner.FuzzyStateMachine.ChangeState(owner, new GroundUnitsFleeState(), true);
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
if (AttackOrFleeFuzzy.Default.CanAttack(owner.Units, enemyUnits))
|
if (AttackOrFleeFuzzy.Default.CanAttack(owner.Units, enemyUnits))
|
||||||
{
|
{
|
||||||
foreach (var u in owner.Units)
|
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.
|
// We have gathered sufficient units. Attack the nearest enemy unit.
|
||||||
owner.FuzzyStateMachine.ChangeState(owner, new NavyUnitsAttackMoveState(), true);
|
owner.FuzzyStateMachine.ChangeState(owner, new NavyUnitsAttackMoveState(), true);
|
||||||
@@ -127,7 +127,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
// Let them regroup into tighter formation.
|
// Let them regroup into tighter formation.
|
||||||
owner.Bot.QueueOrder(new Order("Stop", leader, false));
|
owner.Bot.QueueOrder(new Order("Stop", leader, false));
|
||||||
foreach (var unit in owner.Units.Where(a => !ownUnits.Contains(a)))
|
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
|
else
|
||||||
{
|
{
|
||||||
@@ -141,7 +141,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
foreach (var a in owner.Units)
|
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))
|
if (ShouldFlee(owner))
|
||||||
@@ -174,7 +174,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
|
|
||||||
foreach (var a in owner.Units)
|
foreach (var a in owner.Units)
|
||||||
if (!BusyAttack(a))
|
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))
|
if (ShouldFlee(owner))
|
||||||
owner.FuzzyStateMachine.ChangeState(owner, new NavyUnitsFleeState(), true);
|
owner.FuzzyStateMachine.ChangeState(owner, new NavyUnitsFleeState(), true);
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
*/
|
*/
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
namespace OpenRA.Mods.Common.AI
|
namespace OpenRA.Mods.Common.AI
|
||||||
{
|
{
|
||||||
class UnitsForProtectionIdleState : GroundStateBase, IState
|
class UnitsForProtectionIdleState : GroundStateBase, IState
|
||||||
@@ -55,7 +57,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
foreach (var a in owner.Units)
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
{
|
{
|
||||||
var loc = RandomBuildingLocation(squad);
|
var loc = RandomBuildingLocation(squad);
|
||||||
foreach (var a in squad.Units)
|
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)
|
protected static CPos RandomBuildingLocation(Squad squad)
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
namespace OpenRA.Mods.Common.Orders
|
namespace OpenRA.Mods.Common.Orders
|
||||||
{
|
{
|
||||||
@@ -21,7 +22,7 @@ namespace OpenRA.Mods.Common.Orders
|
|||||||
world.CancelInputMode();
|
world.CancelInputMode();
|
||||||
|
|
||||||
if (mi.Button == MouseButton.Left)
|
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) { }
|
public virtual void Tick(World world) { }
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using OpenRA.Mods.Common.Traits;
|
using OpenRA.Mods.Common.Traits;
|
||||||
using OpenRA.Orders;
|
using OpenRA.Orders;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
namespace OpenRA.Mods.Common.Orders
|
namespace OpenRA.Mods.Common.Orders
|
||||||
{
|
{
|
||||||
@@ -35,7 +36,7 @@ namespace OpenRA.Mods.Common.Orders
|
|||||||
var queued = mi.Modifiers.HasModifier(Modifiers.Shift);
|
var queued = mi.Modifiers.HasModifier(Modifiers.Shift);
|
||||||
foreach (var subject in Subjects)
|
foreach (var subject in Subjects)
|
||||||
if (subject != target)
|
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)
|
public override void Tick(World world)
|
||||||
|
|||||||
@@ -133,11 +133,13 @@ namespace OpenRA.Mods.Common.Orders
|
|||||||
orderType = "LineBuild";
|
orderType = "LineBuild";
|
||||||
}
|
}
|
||||||
|
|
||||||
yield return new Order(orderType, owner.PlayerActor, false)
|
yield return new Order(orderType, owner.PlayerActor, Target.FromCell(world, topLeft), false)
|
||||||
{
|
{
|
||||||
TargetLocation = topLeft,
|
// Building to place
|
||||||
TargetActor = queue.Actor,
|
|
||||||
TargetString = building,
|
TargetString = building,
|
||||||
|
|
||||||
|
// Actor to associate the placement with
|
||||||
|
ExtraData = queue.Actor.ActorID,
|
||||||
SuppressVisualFeedback = true
|
SuppressVisualFeedback = true
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -267,9 +269,8 @@ namespace OpenRA.Mods.Common.Orders
|
|||||||
if (availableCells.Count == 0)
|
if (availableCells.Count == 0)
|
||||||
continue;
|
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
|
SuppressVisualFeedback = true
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ namespace OpenRA.Mods.Common.Orders
|
|||||||
|
|
||||||
// Repair a building.
|
// Repair a building.
|
||||||
if (underCursor.Info.HasTraitInfo<RepairableBuildingInfo>())
|
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
|
// Don't command allied units
|
||||||
if (underCursor.Owner != world.LocalPlayer)
|
if (underCursor.Owner != world.LocalPlayer)
|
||||||
@@ -69,7 +69,7 @@ namespace OpenRA.Mods.Common.Orders
|
|||||||
if (repairBuilding == null)
|
if (repairBuilding == null)
|
||||||
yield break;
|
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)
|
public void Tick(World world)
|
||||||
|
|||||||
@@ -655,11 +655,8 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
||||||
{
|
{
|
||||||
if (order.OrderID == "Enter")
|
if (order.OrderID == "Enter" || order.OrderID == "Move")
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
return new Order(order.OrderID, self, target, queued);
|
||||||
|
|
||||||
if (order.OrderID == "Move")
|
|
||||||
return new Order(order.OrderID, self, queued) { TargetLocation = self.World.Map.CellContaining(target.CenterPosition) };
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -132,17 +132,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
Order IIssueOrder.IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
Order IIssueOrder.IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
||||||
{
|
{
|
||||||
if (order is AttackOrderTargeter)
|
if (order is AttackOrderTargeter)
|
||||||
{
|
return new Order(order.OrderID, self, target, queued);
|
||||||
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 null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,10 +50,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (order.OrderID != "DetonateAttack" && order.OrderID != "Detonate")
|
if (order.OrderID != "DetonateAttack" && order.OrderID != "Detonate")
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (target.Type == TargetType.FrozenActor)
|
return new Order(order.OrderID, self, target, queued);
|
||||||
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
|
|
||||||
|
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Order IIssueDeployOrder.IssueDeployOrder(Actor self)
|
Order IIssueDeployOrder.IssueDeployOrder(Actor self)
|
||||||
|
|||||||
@@ -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
|
// Cells outside the playable area should be clamped to the edge for consistency with move orders
|
||||||
cell = world.Map.Clamp(cell);
|
cell = world.Map.Clamp(cell);
|
||||||
foreach (var s in subjects)
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public override void DoAction(Actor self, CPos targetCell)
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
||||||
{
|
{
|
||||||
if (order.OrderID == OrderID)
|
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 };
|
ExtraData = ((RallyPointOrderTargeter)order).ForceSet ? ForceSet : 0 };
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -65,10 +65,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (order.OrderID != "CaptureActor")
|
if (order.OrderID != "CaptureActor")
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (target.Type == TargetType.FrozenActor)
|
return new Order(order.OrderID, self, target, queued);
|
||||||
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
|
|
||||||
|
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string VoicePhraseForOrder(Actor self, Order order)
|
public string VoicePhraseForOrder(Actor self, Order order)
|
||||||
|
|||||||
@@ -205,21 +205,8 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
Order IIssueOrder.IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
Order IIssueOrder.IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
||||||
{
|
{
|
||||||
if (order.OrderID == "PickupUnit")
|
if (order.OrderID == "PickupUnit" || order.OrderID == "DeliverUnit" || order.OrderID == "Unload")
|
||||||
{
|
return new Order(order.OrderID, self, target, queued);
|
||||||
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) };
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,10 +57,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (order.OrderID != "DeliverCash")
|
if (order.OrderID != "DeliverCash")
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (target.Type == TargetType.FrozenActor)
|
return new Order(order.OrderID, self, target, queued);
|
||||||
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
|
|
||||||
|
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string VoicePhraseForOrder(Actor self, Order order)
|
public string VoicePhraseForOrder(Actor self, Order order)
|
||||||
|
|||||||
@@ -58,10 +58,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (order.OrderID != "DeliverExperience")
|
if (order.OrderID != "DeliverExperience")
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (target.Type == TargetType.FrozenActor)
|
return new Order(order.OrderID, self, target, queued);
|
||||||
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
|
|
||||||
|
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string VoicePhraseForOrder(Actor self, Order order)
|
public string VoicePhraseForOrder(Actor self, Order order)
|
||||||
|
|||||||
@@ -67,10 +67,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (order.OrderID != "C4")
|
if (order.OrderID != "C4")
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (target.Type == TargetType.FrozenActor)
|
return new Order(order.OrderID, self, target, queued);
|
||||||
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
|
|
||||||
|
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResolveOrder(Actor self, Order order)
|
public void ResolveOrder(Actor self, Order order)
|
||||||
|
|||||||
@@ -51,10 +51,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (order.OrderID != "EngineerRepair")
|
if (order.OrderID != "EngineerRepair")
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (target.Type == TargetType.FrozenActor)
|
return new Order(order.OrderID, self, target, queued);
|
||||||
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
|
|
||||||
|
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IsValidOrder(Actor self, Order order)
|
static bool IsValidOrder(Actor self, Order order)
|
||||||
|
|||||||
@@ -52,10 +52,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (order.OrderID != "EnterTunnel")
|
if (order.OrderID != "EnterTunnel")
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (target.Type == TargetType.FrozenActor)
|
return new Order(order.OrderID, self, target, queued) { SuppressVisualFeedback = true };
|
||||||
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 };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string VoicePhraseForOrder(Actor self, Order order)
|
public string VoicePhraseForOrder(Actor self, Order order)
|
||||||
|
|||||||
@@ -66,10 +66,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (order.OrderID != "ExternalCaptureActor")
|
if (order.OrderID != "ExternalCaptureActor")
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (target.Type == TargetType.FrozenActor)
|
return new Order(order.OrderID, self, target, queued);
|
||||||
return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID };
|
|
||||||
|
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IsValidOrder(Actor self, Order order)
|
static bool IsValidOrder(Actor self, Order order)
|
||||||
|
|||||||
@@ -342,11 +342,8 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
||||||
{
|
{
|
||||||
if (order.OrderID == "Deliver")
|
if (order.OrderID == "Deliver" || order.OrderID == "Harvest")
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
return new Order(order.OrderID, self, target, queued);
|
||||||
|
|
||||||
if (order.OrderID == "Harvest")
|
|
||||||
return new Order(order.OrderID, self, queued) { TargetLocation = self.World.Map.CellContaining(target.CenterPosition) };
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -585,7 +585,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
||||||
{
|
{
|
||||||
if (order is MoveOrderTargeter)
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
||||||
{
|
{
|
||||||
if (order.OrderID == "EnterTransport" || order.OrderID == "EnterTransports")
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,12 +56,13 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
self.World.AddFrameEndTask(w =>
|
self.World.AddFrameEndTask(w =>
|
||||||
{
|
{
|
||||||
var prevItems = GetNumBuildables(self.Owner);
|
var prevItems = GetNumBuildables(self.Owner);
|
||||||
|
var targetActor = w.GetActorById(order.ExtraData);
|
||||||
|
|
||||||
if (order.TargetActor.IsDead)
|
if (targetActor.IsDead)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var unit = self.World.Map.Rules.Actors[order.TargetString];
|
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);
|
.FirstOrDefault(q => q.CanBuild(unit) && q.CurrentItem() != null && q.CurrentItem().Item == order.TargetString && q.CurrentItem().RemainingTime == 0);
|
||||||
|
|
||||||
if (queue == null)
|
if (queue == null)
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
||||||
{
|
{
|
||||||
if (order.OrderID == "Repair")
|
if (order.OrderID == "Repair")
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
return new Order(order.OrderID, self, target, queued);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
||||||
{
|
{
|
||||||
if (order.OrderID == "RepairNear")
|
if (order.OrderID == "RepairNear")
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
return new Order(order.OrderID, self, target, queued);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
||||||
{
|
{
|
||||||
if (order.OrderID == "RepairBridge")
|
if (order.OrderID == "RepairBridge")
|
||||||
return new Order(order.OrderID, self, queued) { TargetActor = target.Actor };
|
return new Order(order.OrderID, self, target, queued);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
{
|
{
|
||||||
world.CancelInputMode();
|
world.CancelInputMode();
|
||||||
if (mi.Button == MouseButton.Left && power.UnitsInRange(cell).Any())
|
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)
|
public void Tick(World world)
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
{
|
{
|
||||||
world.CancelInputMode();
|
world.CancelInputMode();
|
||||||
if (mi.Button == expectedButton && world.Map.Contains(cell))
|
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)
|
public virtual void Tick(World world)
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public virtual void DoAction(Actor self, CPos targetCell)
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
namespace OpenRA.Test
|
namespace OpenRA.Test
|
||||||
{
|
{
|
||||||
@@ -18,6 +19,7 @@ namespace OpenRA.Test
|
|||||||
public class OrderTest
|
public class OrderTest
|
||||||
{
|
{
|
||||||
Order order;
|
Order order;
|
||||||
|
Order targetInvalid;
|
||||||
Order immediateOrder;
|
Order immediateOrder;
|
||||||
|
|
||||||
[SetUp]
|
[SetUp]
|
||||||
@@ -26,11 +28,12 @@ namespace OpenRA.Test
|
|||||||
order = new Order("TestOrder", null, false)
|
order = new Order("TestOrder", null, false)
|
||||||
{
|
{
|
||||||
TargetString = "TestTarget",
|
TargetString = "TestTarget",
|
||||||
TargetLocation = new CPos(1234, 5678),
|
|
||||||
ExtraData = 1234,
|
ExtraData = 1234,
|
||||||
ExtraLocation = new CPos(555, 555)
|
ExtraLocation = new CPos(555, 555)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
targetInvalid = new Order("TestOrder", null, Target.Invalid, false);
|
||||||
|
|
||||||
immediateOrder = new Order("TestOrderImmediate", null, false)
|
immediateOrder = new Order("TestOrderImmediate", null, false)
|
||||||
{
|
{
|
||||||
IsImmediate = true,
|
IsImmediate = true,
|
||||||
@@ -38,22 +41,28 @@ namespace OpenRA.Test
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Order RoundTripOrder(Order o)
|
||||||
|
{
|
||||||
|
var serializedData = new MemoryStream(o.Serialize());
|
||||||
|
return Order.Deserialize(null, new BinaryReader(serializedData));
|
||||||
|
}
|
||||||
|
|
||||||
[TestCase(TestName = "Data persists over serialization")]
|
[TestCase(TestName = "Data persists over serialization")]
|
||||||
public void SerializeA()
|
public void SerializeA()
|
||||||
{
|
{
|
||||||
var serializedData = new MemoryStream(order.Serialize());
|
Assert.That(RoundTripOrder(order).ToString(), Is.EqualTo(order.ToString()));
|
||||||
var result = Order.Deserialize(null, new BinaryReader(serializedData));
|
|
||||||
|
|
||||||
Assert.That(result.ToString(), Is.EqualTo(order.ToString()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestCase(TestName = "Data persists over serialization immediate")]
|
[TestCase(TestName = "Data persists over serialization (Immediate order)")]
|
||||||
public void SerializeB()
|
public void SerializeB()
|
||||||
{
|
{
|
||||||
var serializedData = new MemoryStream(immediateOrder.Serialize());
|
Assert.That(RoundTripOrder(immediateOrder).ToString(), Is.EqualTo(immediateOrder.ToString()));
|
||||||
var result = Order.Deserialize(null, new BinaryReader(serializedData));
|
}
|
||||||
|
|
||||||
Assert.That(result.ToString(), Is.EqualTo(immediateOrder.ToString()));
|
[TestCase(TestName = "Data persists over serialization (Invalid target)")]
|
||||||
|
public void SerializeC()
|
||||||
|
{
|
||||||
|
Assert.That(RoundTripOrder(targetInvalid).ToString(), Is.EqualTo(targetInvalid.ToString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user