From 482edb086a9ced9eb7717f950942d22634ea2eda Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Mon, 28 Dec 2009 18:14:40 +1300 Subject: [PATCH 1/2] limited ammo support --- OpenRa.Game/OpenRa.Game.csproj | 1 + OpenRa.Game/Traits/AttackBase.cs | 5 +++++ OpenRa.Game/Traits/LimitedAmmo.cs | 29 +++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 OpenRa.Game/Traits/LimitedAmmo.cs diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index 686f62a19d..1b819034ed 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -181,6 +181,7 @@ + diff --git a/OpenRa.Game/Traits/AttackBase.cs b/OpenRa.Game/Traits/AttackBase.cs index 2253655437..041b9a8f74 100644 --- a/OpenRa.Game/Traits/AttackBase.cs +++ b/OpenRa.Game/Traits/AttackBase.cs @@ -91,6 +91,11 @@ namespace OpenRa.Game.Traits bool CheckFire(Actor self, Unit unit, string weaponName, ref int fireDelay, int[] offset, ref int burst) { if (fireDelay > 0) return false; + + var limitedAmmo = self.traits.GetOrDefault(); + if (!limitedAmmo.HasAmmo()) + return false; + var weapon = Rules.WeaponInfo[weaponName]; if (weapon.Range * weapon.Range < (target.Location - self.Location).LengthSquared) return false; diff --git a/OpenRa.Game/Traits/LimitedAmmo.cs b/OpenRa.Game/Traits/LimitedAmmo.cs new file mode 100644 index 0000000000..c032032376 --- /dev/null +++ b/OpenRa.Game/Traits/LimitedAmmo.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace OpenRa.Game.Traits +{ + class LimitedAmmo : INotifyAttack, IPips + { + int ammo; + Actor self; + + public LimitedAmmo(Actor self) + { + ammo = self.Info.Ammo; + this.self = self; + } + + public bool HasAmmo() { return ammo > 0; } + + public void Attacking(Actor self) { --ammo; } + + public IEnumerable GetPips() + { + return Graphics.Util.MakeArray(self.Info.Ammo, + i => ammo > i ? PipType.Green : PipType.Transparent); + } + } +} From fd49720912b372f5bc2698e825ef4f7e7c7e47be Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Mon, 28 Dec 2009 18:18:19 +1300 Subject: [PATCH 2/2] added limited-ammo support to air units --- units.ini | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/units.ini b/units.ini index 5869be9b95..1bcdf14a9d 100755 --- a/units.ini +++ b/units.ini @@ -157,13 +157,13 @@ HIND [MIG] Description=Mig Attack Plane BuiltAt=afld -Traits=Unit, Plane, RenderUnit, WithShadow +Traits=Unit, Plane, RenderUnit, WithShadow, LimitedAmmo InitialFacing=192 LongDesc=Fast Ground-Attack Plane.\n Strong vs Buildings\n Weak vs Infantry, Light Vehicles [YAK] Description=Yak Attack Plane BuiltAt=afld -Traits=Unit, Plane, RenderUnit, WithShadow +Traits=Unit, Plane, RenderUnit, WithShadow, LimitedAmmo InitialFacing=192 LongDesc=Anti-Tanks & Anti-Infantry Plane.\n Strong vs Infantry, Tanks\n Weak vs Buildings [TRAN] @@ -177,14 +177,14 @@ LongDesc=Fast Infantry Transport Helicopter.\n Unarmed [HELI] Description=Longbow BuiltAt=hpad -Traits=Unit, Helicopter, RenderUnitRotor, WithShadow +Traits=Unit, Helicopter, RenderUnitRotor, WithShadow, LimitedAmmo PrimaryOffset=0,0,0,-2 InitialFacing=20 LongDesc=Helicopter Gunship with AG Missiles.\n Strong vs Buildings, Tanks\n Weak vs Infantry [HIND] Description=Hind BuiltAt=hpad -Traits=Unit, Helicopter, RenderUnitRotor, WithShadow +Traits=Unit, Helicopter, RenderUnitRotor, WithShadow, LimitedAmmo InitialFacing=20 LongDesc=Helicopter Gunship with Chainguns.\n Strong vs Infantry, Light Vehicles.\n Weak vs Tanks