Merge pull request #7940 from Unit158/AttackTurreted-fix

Fixed turrets not firing at fast moving targets.
This commit is contained in:
Matthias Mailänder
2015-06-07 19:05:17 +02:00

View File

@@ -73,16 +73,28 @@ namespace OpenRA.Mods.Common.Traits
public virtual void Tick(Actor self) public virtual void Tick(Actor self)
{ {
if (attack != null && !attack.IsAttacking) // NOTE: FaceTarget is called in AttackTurreted.CanAttack if the turret has a target.
if (attack != null)
{ {
if (realignTick < info.RealignDelay) if (!attack.IsAttacking)
realignTick++; {
else if (info.RealignDelay > -1) if (realignTick < info.RealignDelay)
DesiredFacing = null; realignTick++;
else if (info.RealignDelay > -1)
DesiredFacing = null;
MoveTurret();
}
} }
else else
{
realignTick = 0; realignTick = 0;
MoveTurret();
}
}
void MoveTurret()
{
var df = DesiredFacing ?? (facing != null ? facing.Facing : TurretFacing); var df = DesiredFacing ?? (facing != null ? facing.Facing : TurretFacing);
TurretFacing = Util.TickFacing(TurretFacing, df, info.ROT); TurretFacing = Util.TickFacing(TurretFacing, df, info.ROT);
} }
@@ -90,7 +102,8 @@ namespace OpenRA.Mods.Common.Traits
public bool FaceTarget(Actor self, Target target) public bool FaceTarget(Actor self, Target target)
{ {
DesiredFacing = Util.GetFacing(target.CenterPosition - self.CenterPosition, TurretFacing); DesiredFacing = Util.GetFacing(target.CenterPosition - self.CenterPosition, TurretFacing);
return TurretFacing == DesiredFacing; MoveTurret();
return TurretFacing == DesiredFacing.Value;
} }
// Turret offset in world-space // Turret offset in world-space