From 356b7dae7a56f4d93d870fc2fef0a91016d6b6b3 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Sun, 10 Jan 2010 19:25:16 +1300 Subject: [PATCH] more porting --- OpenRa.Game/Shroud.cs | 1 + OpenRa.Game/Traits/AutoHeal.cs | 13 +++---------- OpenRa.Game/Traits/AutoTarget.cs | 10 +--------- OpenRa.Game/Traits/Util.cs | 8 ++++++++ 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/OpenRa.Game/Shroud.cs b/OpenRa.Game/Shroud.cs index 18dab2724d..a6cc09b4d2 100644 --- a/OpenRa.Game/Shroud.cs +++ b/OpenRa.Game/Shroud.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using IjwFramework.Types; using OpenRa.Game.Graphics; +using OpenRa.Game.Traits; namespace OpenRa.Game { diff --git a/OpenRa.Game/Traits/AutoHeal.cs b/OpenRa.Game/Traits/AutoHeal.cs index a833cc8c25..66cc04ba6a 100644 --- a/OpenRa.Game/Traits/AutoHeal.cs +++ b/OpenRa.Game/Traits/AutoHeal.cs @@ -17,23 +17,16 @@ namespace OpenRa.Game.Traits self.CancelActivity(); } - float GetMaximumRange(Actor self) - { - return new[] { self.LegacyInfo.Primary, self.LegacyInfo.Secondary } - .Where(w => w != null) - .Max(w => Rules.WeaponInfo[w].Range); - } - bool NeedsNewTarget(Actor self) { var attack = self.traits.WithInterface().First(); - var range = GetMaximumRange(self); + var range = Util.GetMaximumRange(self); if (attack.target == null) return true; // he's dead. if ((attack.target.Location - self.Location).LengthSquared > range * range + 2) return true; // wandered off faster than we could follow - if (attack.target.Health == attack.target.LegacyInfo.Strength) + if (attack.target.Health == attack.target.Info.Traits.WithInterface().First().HP) return true; // fully healed return false; @@ -42,7 +35,7 @@ namespace OpenRa.Game.Traits public void Tick(Actor self) { var attack = self.traits.WithInterface().First(); - var range = GetMaximumRange(self); + var range = Util.GetMaximumRange(self); if (NeedsNewTarget(self)) AttackTarget(self, ChooseTarget(self, range)); diff --git a/OpenRa.Game/Traits/AutoTarget.cs b/OpenRa.Game/Traits/AutoTarget.cs index 29d588a8f3..33fc5002c5 100644 --- a/OpenRa.Game/Traits/AutoTarget.cs +++ b/OpenRa.Game/Traits/AutoTarget.cs @@ -13,20 +13,12 @@ namespace OpenRa.Game.Traits attack.ResolveOrder(self, new Order("Attack", self, target, int2.Zero, null)); } - float GetMaximumRange(Actor self) - { - var info = self.Info.Traits.WithInterface().First(); - return new[] { info.PrimaryWeapon, info.SecondaryWeapon } - .Where(w => w != null) - .Max(w => Rules.WeaponInfo[w].Range); - } - public void Tick(Actor self) { if (!self.IsIdle) return; var attack = self.traits.WithInterface().First(); - var range = GetMaximumRange(self); + var range = Util.GetMaximumRange(self); if (attack.target == null || (attack.target.Location - self.Location).LengthSquared > range * range + 2) diff --git a/OpenRa.Game/Traits/Util.cs b/OpenRa.Game/Traits/Util.cs index fda0a447a1..bef22a08b9 100755 --- a/OpenRa.Game/Traits/Util.cs +++ b/OpenRa.Game/Traits/Util.cs @@ -142,5 +142,13 @@ namespace OpenRa.Game.Traits return acts.Reverse().Aggregate( (next, a) => { a.NextActivity = next; return a; }); } + + public static float GetMaximumRange(Actor self) + { + var info = self.Info.Traits.WithInterface().First(); + return new[] { info.PrimaryWeapon, info.SecondaryWeapon } + .Where(w => w != null) + .Max(w => Rules.WeaponInfo[w].Range); + } } }