private void StartShootDelaying()
 {
     m_status = MyLargeShipGunStatus.MyWeaponStatus_ShootDelaying;
     m_shootStatusChanged_ms = MyMinerGame.TotalGamePlayTimeInMilliseconds;
     SetShootInterval(ref m_shootDelayInterval_ms, ref m_shootDelayIntervalConst_ms);
 }
        private void UpdateAiWeapon()
        {
            if ((MyMinerGame.TotalGamePlayTimeInMilliseconds - m_checkTargetInterval_ms) > 1500)
            {
                CheckNearTargets();

                m_checkTargetInterval_ms = MyMinerGame.TotalGamePlayTimeInMilliseconds;
            }

            if ((MyMinerGame.TotalGamePlayTimeInMilliseconds - m_predictionInterval_ms) > m_predictionIntervalConst_ms && Target != null)
            {
                UpdatePrediction(MyMinerGame.TotalGamePlayTimeInMilliseconds);

                m_predictionInterval_ms = MyMinerGame.TotalGamePlayTimeInMilliseconds;
            }


            float targetDistance = GetTargetDistance();

            if (targetDistance < m_barrel.SearchingDistance)
            {
                bool isAimed = RotationAndElevation() && Target != null;

                if (isAimed && !m_onlyPotentialTargetDetected)
                {
                    UpdateShootStatus();

                    if (m_status == MyLargeShipGunStatus.MyWeaponStatus_Shoothing)
                    {
                        // Dummy weapons can't shoot
                        if (!IsDummy)
                        {
                            m_canStopShooting = m_barrel.StartShooting();
                            LastShotId = m_barrel.LastShotId;
                            if (MyMultiplayerGameplay.IsRunning)
                            {
                                MyMultiplayerGameplay.Static.Shoot(this.Parent, this.GetBarell().WorldMatrix, MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Autocanon, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_Basic, GetTarget(), LastShotId);
                            }
                        }
                    }
                    else
                    {
                        if (m_canStopShooting || (m_shootingSound.HasValue && UnifiedWeaponCueGet(m_shootingSound.Value).HasValue && UnifiedWeaponCueGet(m_shootingSound.Value).Value.IsPlaying))
                        {
                            m_barrel.StopShooting();
                            m_canStopShooting = false;
                        }
                    }
                }
                else
                {
                    m_status = MyLargeShipGunStatus.MyWeaponStatus_Searching;
                    if (m_canStopShooting || (m_shootingSound.HasValue && UnifiedWeaponCueGet(m_shootingSound.Value).HasValue && UnifiedWeaponCueGet(m_shootingSound.Value).Value.IsPlaying))
                    {
                        m_barrel.StopShooting();
                        m_canStopShooting = false;
                    }
                }
            }
            else
            {
                m_status = MyLargeShipGunStatus.MyWeaponStatus_Deactivated;
                StopAimingSound();
                if (m_canStopShooting || (m_shootingSound.HasValue && UnifiedWeaponCueGet(m_shootingSound.Value).HasValue && UnifiedWeaponCueGet(m_shootingSound.Value).Value.IsPlaying))
                {
                    m_barrel.StopShooting();
                    m_canStopShooting = false;
                }

                if (MyCamera.GetDistanceWithFOV(Vector3.Distance(MyCamera.Position, GetPosition())) <= MyLodConstants.MAX_DISTANCE_FOR_RANDOM_ROTATING_LARGESHIP_GUNS)
                {
                    RandomMovement();
                }
            }
        }
        private void UpdateControlledWeapon()
        {
            MySoundCue? movingSound = UnifiedWeaponCueGet(MySoundCuesEnum.WepLargeShipAutocannonRotate);

            if (HasElevationOrRotationChanged())
            {
                if (movingSound == null || movingSound.Value.IsPlaying == false)
                {
                    UnifiedWeaponCueSet(MySoundCuesEnum.WepLargeShipAutocannonRotate,
                        MyAudio.AddCue2dOr3d(PrefabParent, Audio.MySoundCuesEnum.WepLargeShipAutocannonRotate, GetPosition(), WorldMatrix.Forward, WorldMatrix.Up, Vector3.Zero));
                    //MyAudio.AddCue3D(MySoundCuesEnum.WepLargeShipAutocannonRotate, GetPosition(), WorldMatrix.Forward, WorldMatrix.Up, Vector3.Zero));
                }
                m_stopShootingTime = 0;
            }
            else
            {
                if (m_stopShootingTime <= 0)
                {
                    m_stopShootingTime = MyMinerGame.TotalGamePlayTimeInMilliseconds;
                }
                else
                {
                    if (m_stopShootingTime + MyLargeShipWeaponsConstants.AIMING_SOUND_DELAY < MyMinerGame.TotalGamePlayTimeInMilliseconds)
                    {
                        StopAimingSound();
                    }
                }
            }

            m_rotationLast = m_rotation;
            m_elevationLast = m_elevation;

            RotateModels();


            if (m_playerFire/* && m_status != MyLargeShipGunStatus.MyWeaponStatus_Shoothing*/)
            {
                var old = m_barrel.IsDummy;
                this.WeaponOwner = MySession.PlayerShip;
                m_barrel.IsDummy = false;
                m_barrel.StartShooting();
                m_barrel.IsDummy = old;
                this.WeaponOwner = null;
                m_status = MyLargeShipGunStatus.MyWeaponStatus_Shoothing;

                LastShotId = m_barrel.LastShotId;
                if (MyMultiplayerGameplay.IsRunning)
                {
                    MyMultiplayerGameplay.Static.Shoot(this.Parent, this.GetBarell().WorldMatrix, MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Autocanon, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_Basic, null, LastShotId);
                }
            }

            if (!m_playerFire && m_status == MyLargeShipGunStatus.MyWeaponStatus_Shoothing)
            {
                m_barrel.StopShooting();
                m_status = MyLargeShipGunStatus.MyWeaponStatus_Searching;
            }

            //m_playerFire = false;
        }
        public MyLargeShipGunBase()
            :base()
        {
            m_status = MyLargeShipGunStatus.MyWeaponStatus_Deactivated;
            m_predictionInterval_ms = 0;
            m_predictionIntervalConst_ms = 250;
            m_checkTargetInterval_ms = 0;
            m_checkTargetIntervalConst_ms = 150;
            m_randomStandbyChange_ms = MyMinerGame.TotalGamePlayTimeInMilliseconds;
            m_randomStandbyChangeConst_ms = 4000;
            m_randomStandbyRotation = 0.0f;
            m_randomStandbyElevation = 0.0f;
            m_rotation = 0.0f;
            m_elevation = 0.0f;
            m_rotationSpeed = MyLargeShipWeaponsConstants.ROTATION_SPEED;
            m_elevationSpeed = MyLargeShipWeaponsConstants.ELEVATION_SPEED;
            m_rotationInterval_ms = 0;
            m_elevationInterval_ms = 0;
            m_predictedTarget = Vector3.Zero;
            m_prediction = null;
            m_shootDelayIntervalConst_ms = 200;
            m_shootIntervalConst_ms = 1200;
            m_shootIntervalVarianceConst_ms = 500;
            m_shootStatusChanged_ms = 0;
            m_onlyPotentialTargetDetected = false;

            //NeedsUpdate = true;
        }