Support for changing infantry barrel offsets when prone. Fixes #935.

This commit is contained in:
Paul Chote
2011-06-26 01:36:26 +12:00
parent 9b8e927c33
commit 98f4db750b

View File

@@ -19,6 +19,7 @@ namespace OpenRA.Mods.RA
public readonly int ProneTime = 100; /* ticks, =4s */
public readonly float ProneDamage = .5f;
public readonly decimal ProneSpeed = .5m;
public readonly int[] BarrelOffset = null;
public object Create(ActorInitializer init) { return new TakeCover(this); }
}
@@ -39,13 +40,38 @@ namespace OpenRA.Mods.RA
public void Damaged(Actor self, AttackInfo e)
{
if (e.Damage > 0 && (e.Warhead == null || !e.Warhead.PreventProne)) /* Don't go prone when healed */
{
if (!IsProne)
ApplyBarrelOffset(self, true);
remainingProneTime = Info.ProneTime;
}
}
public void Tick(Actor self)
{
if (IsProne)
remainingProneTime--;
{
if (--remainingProneTime == 0)
ApplyBarrelOffset(self, false);
}
}
public void ApplyBarrelOffset(Actor self, bool isProne)
{
if (Info.BarrelOffset == null)
return;
var ab = self.TraitOrDefault<AttackBase>();
if (ab == null)
return;
var sign = isProne ? 1 : -1;
foreach (var w in ab.Weapons)
foreach (var b in w.Barrels)
{
b.TurretSpaceOffset += sign*new int2(Info.BarrelOffset[0], Info.BarrelOffset[1]);
b.ScreenSpaceOffset += sign*new int2(Info.BarrelOffset[2], Info.BarrelOffset[3]);
}
}
public float GetDamageModifier(Actor attacker, WarheadInfo warhead )