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;
            }
        }