private void UpdateTraverse() { if (UseRealTraverseMode) { var now = DateTime.Now; var deltaTime = now - _previousUpdateTime; var turretYaw = GunTraverseHelper.RotateAngle( this.TurretYaw, _destinationTurretYaw, deltaTime.TotalSeconds * this.TurretTraverseSpeed, this.TurretYawLimits == null ? 180.0 : this.TurretYawLimits.Right, this.TurretYawLimits == null ? 180.0 : this.TurretYawLimits.Left); double elevation, depression; if (this.ElevationLimits == null) { elevation = 0; depression = 0; } else { elevation = this.ElevationLimits.GetValue(turretYaw); depression = this.DepressionLimits.GetValue(turretYaw); } var gunPitch = GunTraverseHelper.RotateAngle( this.GunPitch + 180, _destinationGunPitch + 180, deltaTime.TotalSeconds * this.GunTraverseSpeed, elevation, depression) - 180; this.ClampRotation(ref turretYaw, ref gunPitch); _internalSettingTraverse = true; this.TurretYaw = turretYaw; this.GunPitch = gunPitch; _internalSettingTraverse = false; _previousUpdateTime = now; } else { _internalSettingTraverse = true; this.GunPitch = _destinationGunPitch; this.TurretYaw = _destinationTurretYaw; _internalSettingTraverse = false; } }