diff --git a/OpenRA.Mods.RA/Activities/LayMines.cs b/OpenRA.Mods.RA/Activities/LayMines.cs index 9d4bba7315..339663004c 100644 --- a/OpenRA.Mods.RA/Activities/LayMines.cs +++ b/OpenRA.Mods.RA/Activities/LayMines.cs @@ -41,7 +41,7 @@ namespace OpenRA.Mods.RA.Activities return Util.SequenceActivities( new Enter(rearmTarget), //new Move(Util.CellContaining(rearmTarget.CenterLocation), rearmTarget), - new Rearm(), + new Rearm(self), new Repair(rearmTarget), this ); } diff --git a/OpenRA.Mods.RA/Activities/Rearm.cs b/OpenRA.Mods.RA/Activities/Rearm.cs index 63e803f3a4..4fd29033eb 100644 --- a/OpenRA.Mods.RA/Activities/Rearm.cs +++ b/OpenRA.Mods.RA/Activities/Rearm.cs @@ -17,9 +17,15 @@ namespace OpenRA.Mods.RA.Activities { public class Rearm : Activity { - int remainingTicks = ticksPerPip; - - const int ticksPerPip = 25 * 2; + + int ticksPerPip = 25 * 2; + int remainingTicks = 25 * 2; + + public Rearm(Actor actor) + { + ticksPerPip = actor.TraitOrDefault().ReloadTimePerAmmo(); + remainingTicks = ticksPerPip; + } public override Activity Tick(Actor self) { @@ -37,7 +43,7 @@ namespace OpenRA.Mods.RA.Activities if (hostBuilding != null) hostBuilding.Trait().PlayCustomAnim(hostBuilding, "active"); - remainingTicks = ticksPerPip; + remainingTicks = limitedAmmo.ReloadTimePerAmmo(); } return this; diff --git a/OpenRA.Mods.RA/Air/Aircraft.cs b/OpenRA.Mods.RA/Air/Aircraft.cs index be2a734b3d..9502290f06 100755 --- a/OpenRA.Mods.RA/Air/Aircraft.cs +++ b/OpenRA.Mods.RA/Air/Aircraft.cs @@ -181,7 +181,7 @@ namespace OpenRA.Mods.RA.Air { var name = a.Info.Name; if (Info.RearmBuildings.Contains(name)) - self.QueueActivity(new Rearm()); + self.QueueActivity(new Rearm(self)); if (Info.RepairBuildings.Contains(name)) self.QueueActivity(new Repair(a)); } diff --git a/OpenRA.Mods.RA/Air/HeliReturn.cs b/OpenRA.Mods.RA/Air/HeliReturn.cs index 3f85465b82..51880050f0 100755 --- a/OpenRA.Mods.RA/Air/HeliReturn.cs +++ b/OpenRA.Mods.RA/Air/HeliReturn.cs @@ -50,7 +50,7 @@ namespace OpenRA.Mods.RA.Air new HeliFly(dest.Trait().PxPosition + offset), new Turn(initialFacing), new HeliLand(false), - new Rearm(), + new Rearm(self), NextActivity); } } diff --git a/OpenRA.Mods.RA/Air/ReturnOnIdle.cs b/OpenRA.Mods.RA/Air/ReturnOnIdle.cs index 288b8e2795..d907889e1d 100755 --- a/OpenRA.Mods.RA/Air/ReturnOnIdle.cs +++ b/OpenRA.Mods.RA/Air/ReturnOnIdle.cs @@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA.Air if (airfield != null) { self.QueueActivity(new ReturnToBase(self, airfield)); - self.QueueActivity(new Rearm()); + self.QueueActivity(new Rearm(self)); } else { diff --git a/OpenRA.Mods.RA/LimitedAmmo.cs b/OpenRA.Mods.RA/LimitedAmmo.cs index 6ee07ddc42..2f4e56f9ba 100644 --- a/OpenRA.Mods.RA/LimitedAmmo.cs +++ b/OpenRA.Mods.RA/LimitedAmmo.cs @@ -16,7 +16,8 @@ namespace OpenRA.Mods.RA public class LimitedAmmoInfo : ITraitInfo { public readonly int Ammo = 0; - public readonly int PipCount = 0; + public readonly int PipCount = 0; + public readonly int ReloadTicks = 25 * 2; // This is measured in ticks public object Create(ActorInitializer init) { return new LimitedAmmo(this); } } @@ -24,12 +25,14 @@ namespace OpenRA.Mods.RA public class LimitedAmmo : INotifyAttack, IPips, ISync { [Sync] - int ammo; + int ammo; + int ticksPerAmmo; LimitedAmmoInfo Info; public LimitedAmmo(LimitedAmmoInfo info) { - ammo = info.Ammo; + ammo = info.Ammo; + ticksPerAmmo = info.ReloadTicks; Info = info; } @@ -40,7 +43,9 @@ namespace OpenRA.Mods.RA if (ammo >= Info.Ammo) return false; ++ammo; return true; - } + } + + public int ReloadTimePerAmmo() { return ticksPerAmmo; } public void Attacking(Actor self, Target target) { --ammo; } diff --git a/OpenRA.Mods.RA/Repairable.cs b/OpenRA.Mods.RA/Repairable.cs index 730e15b69c..8b2b37b635 100644 --- a/OpenRA.Mods.RA/Repairable.cs +++ b/OpenRA.Mods.RA/Repairable.cs @@ -80,7 +80,7 @@ namespace OpenRA.Mods.RA self.CancelActivity(); self.QueueActivity(new MoveAdjacentTo(order.TargetActor)); self.QueueActivity(mobile.MoveTo(Traits.Util.CellContaining(order.TargetActor.CenterLocation), order.TargetActor)); - self.QueueActivity(new Rearm()); + self.QueueActivity(new Rearm(self)); self.QueueActivity(new Repair(order.TargetActor)); if (rp != null) diff --git a/mods/ra/rules/aircraft.yaml b/mods/ra/rules/aircraft.yaml index 945d52abe9..5663bed0ef 100644 --- a/mods/ra/rules/aircraft.yaml +++ b/mods/ra/rules/aircraft.yaml @@ -164,6 +164,7 @@ YAK: LimitedAmmo: Ammo: 18 PipCount: 6 + ReloadTicks: 11 IronCurtainable: ReturnOnIdle: WithMuzzleFlash: @@ -300,6 +301,7 @@ HIND: LimitedAmmo: Ammo: 24 PipCount: 6 + ReloadTicks: 8 IronCurtainable: Selectable: Bounds: 38,32,0,0