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