From 4896a90b8d4ae0da38d3dd3e8c6c55457b912473 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Thu, 7 Sep 2017 18:01:06 +0100 Subject: [PATCH] Add plumbing to issue orders against a generic Target. --- OpenRA.Game/Network/Order.cs | 19 +++++++++++++++++++ OpenRA.Game/Traits/Target.cs | 8 +++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/OpenRA.Game/Network/Order.cs b/OpenRA.Game/Network/Order.cs index 88a8474a0b..ab1621c4e1 100644 --- a/OpenRA.Game/Network/Order.cs +++ b/OpenRA.Game/Network/Order.cs @@ -12,6 +12,7 @@ using System; using System.IO; using OpenRA.Network; +using OpenRA.Traits; namespace OpenRA { @@ -63,6 +64,21 @@ namespace OpenRA ExtraData = extraData; } + Order(string orderString, Actor subject, Target target, bool queued, CPos extraLocation, uint extraData) + { + var targetType = target.SerializableType; + + OrderString = orderString; + Subject = subject; + TargetActor = targetType == TargetType.Actor ? target.SerializableActor : null; + TargetLocation = targetType == TargetType.Terrain ? target.SerializableCell.HasValue ? + target.SerializableCell.Value : subject.World.Map.CellContaining(target.CenterPosition) : CPos.Zero; + TargetString = null; + Queued = queued; + ExtraLocation = extraLocation; + ExtraData = targetType == TargetType.FrozenActor ? target.FrozenActor.ID : extraData; + } + public static Order Deserialize(World world, BinaryReader r) { var magic = r.ReadByte(); @@ -174,6 +190,9 @@ namespace OpenRA public Order(string orderString, Actor subject, bool queued) : this(orderString, subject, null, CPos.Zero, null, queued, CPos.Zero, 0) { } + public Order(string orderString, Actor subject, Target target, bool queued) + : this(orderString, subject, target, queued, CPos.Zero, 0) { } + public Order(string orderstring, Order order) : this(orderstring, order.Subject, order.TargetActor, order.TargetLocation, order.TargetString, order.Queued, order.ExtraLocation, order.ExtraData) { } diff --git a/OpenRA.Game/Traits/Target.cs b/OpenRA.Game/Traits/Target.cs index dffbc0b73d..29a3a67bc5 100644 --- a/OpenRA.Game/Traits/Target.cs +++ b/OpenRA.Game/Traits/Target.cs @@ -25,12 +25,13 @@ namespace OpenRA.Traits Actor actor; FrozenActor frozen; WPos pos; + CPos? cell; int generation; public static Target FromPos(WPos p) { return new Target { pos = p, type = TargetType.Terrain }; } public static Target FromCell(World w, CPos c, SubCell subCell = SubCell.FullCell) { - return new Target { pos = w.Map.CenterOfSubCell(c, subCell), type = TargetType.Terrain }; + return new Target { pos = w.Map.CenterOfSubCell(c, subCell), cell = c, type = TargetType.Terrain }; } public static Target FromOrder(World w, Order o) @@ -191,5 +192,10 @@ namespace OpenRA.Traits return "Invalid"; } } + + // Expose internal state for serialization by the orders code *only* + internal TargetType SerializableType { get { return type; } } + internal Actor SerializableActor { get { return actor; } } + internal CPos? SerializableCell { get { return cell; } } } }