From 5f9a67ed87f0a14d51ea6dcd3c3c9400c94eb5af Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 15 Oct 2017 19:37:15 +0000 Subject: [PATCH] Migrate frozen actors from ExtraData to Target. --- OpenRA.Game/Network/Order.cs | 4 +-- .../Traits/Infiltration/Infiltrates.cs | 25 ++++--------------- OpenRA.Mods.Common/ActorExts.cs | 16 +++++------- .../Traits/Attack/AttackBase.cs | 22 ---------------- OpenRA.Mods.Common/Traits/EngineerRepair.cs | 22 ++++------------ OpenRA.Mods.Common/Traits/ExternalCaptures.cs | 25 +++++++------------ 6 files changed, 26 insertions(+), 88 deletions(-) diff --git a/OpenRA.Game/Network/Order.cs b/OpenRA.Game/Network/Order.cs index 4c037bfda6..ab0d856111 100644 --- a/OpenRA.Game/Network/Order.cs +++ b/OpenRA.Game/Network/Order.cs @@ -74,9 +74,7 @@ namespace OpenRA TargetString = targetString; Queued = queued; ExtraLocation = extraLocation; - - // TODO: remove FrozenActor ID after the various ResolveOrders that rely on it are updated - ExtraData = target.Type == TargetType.FrozenActor ? target.FrozenActor.ID : extraData; + ExtraData = extraData; } public static Order Deserialize(World world, BinaryReader r) diff --git a/OpenRA.Mods.Cnc/Traits/Infiltration/Infiltrates.cs b/OpenRA.Mods.Cnc/Traits/Infiltration/Infiltrates.cs index 6f2274ed7e..fc2c375774 100644 --- a/OpenRA.Mods.Cnc/Traits/Infiltration/Infiltrates.cs +++ b/OpenRA.Mods.Cnc/Traits/Infiltration/Infiltrates.cs @@ -72,29 +72,14 @@ namespace OpenRA.Mods.Cnc.Traits if (IsTraitDisabled) return false; - // Not targeting an actor - if (order.ExtraData == 0 && order.TargetActor == null) - return false; + IEnumerable targetTypes = null; + if (order.Target.Type == TargetType.FrozenActor) + targetTypes = order.Target.FrozenActor.TargetTypes; - IEnumerable targetTypes; - - if (order.ExtraData != 0) - { - // Targeted an actor under the fog - var frozenLayer = self.Owner.PlayerActor.TraitOrDefault(); - if (frozenLayer == null) - return false; - - var frozen = frozenLayer.FromID(order.ExtraData); - if (frozen == null) - return false; - - targetTypes = frozen.TargetTypes; - } - else + if (order.Target.Type == TargetType.Actor) targetTypes = order.TargetActor.GetEnabledTargetTypes(); - return Info.Types.Overlaps(targetTypes); + return targetTypes != null && Info.Types.Overlaps(targetTypes); } public string VoicePhraseForOrder(Actor self, Order order) diff --git a/OpenRA.Mods.Common/ActorExts.cs b/OpenRA.Mods.Common/ActorExts.cs index c1ce977bd9..0f33110e02 100644 --- a/OpenRA.Mods.Common/ActorExts.cs +++ b/OpenRA.Mods.Common/ActorExts.cs @@ -59,20 +59,16 @@ namespace OpenRA.Mods.Common return stance == Stance.Enemy; } + /// + /// DEPRECATED: Write code that can handle FrozenActors correctly instead. + /// public static Target ResolveFrozenActorOrder(this Actor self, Order order, Color targetLine) { // Not targeting a frozen actor - if (order.ExtraData == 0) - return Target.FromOrder(self.World, order); + if (order.Target.Type != TargetType.FrozenActor) + return order.Target; - // Targeted an actor under the fog - var frozenLayer = self.Owner.PlayerActor.TraitOrDefault(); - if (frozenLayer == null) - return Target.Invalid; - - var frozen = frozenLayer.FromID(order.ExtraData); - if (frozen == null) - return Target.Invalid; + var frozen = order.Target.FrozenActor; // Flashes the frozen proxy self.SetTargetLine(frozen, targetLine, true); diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackBase.cs b/OpenRA.Mods.Common/Traits/Attack/AttackBase.cs index fc2d14b376..d524fa1880 100644 --- a/OpenRA.Mods.Common/Traits/Attack/AttackBase.cs +++ b/OpenRA.Mods.Common/Traits/Attack/AttackBase.cs @@ -159,28 +159,6 @@ namespace OpenRA.Mods.Common.Traits self.CancelActivity(); } - static Target TargetFromOrder(Actor self, Order order) - { - // Not targeting a frozen actor - if (order.ExtraData == 0) - return Target.FromOrder(self.World, order); - - // Targeted an actor under the fog - var frozenLayer = self.Owner.PlayerActor.TraitOrDefault(); - if (frozenLayer == null) - return Target.Invalid; - - var frozen = frozenLayer.FromID(order.ExtraData); - if (frozen == null) - return Target.Invalid; - - // Target is still alive - resolve the real order - if (frozen.Actor != null && frozen.Actor.IsInWorld) - return Target.FromActor(frozen.Actor); - - return Target.Invalid; - } - string IOrderVoice.VoicePhraseForOrder(Actor self, Order order) { return order.OrderString == attackOrderName || order.OrderString == forceAttackOrderName ? Info.Voice : null; diff --git a/OpenRA.Mods.Common/Traits/EngineerRepair.cs b/OpenRA.Mods.Common/Traits/EngineerRepair.cs index fa4f5e363f..0a97667e98 100644 --- a/OpenRA.Mods.Common/Traits/EngineerRepair.cs +++ b/OpenRA.Mods.Common/Traits/EngineerRepair.cs @@ -56,25 +56,13 @@ namespace OpenRA.Mods.Common.Traits static bool IsValidOrder(Actor self, Order order) { - // Not targeting a frozen actor - if (order.ExtraData == 0 && order.TargetActor == null) - return false; + if (order.Target.Type == TargetType.FrozenActor) + return order.Target.FrozenActor.DamageState > DamageState.Undamaged; - if (order.ExtraData != 0) - { - // Targeted an actor under the fog - var frozenLayer = self.Owner.PlayerActor.TraitOrDefault(); - if (frozenLayer == null) - return false; + if (order.Target.Type == TargetType.Actor) + return order.TargetActor.GetDamageState() > DamageState.Undamaged; - var frozen = frozenLayer.FromID(order.ExtraData); - if (frozen == null) - return false; - - return frozen.DamageState > DamageState.Undamaged; - } - - return order.TargetActor.GetDamageState() > DamageState.Undamaged; + return false; } public string VoicePhraseForOrder(Actor self, Order order) diff --git a/OpenRA.Mods.Common/Traits/ExternalCaptures.cs b/OpenRA.Mods.Common/Traits/ExternalCaptures.cs index 732750f03f..3e392b190f 100644 --- a/OpenRA.Mods.Common/Traits/ExternalCaptures.cs +++ b/OpenRA.Mods.Common/Traits/ExternalCaptures.cs @@ -71,27 +71,20 @@ namespace OpenRA.Mods.Common.Traits static bool IsValidOrder(Actor self, Order order) { - // Not targeting an actor - if (order.ExtraData == 0 && order.TargetActor == null) - return false; - - if (order.ExtraData != 0) + if (order.Target.Type == TargetType.FrozenActor) { - // Targeted an actor under the fog - var frozenLayer = self.Owner.PlayerActor.TraitOrDefault(); - if (frozenLayer == null) - return false; - - var frozen = frozenLayer.FromID(order.ExtraData); - if (frozen == null) - return false; - + var frozen = order.Target.FrozenActor; var ci = frozen.Info.TraitInfoOrDefault(); return ci != null && ci.CanBeTargetedBy(self, frozen.Owner); } - var c = order.TargetActor.TraitOrDefault(); - return c != null && !c.CaptureInProgress && c.Info.CanBeTargetedBy(self, order.TargetActor.Owner); + if (order.Target.Type == TargetType.Actor) + { + var c = order.TargetActor.TraitOrDefault(); + return c != null && !c.CaptureInProgress && c.Info.CanBeTargetedBy(self, order.TargetActor.Owner); + } + + return false; } public string VoicePhraseForOrder(Actor self, Order order)