Ejemplo n.º 1
0
 /// <summary>
 /// Update the missile
 /// </summary>
 public override void Update(GameTime gameTime)
 {
     // If it hit the top, then re-load it
     if (Position.Y > 100 && State == MissileStates.Flying)
     {
         Hide();
         Speed = 0;
         State = MissileStates.Loaded;
         //Scene.ShowScene("gameover");
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Load the missile sprite
        /// </summary>
        public override void Load()
        {
            Costume HitCostume = AddCostume("MissileHitBarrier");

            HitCostume.YCenter = VerticalAlignments.Center;
            SetCostume("Missile");
            Costume.YCenter = VerticalAlignments.Center;
            Scale           = 1f;
            State           = MissileStates.Loaded;
            Hide();
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Update the missile
 /// </summary>
 public override void Update(GameTime gameTime)
 {
     // If it hit the bottom, then re-load it
     if (Position.Y < -100 && State == MissileStates.Flying)
     {
         Hide();
         Speed = 0;
         State = MissileStates.Destroy;
         //Scene.ShowScene("gameover");
     }
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Update the missile
 /// </summary>
 public override void Update(GameTime gameTime)
 {
     // If it hit the bottom, then re-load it
     if (Position.Y < -100 && State == MissileStates.Flying)
     {
         Hide();
         Speed = 0;
         State = MissileStates.Destroy;
         //Scene.ShowScene("gameover");
     }
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Load the missile sprite
 /// </summary>
 public override void Load()
 {
     Costume HitCostume = AddCostume("MissileHitBarrier");
     HitCostume.YCenter = VerticalAlignments.Center;
     AddCostume("AlienBullets/BoltRight");
     AddCostume("AlienBullets/AlienMissileHitBarrier");
     SetCostume("AlienBullets/BoltLeft");
     Costume.YCenter = VerticalAlignments.Center;
     Scale = 0.5f;
     State = MissileStates.Loaded;
     Hide();
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Fire the missile!
 /// </summary>
 /// <param name="position">Where should it start from</param>
 /// <param name="rotation">How should it be rotated</param>
 public void Fire(Vector2 position, float rotation)
 {
     if (State == MissileStates.Loaded)
     {
         State = MissileStates.Flying;
         Show();
         Position  = position;
         Rotation  = rotation;
         Direction = 270 + rotation;
         Speed     = 2f;
         PlaySound("shoot");
     }
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Fire the missile!
 /// </summary>
 /// <param name="position">Where should it start from</param>
 /// <param name="rotation">How should it be rotated</param>
 public void Fire(Vector2 position, float rotation)
 {
     if (State == MissileStates.Loaded)
     {
         State = MissileStates.Flying;
         Show();
         Position = position;
         Rotation = rotation;
         Direction = 270 + rotation;
         Speed = 2f;
         PlaySound("shoot");
     }
 }
Ejemplo n.º 8
0
        /// <summary>
        /// Load the missile sprite
        /// </summary>
        public override void Load()
        {
            Costume HitCostume = AddCostume("MissileHitBarrier");

            HitCostume.YCenter = VerticalAlignments.Center;
            AddCostume("AlienBullets/BoltRight");
            AddCostume("AlienBullets/AlienMissileHitBarrier");
            SetCostume("AlienBullets/BoltLeft");
            Costume.YCenter = VerticalAlignments.Center;
            Scale           = 0.5f;
            State           = MissileStates.Loaded;
            Hide();
        }
Ejemplo n.º 9
0
		void StartCruise()
		{
			MissileState = MissileStates.Cruise;

			if(thrustAudio)	
			{
				audioSource.clip = thrustAudio;
			}

			if(spoolEngine)
			{
				currentThrust = 0;
			}
			else
			{
				currentThrust = cruiseThrust;	
			}

			foreach(var emitter in pEmitters)
			{
				emitter.emit = true;
			}

			foreach(var emitter in gaplessEmitters)
			{
				emitter.emit = true;
			}

			if(hasRCS)
			{
				forwardRCS.emit = false;
				audioSource.Stop();
			}
		}
Ejemplo n.º 10
0
		IEnumerator MissileRoutine()
		{
			MissileState = MissileStates.Drop;
			StartCoroutine(AnimRoutine());
			yield return new WaitForSeconds(dropTime);
			yield return StartCoroutine(BoostRoutine());
			yield return new WaitForSeconds(cruiseDelay);
			yield return StartCoroutine(CruiseRoutine());
		}
Ejemplo n.º 11
0
 public void HitBarrier(BarrierSprite Barrier)
 {
     SetCostume("AlienBullets/AlienMissileHitBarrier");
     Barrier.Stamp(this, StampMethods.Cutout);
     State = MissileStates.Destroy;
 }
Ejemplo n.º 12
0
        public override void OnFixedUpdate()
        {
            debugString = "";
            if(hasFired && !hasExploded && part!=null)
            {
                part.rb.isKinematic = false;
                AntiSpin();

                //deploy stuff
                if(deployAnimationName != "" && timeIndex > deployTime && !deployed)
                {
                    deployed = true;
                    deployedTime = Time.time;
                }

                if(deployed)
                {
                    foreach(var anim in deployStates)
                    {
                        anim.speed = 1;
                        part.maximum_drag = deployedDrag;
                        part.minimum_drag = deployedDrag;
                    }

                }

                //simpleDrag
                if(useSimpleDrag)
                {
                    SimpleDrag();
                }

                //flybyaudio
                float mCamDistanceSqr = (FlightCamera.fetch.mainCamera.transform.position-transform.position).sqrMagnitude;
                float mCamRelVSqr = (float)(FlightGlobals.ActiveVessel.srf_velocity-vessel.srf_velocity).sqrMagnitude;
                if(!hasPlayedFlyby
                   && FlightGlobals.ActiveVessel != vessel
                   && FlightGlobals.ActiveVessel != sourceVessel
                   && mCamDistanceSqr < 400*400 && mCamRelVSqr > 300*300
                   && mCamRelVSqr < 800*800
                    && Vector3.Angle(vessel.srf_velocity, FlightGlobals.ActiveVessel.transform.position-transform.position)<60)
                {
                    sfAudioSource.PlayOneShot (GameDatabase.Instance.GetAudioClip("BDArmory/Sounds/missileFlyby"));
                    hasPlayedFlyby = true;
                }

                if(vessel.isActiveVessel)
                {
                    audioSource.dopplerLevel = 0;
                }
                else
                {
                    audioSource.dopplerLevel = 1f;
                }

                if(BDArmorySettings.ALLOW_LEGACY_TARGETING && legacyTargetVessel)
                {
                    UpdateLegacyTarget();
                }

                if(targetingMode == TargetingModes.Heat)
                {
                    UpdateHeatTarget();
                }
                else if(targetingMode == TargetingModes.Radar)
                {
                    UpdateRadarTarget();
                }
                else if(targetingMode == TargetingModes.Laser)
                {
                    UpdateLaserTarget();
                }
                else if(targetingMode == TargetingModes.GPS)
                {
                    UpdateGPSTarget();
                }
                else if(targetingMode == TargetingModes.AntiRad)
                {
                    UpdateAntiRadiationTarget();
                }

                //Missile State
                timeIndex = Time.time - timeFired;
                if(timeIndex < dropTime)
                {
                    MissileState = MissileStates.Drop;
                }
                else if(timeIndex < dropTime + boostTime)
                {
                    MissileState = MissileStates.Boost;
                }
                else if(timeIndex < dropTime+boostTime+cruiseTime)
                {
                    MissileState = MissileStates.Cruise;
                }
                else
                {
                    MissileState = MissileStates.PostThrust;
                }

                if(timeIndex > 0.5f)
                {
                    part.crashTolerance = 1;
                }

                if(MissileState == MissileStates.Drop) //drop phase
                {
                }
                else if(MissileState == MissileStates.Boost) //boost phase
                {
                    //light, sound & particle fx
                    if(boostAudio||thrustAudio)
                    {
                        if(!PauseMenu.isOpen)
                        {
                            if(!audioSource.isPlaying)
                            {
                                if(boostAudio)
                                {
                                    audioSource.clip = boostAudio;
                                }
                                else if(thrustAudio)
                                {
                                    audioSource.clip = thrustAudio;
                                }
                                audioSource.Play();
                            }
                        }
                        else if(audioSource.isPlaying)
                        {
                            audioSource.Stop();
                        }
                    }

                    foreach(Light light in gameObject.GetComponentsInChildren<Light>())
                    {
                        light.intensity = 1.5f;
                    }
                    if(spoolEngine)
                    {
                        currentThrust = Mathf.MoveTowards(currentThrust, thrust, thrust/10);
                    }
                    else
                    {
                        currentThrust = thrust;
                    }

                    if(boostTransformName != string.Empty)
                    {
                        foreach(var emitter in boostEmitters)
                        {
                            emitter.emit = true;
                        }
                    }

                    part.rb.AddRelativeForce(currentThrust * Vector3.forward);
                    if(hasRCS) forwardRCS.emit = true;
                    if(!startedEngine && thrust > 0)
                    {
                        startedEngine = true;
                        sfAudioSource.PlayOneShot(GameDatabase.Instance.GetAudioClip("BDArmory/Sounds/launch"));
                    }
                }
                else if(MissileState == MissileStates.Cruise) //cruise phase
                {
                    part.crashTolerance = 1;

                    if(thrustAudio)
                    {
                        if(!PauseMenu.isOpen)
                        {
                            if(!audioSource.isPlaying || audioSource.clip!=thrustAudio)
                            {
                                audioSource.clip = thrustAudio;
                                audioSource.Play();
                            }
                        }
                        else if(audioSource.isPlaying)
                        {
                            audioSource.Stop();
                        }
                    }

                    if(spoolEngine)
                    {
                        currentThrust = Mathf.MoveTowards(currentThrust, cruiseThrust, thrust/10);
                    }
                    else
                    {
                        currentThrust = cruiseThrust;
                    }

                    if(!hasRCS)
                    {
                        part.rb.AddRelativeForce(cruiseThrust * Vector3.forward);
                    }
                    else
                    {
                        forwardRCS.emit = false;
                        audioSource.Stop();
                    }

                    if(boostTransformName != string.Empty)
                    {
                        foreach(var emitter in boostEmitters)
                        {
                            if(!emitter) continue;
                            emitter.emit = false;
                        }
                    }

                    if(decoupleBoosters && !hasDecoupledBoosters)
                    {
                        hasDecoupledBoosters = true;
                        part.mass -= boosterMass;
                        foreach(var booster in boosters)
                        {
                            if(!booster) continue;
                            (booster.AddComponent<DecoupledBooster>()).DecoupleBooster(part.rb.velocity, boosterDecoupleSpeed);
                        }
                    }
                }

                if(MissileState != MissileStates.Idle && MissileState != MissileStates.PostThrust && MissileState != MissileStates.Drop) //all thrust
                {
                    if(!hasRCS)
                    {
                        foreach(KSPParticleEmitter pe in pEmitters)
                        {
                            pe.emit = true;
                        }
                        foreach(var gpe in gaplessEmitters)
                        {
                            if(vessel.atmDensity > 0)
                            {
                                gpe.emit = true;
                                gpe.pEmitter.worldVelocity = 2*ParticleTurbulence.Turbulence;
                            }
                            else
                            {
                                gpe.emit = false;
                            }
                        }
                    }

                    foreach(KSPParticleEmitter pe in pEmitters)
                    {
                        if(!pe.gameObject.name.Contains("rcs") && !pe.useWorldSpace)
                        {
                            pe.sizeGrow = Mathf.Lerp(pe.sizeGrow, 1, 0.4f);
                        }
                    }
                }
                else
                {
                    if(thrustAudio && audioSource.isPlaying)
                    {
                        audioSource.volume = Mathf.Lerp(audioSource.volume, 0, 0.1f);
                        audioSource.pitch = Mathf.Lerp(audioSource.pitch, 0, 0.1f);
                    }
                    foreach(Light light in gameObject.GetComponentsInChildren<Light>())
                    {
                        light.intensity = 0;
                    }
                }
                if(timeIndex > dropTime + boostTime + cruiseTime && !hasRCS)
                {
                    foreach(KSPParticleEmitter pe in pEmitters)
                    {
                        pe.maxEmission = Mathf.FloorToInt(pe.maxEmission * 0.8f);
                        pe.minEmission =  Mathf.FloorToInt(pe.minEmission * 0.8f);
                    }
                    foreach(var gpe in gaplessEmitters)
                    {
                        gpe.pEmitter.maxSize = Mathf.MoveTowards(gpe.pEmitter.maxSize, 0, 0.005f);
                        gpe.pEmitter.minSize = Mathf.MoveTowards(gpe.pEmitter.minSize, 0, 0.008f);
                        gpe.pEmitter.worldVelocity = 2*ParticleTurbulence.Turbulence;
                    }
                }

                if(MissileState != MissileStates.Idle && MissileState != MissileStates.Drop) //guidance
                {
                    //guidance and attitude stabilisation scales to atmospheric density. //use part.atmDensity
                    float atmosMultiplier = Mathf.Clamp01 (2.5f*(float)FlightGlobals.getAtmDensity(FlightGlobals.getStaticPressure(transform.position), FlightGlobals.getExternalTemperature(), FlightGlobals.currentMainBody));

                    if(vessel.srfSpeed < optimumAirspeed)
                    {
                        float optimumSpeedFactor = (float)vessel.srfSpeed / (2 * optimumAirspeed);
                        controlAuthority = Mathf.Clamp01(atmosMultiplier * (-Mathf.Abs(2 * optimumSpeedFactor - 1) + 1));
                    }
                    else
                    {
                        controlAuthority = Mathf.Clamp01(atmosMultiplier);
                    }
                    debugString += "\ncontrolAuthority: "+controlAuthority;

                    if(guidanceActive)// && timeIndex - dropTime > 0.5f)
                    {
                        WarnTarget();
                        Vector3 targetPosition = Vector3.zero;

                        if(legacyTargetVessel && legacyTargetVessel.loaded)
                        {
                            Vector3 targetCoMPos = legacyTargetVessel.findWorldCenterOfMass();
                            targetPosition = targetCoMPos+legacyTargetVessel.rb_velocity*Time.fixedDeltaTime;
                        }

                        //increaseTurnRate after launch
                        float turnRateDPS = Mathf.Clamp(((timeIndex-dropTime)/boostTime)*maxTurnRateDPS * 25f, 0, maxTurnRateDPS);
                        float turnRatePointDPS = turnRateDPS;
                        if(!hasRCS)
                        {
                            turnRateDPS *= controlAuthority;
                        }

                        //decrease turn rate after thrust cuts out
                        if(timeIndex > dropTime+boostTime+cruiseTime)
                        {
                            turnRateDPS = atmosMultiplier * Mathf.Clamp(maxTurnRateDPS - ((timeIndex-dropTime-boostTime-cruiseTime)*0.45f), 1, maxTurnRateDPS);
                            if(hasRCS)
                            {
                                turnRateDPS = 0;
                            }
                        }

                        if(hasRCS)
                        {
                            if(turnRateDPS > 0)
                            {
                                DoRCS();
                            }
                            else
                            {
                                KillRCS();
                            }
                        }
                        debugTurnRate = turnRateDPS;
                        float radiansDelta = turnRateDPS*Mathf.Deg2Rad*Time.fixedDeltaTime;

                        finalMaxTorque = Mathf.Clamp((timeIndex-dropTime)*30, 0, maxTorque); //ramp up torque

                        if(guidanceMode == GuidanceModes.AAMLead)
                        {
                            AAMGuidance();
                        }
                        else if(guidanceMode == GuidanceModes.AGM)
                        {
                            AGMGuidance();
                        }
                        else if(guidanceMode == GuidanceModes.AGMBallistic)
                        {
                            AGMBallisticGuidance();
                        }
                        else if(guidanceMode == GuidanceModes.RCS)
                        {
                            if(legacyTargetVessel!=null)
                            {
                                transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(targetPosition-transform.position, transform.up), turnRateDPS*Time.fixedDeltaTime);
                            }
                        }
                        else if(guidanceMode == GuidanceModes.Cruise)
                        {
                            CruiseGuidance();
                        }

                    }
                    else
                    {
                        targetMf = null;
                        if(!aero)
                        {
                            if(!hasRCS && !useSimpleDrag)
                            {
                                transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(vessel.srf_velocity, transform.up), atmosMultiplier * (0.5f*(timeIndex-dropTime)) * 50*Time.fixedDeltaTime);
                            }
                        }
                        else
                        {
                            aeroTorque = MissileGuidance.DoAeroForces(this, transform.position + 20*vessel.srf_velocity, liftArea, .25f, aeroTorque, maxTorque, maxAoA);
                        }

                    }

                    if(hasRCS && !guidanceActive)
                    {
                        KillRCS();
                    }
                }

                //Timed detonation
                if(isTimed && timeIndex > detonationTime)
                {
                    Detonate();
                }

            }
        }
Ejemplo n.º 13
0
        public void FireMissile()
        {
            if(!hasFired)
            {
                if(GetComponentInChildren<KSPParticleEmitter>())
                {
                    BDArmorySettings.numberOfParticleEmitters++;
                }

                foreach(var wpm in vessel.FindPartModulesImplementing<MissileFire>())
                {
                    team = wpm.team;
                    break;
                }

                sfAudioSource.PlayOneShot(GameDatabase.Instance.GetAudioClip("BDArmory/Sounds/deployClick"));

                sourceVessel = vessel;

                //TARGETING
                if(BDArmorySettings.ALLOW_LEGACY_TARGETING)
                {
                    if(vessel.targetObject!=null && vessel.targetObject.GetVessel()!=null)
                    {
                        legacyTargetVessel = vessel.targetObject.GetVessel();

                        if(targetingMode == TargetingModes.Heat)
                        {
                            heatTarget = new TargetSignatureData(legacyTargetVessel, 9999);
                        }
                    }
                }
                if(targetingMode == TargetingModes.Laser)
                {
                    laserStartPosition = transform.position;
                    laserStartDirection = transform.forward;
                    if(lockedCamera)
                    {
                        targetAcquired = true;
                        targetPosition = lastLaserPoint = lockedCamera.groundTargetPosition;
                    }
                }
                else if(targetingMode == TargetingModes.AntiRad && targetAcquired)
                {
                    RadarWarningReceiver.OnRadarPing += ReceiveRadarPing;
                }

                part.decouple(0);
                part.force_activate();
                part.Unpack();
                vessel.situation = Vessel.Situations.FLYING;
                rigidbody.isKinematic = false;
                BDArmorySettings.Instance.ApplyNewVesselRanges(vessel);
                part.bodyLiftMultiplier = 0;
                part.dragModel = Part.DragModel.NONE;

                //add target info to vessel
                if(legacyTargetVessel!=null && !vessel.gameObject.GetComponent<TargetInfo>())
                {
                    TargetInfo info = vessel.gameObject.AddComponent<TargetInfo>();
                    info.isMissile = true;
                    info.missileModule = this;

                    foreach(var mf in legacyTargetVessel.FindPartModulesImplementing<MissileFire>())
                    {
                        targetMf = mf;
                        break;
                    }
                }

                if(decoupleForward)
                {
                    part.rb.velocity += decoupleSpeed * part.transform.forward;
                }
                else
                {
                    part.rb.velocity += decoupleSpeed * -part.transform.up;
                }

                if(rndAngVel > 0)
                {
                    part.rb.angularVelocity += UnityEngine.Random.insideUnitSphere.normalized * rndAngVel;
                }

                vessel.vesselName = GetShortName();
                vessel.vesselType = VesselType.Probe;

                timeFired = Time.time;
                hasFired = true;

                previousRotation = transform.rotation;

                //setting ref transform for navball
                GameObject refObject = new GameObject();
                refObject.transform.rotation = Quaternion.LookRotation(-transform.up, transform.forward);
                refObject.transform.parent = transform;
                part.SetReferenceTransform(refObject.transform);
                vessel.SetReferenceTransform(part);

                MissileState = MissileStates.Drop;

                part.crashTolerance = 9999;

            }
        }
Ejemplo n.º 14
0
		public void FireMissile()
		{
			if(!hasFired)
			{
				

				hasFired = true;

				GameEvents.onPartDie.Add(PartDie);

				BDATargetManager.FiredMissiles.Add(this);

				if(GetComponentInChildren<KSPParticleEmitter>())
				{
					BDArmorySettings.numberOfParticleEmitters++;
				}
				
				foreach(var wpm in vessel.FindPartModulesImplementing<MissileFire>())
				{
					team = wpm.team;	
					break;
				}
				
				sfAudioSource.PlayOneShot(GameDatabase.Instance.GetAudioClip("BDArmory/Sounds/deployClick"));
				
				sourceVessel = vessel;



				//TARGETING
				targetPosition = transform.position + (transform.forward * 5000); //set initial target position so if no target update, missile will count a miss if it nears this point or is flying post-thrust
				startDirection = transform.forward;
				if(BDArmorySettings.ALLOW_LEGACY_TARGETING)
				{
					if(vessel.targetObject!=null && vessel.targetObject.GetVessel()!=null)
					{
						legacyTargetVessel = vessel.targetObject.GetVessel();

						foreach(var mf in legacyTargetVessel.FindPartModulesImplementing<MissileFire>())
						{
							targetMf = mf;
							break;
						}

						if(targetingMode == TargetingModes.Heat)
						{
							heatTarget = new TargetSignatureData(legacyTargetVessel, 9999);
						}
					}
				}
				if(targetingMode == TargetingModes.Laser)
				{
					laserStartPosition = transform.position;
					if(lockedCamera)
					{
						targetAcquired = true;
						targetPosition = lastLaserPoint = lockedCamera.groundTargetPosition;
						targetingPod = lockedCamera;
					}
				}
				else if(targetingMode == TargetingModes.AntiRad && targetAcquired)
				{
					RadarWarningReceiver.OnRadarPing += ReceiveRadarPing;
				}

				part.decouple(0);
				part.force_activate();
				part.Unpack();
				vessel.situation = Vessel.Situations.FLYING;
				part.rb.isKinematic = false;
				BDArmorySettings.Instance.ApplyNewVesselRanges(vessel);
				part.bodyLiftMultiplier = 0;
				part.dragModel = Part.DragModel.NONE;

				//add target info to vessel
				TargetInfo info = vessel.gameObject.AddComponent<TargetInfo>();
				info.team = BDATargetManager.BoolToTeam(team);
				info.isMissile = true;
				info.missileModule = this;

				StartCoroutine(DecoupleRoutine());
				

				

				vessel.vesselName = GetShortName();
				vessel.vesselType = VesselType.Probe;

				
				timeFired = Time.time;


				//setting ref transform for navball
				GameObject refObject = new GameObject();
				refObject.transform.rotation = Quaternion.LookRotation(-transform.up, transform.forward);
				refObject.transform.parent = transform;
				part.SetReferenceTransform(refObject.transform);
				vessel.SetReferenceTransform(part);
				vesselReferenceTransform = refObject.transform;

				MissileState = MissileStates.Drop;

				part.crashTolerance = 9999;


				StartCoroutine(MissileRoutine());
				
			}
		}
Ejemplo n.º 15
0
		void EndCruise()
		{
			MissileState = MissileStates.PostThrust;

			foreach(Light light in gameObject.GetComponentsInChildren<Light>())
			{
				light.intensity = 0;	
			}

			StartCoroutine(FadeOutAudio());
			StartCoroutine(FadeOutEmitters());
		}
Ejemplo n.º 16
0
 public void HitBarrier(BarrierSprite Barrier)
 {
     SetCostume("AlienBullets/AlienMissileHitBarrier");
     Barrier.Stamp(this, StampMethods.Cutout);
     State = MissileStates.Destroy;
 }
Ejemplo n.º 17
0
		//boost
		void StartBoost()
		{
			MissileState = MissileStates.Boost;

			if(boostAudio)
			{
				audioSource.clip = boostAudio;
			}
			else if(thrustAudio)
			{
				audioSource.clip = thrustAudio;
			}

			foreach(Light light in gameObject.GetComponentsInChildren<Light>())
			{
				light.intensity = 1.5f;	
			}


			if(!spoolEngine)
			{
				currentThrust = thrust;	
			}

			if(string.IsNullOrEmpty(boostTransformName))
			{
				boostEmitters = pEmitters;
				boostGaplessEmitters = gaplessEmitters;
			}
			foreach(var emitter in boostEmitters)
			{
				emitter.emit = true;
			}

			if(hasRCS)
			{
				forwardRCS.emit = true;
			}

			if(thrust > 0)
			{
				sfAudioSource.PlayOneShot(GameDatabase.Instance.GetAudioClip("BDArmory/Sounds/launch"));
				RadarWarningReceiver.WarnMissileLaunch(transform.position, transform.forward);
			}

		}