diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index 0d210d7912..bae8b5e563 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -1,4 +1,4 @@ - + Debug AnyCPU @@ -184,6 +184,7 @@ + @@ -266,4 +267,4 @@ --> - \ No newline at end of file + 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); + } + } +} diff --git a/units.ini b/units.ini index dd3807c0bc..ac5535c250 100755 --- a/units.ini +++ b/units.ini @@ -165,13 +165,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] @@ -185,14 +185,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