Merge pull request #5345 from Squiggles211/ammo_reload_timing

Fixes inconsistency in reload times for Cnc Aircraft
This commit is contained in:
Paul Chote
2014-05-20 12:04:11 +12:00
3 changed files with 18 additions and 1 deletions

View File

@@ -61,6 +61,7 @@ Also thanks to:
* Pavlos Touboulidis (pav) * Pavlos Touboulidis (pav)
* Pizzaoverhead * Pizzaoverhead
* Psydev * Psydev
* Raymond Bedrossian (Squiggles211)
* Raymond Martineau (mart0258) * Raymond Martineau (mart0258)
* Reaperrr * Reaperrr
* Riderr3 * Riderr3

View File

@@ -58,6 +58,8 @@ namespace OpenRA.Mods.RA
public void Attacking(Actor self, Target target, Armament a, Barrel barrel) { TakeAmmo(); } public void Attacking(Actor self, Target target, Armament a, Barrel barrel) { TakeAmmo(); }
public int GetAmmoCount() { return ammo; }
public IEnumerable<PipType> GetPips(Actor self) public IEnumerable<PipType> GetPips(Actor self)
{ {
var pips = Info.PipCount != 0 ? Info.PipCount : Info.Ammo; var pips = Info.PipCount != 0 ? Info.PipCount : Info.Ammo;

View File

@@ -20,6 +20,8 @@ namespace OpenRA.Mods.RA
public readonly int Count = 0; public readonly int Count = 0;
[Desc("How long it takes to do so.")] [Desc("How long it takes to do so.")]
public readonly int Period = 50; public readonly int Period = 50;
[Desc("Whether or not reload counter should be reset when ammo has been fired.")]
public readonly bool ResetOnFire = false;
public object Create(ActorInitializer init) { return new Reloads(init.self, this); } public object Create(ActorInitializer init) { return new Reloads(init.self, this); }
} }
@@ -29,21 +31,33 @@ namespace OpenRA.Mods.RA
[Sync] int remainingTicks; [Sync] int remainingTicks;
ReloadsInfo Info; ReloadsInfo Info;
LimitedAmmo la; LimitedAmmo la;
int previousAmmo;
public Reloads(Actor self, ReloadsInfo info) public Reloads(Actor self, ReloadsInfo info)
{ {
Info = info; Info = info;
remainingTicks = info.Period; remainingTicks = info.Period;
la = self.Trait<LimitedAmmo>(); la = self.Trait<LimitedAmmo>();
previousAmmo = la.GetAmmoCount();
} }
public void Tick(Actor self) public void Tick(Actor self)
{ {
if (--remainingTicks == 0) if (!la.FullAmmo() && --remainingTicks == 0)
{ {
remainingTicks = Info.Period; remainingTicks = Info.Period;
for (var i = 0; i < Info.Count; i++) for (var i = 0; i < Info.Count; i++)
la.GiveAmmo(); la.GiveAmmo();
previousAmmo = la.GetAmmoCount();
}
// Resets the tick counter if ammo was fired.
if (Info.ResetOnFire && la.GetAmmoCount() < previousAmmo)
{
remainingTicks = Info.Period;
previousAmmo = la.GetAmmoCount();
} }
} }
} }