From 9fcc739cd5fcaa1d04bce6cf233f863b7c8b0e64 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Sat, 31 Jul 2010 18:04:02 +1200 Subject: [PATCH] more... Combat.GetSecondaryWeapon() dies, etc --- OpenRA.Mods.RA/AttackBase.cs | 10 ++++++---- OpenRA.Mods.RA/AttackTurreted.cs | 4 ++-- OpenRA.Mods.RA/Combat.cs | 11 ----------- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/OpenRA.Mods.RA/AttackBase.cs b/OpenRA.Mods.RA/AttackBase.cs index 139e42c6b8..36a359f7b4 100644 --- a/OpenRA.Mods.RA/AttackBase.cs +++ b/OpenRA.Mods.RA/AttackBase.cs @@ -97,7 +97,7 @@ namespace OpenRA.Mods.RA Weapons.Add(new Weapon(info.PrimaryWeapon, info.PrimaryOffset, info.PrimaryLocalOffset)); - if (self.GetSecondaryWeapon() != null) + if (info.SecondaryWeapon != null) Weapons.Add(new Weapon(info.SecondaryWeapon, info.SecondaryOffset ?? info.PrimaryOffset, info.SecondaryLocalOffset)); } @@ -302,12 +302,12 @@ namespace OpenRA.Mods.RA protected virtual void QueueAttack(Actor self, Order order) { - /* todo: choose the appropriate weapon, when only one works against this target */ - var weapon = self.GetPrimaryWeapon() ?? self.GetSecondaryWeapon(); + var weapon = ChooseWeaponForTarget(Target.FromOrder(order)); + self.QueueActivity( new Activities.Attack( Target.FromOrder(order), - Math.Max(0, (int)weapon.Range))); + Math.Max(0, (int)weapon.Info.Range))); } /* temp hack */ @@ -316,5 +316,7 @@ namespace OpenRA.Mods.RA public bool HasAnyValidWeapons(Target t) { return Weapons.Any(w => w.IsValidAgainst(t)); } public float GetMaximumRange() { return Weapons.Max(w => w.Info.Range); } + + public Weapon ChooseWeaponForTarget(Target t) { return Weapons.First(w => w.IsValidAgainst(t)); } } } diff --git a/OpenRA.Mods.RA/AttackTurreted.cs b/OpenRA.Mods.RA/AttackTurreted.cs index f3726096d6..7eeea093f7 100644 --- a/OpenRA.Mods.RA/AttackTurreted.cs +++ b/OpenRA.Mods.RA/AttackTurreted.cs @@ -50,13 +50,13 @@ namespace OpenRA.Mods.RA const int RangeTolerance = 1; /* how far inside our maximum range we should try to sit */ /* todo: choose the appropriate weapon, when only one works against this target */ - var weapon = order.Subject.GetPrimaryWeapon() ?? order.Subject.GetSecondaryWeapon(); + var weapon = ChooseWeaponForTarget(Target.FromOrder(order)); target = Target.FromOrder(order); if (self.traits.Contains()) self.QueueActivity( new Follow( target, - Math.Max( 0, (int)weapon.Range - RangeTolerance ) ) ); + Math.Max( 0, (int)weapon.Info.Range - RangeTolerance ) ) ); } bool buildComplete = false; diff --git a/OpenRA.Mods.RA/Combat.cs b/OpenRA.Mods.RA/Combat.cs index c810e9d3b8..5776f73b6b 100755 --- a/OpenRA.Mods.RA/Combat.cs +++ b/OpenRA.Mods.RA/Combat.cs @@ -187,17 +187,6 @@ namespace OpenRA.Mods.RA return Rules.Weapons[weapon.ToLowerInvariant()]; } - public static WeaponInfo GetSecondaryWeapon(this Actor self) - { - var info = self.Info.Traits.GetOrDefault(); - if (info == null) return null; - - var weapon = info.SecondaryWeapon; - if (weapon == null) return null; - - return Rules.Weapons[weapon.ToLowerInvariant()]; - } - static float2 GetRecoil(Actor self, float recoil) { var abInfo = self.Info.Traits.GetOrDefault();