From e94435ceaf21fc90a4f03422691c322168c59685 Mon Sep 17 00:00:00 2001 From: Christopher Grant Date: Sun, 12 Apr 2015 16:30:10 -0400 Subject: [PATCH] Fixed turrets not firing at fast moving targets. --- OpenRA.Mods.Common/Traits/Turreted.cs | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Turreted.cs b/OpenRA.Mods.Common/Traits/Turreted.cs index 1035cea8e5..77cac62ce2 100644 --- a/OpenRA.Mods.Common/Traits/Turreted.cs +++ b/OpenRA.Mods.Common/Traits/Turreted.cs @@ -73,16 +73,28 @@ namespace OpenRA.Mods.Common.Traits 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) - realignTick++; - else if (info.RealignDelay > -1) - DesiredFacing = null; + if (!attack.IsAttacking) + { + if (realignTick < info.RealignDelay) + realignTick++; + else if (info.RealignDelay > -1) + DesiredFacing = null; + + MoveTurret(); + } } else + { realignTick = 0; + MoveTurret(); + } + } + void MoveTurret() + { var df = DesiredFacing ?? (facing != null ? facing.Facing : TurretFacing); TurretFacing = Util.TickFacing(TurretFacing, df, info.ROT); } @@ -90,7 +102,8 @@ namespace OpenRA.Mods.Common.Traits public bool FaceTarget(Actor self, Target target) { DesiredFacing = Util.GetFacing(target.CenterPosition - self.CenterPosition, TurretFacing); - return TurretFacing == DesiredFacing; + MoveTurret(); + return TurretFacing == DesiredFacing.Value; } // Turret offset in world-space