void Start() { BDArmorySetup.numberOfParticleEmitters++; rb = gameObject.AddComponent <Rigidbody>(); pEmitters = gameObject.GetComponentsInChildren <KSPParticleEmitter>(); IEnumerator <KSPParticleEmitter> pe = pEmitters.AsEnumerable().GetEnumerator(); while (pe.MoveNext()) { if (pe.Current == null) { continue; } if (FlightGlobals.getStaticPressure(transform.position) == 0 && pe.Current.useWorldSpace) { pe.Current.emit = false; } else if (pe.Current.useWorldSpace) { BDAGaplessParticleEmitter gpe = pe.Current.gameObject.AddComponent <BDAGaplessParticleEmitter>(); gpe.rb = rb; gpe.emit = true; } else { EffectBehaviour.AddParticleEmitter(pe.Current); } } pe.Dispose(); prevPosition = transform.position; currPosition = transform.position; startTime = Time.time; rb.mass = mass; rb.isKinematic = true; //rigidbody.velocity = startVelocity; if (!FlightGlobals.RefFrameIsRotating) { rb.useGravity = false; } rb.useGravity = false; randThrustSeed = UnityEngine.Random.Range(0f, 100f); SetupAudio(); }
public void OnActivate() { launchTime = Planetarium.GetUniversalTime(); exhausted = false; startMass = parentModule.vessel.GetTotalMass(); // We should activate the booster VFX here. if (string.IsNullOrEmpty(exhaustPrefabPath) == false) { exhaustPrefab = (GameObject)UnityEngine.Object.Instantiate(GameDatabase.Instance.GetModel(exhaustPrefabPath)); exhaustPrefab.SetActive(true); exhaustPrefab.transform.parent = parentModule.part.FindModelTransform(exhaustTransform); exhaustPrefab.transform.localPosition = exhaustOffset; exhaustPrefab.transform.localRotation = Quaternion.identity; KSPParticleEmitter[] emitters = exhaustPrefab.GetComponentsInChildren <KSPParticleEmitter>(); for (int i = 0; i < emitters.Length; ++i) { if (emitters[i].useWorldSpace) { BDAGaplessParticleEmitter gaplessEmitter = emitters[i].gameObject.AddComponent <BDAGaplessParticleEmitter>(); gaplessEmitter.part = parentModule.part; gaplessEmitter.emit = true; } else { emitters[i].emit = true; } } } // And SFX for booster as well. audioSource = parentModule.part.gameObject.AddComponent <AudioSource>(); audioSource.maxDistance = 1000f; audioSource.loop = true; audioSource.spatialBlend = 1; audioSource.clip = GameDatabase.Instance.GetAudioClip(audioClipPath); audioSource.Play(); }
void OnEnable() { startThermal = thermal; minThermal = startThermal * 0.34f; // 0.3 is original value, but doesn't work well for Tigers, 0.4f gives decent performance for Tigers, 0.65 decay gives best flare performance overall based on some monte carlo analysis if (gaplessEmitters == null || pEmitters == null) { gaplessEmitters = new List <BDAGaplessParticleEmitter>(); pEmitters = new List <KSPParticleEmitter>(); using (var pe = gameObject.GetComponentsInChildren <KSPParticleEmitter>().Cast <KSPParticleEmitter>().GetEnumerator()) while (pe.MoveNext()) { if (pe.Current == null) { continue; } if (pe.Current.useWorldSpace) { BDAGaplessParticleEmitter gpe = pe.Current.gameObject.AddComponent <BDAGaplessParticleEmitter>(); gaplessEmitters.Add(gpe); gpe.emit = true; } else { EffectBehaviour.AddParticleEmitter(pe.Current); pEmitters.Add(pe.Current); pe.Current.emit = true; } } } List <BDAGaplessParticleEmitter> .Enumerator gEmitter = gaplessEmitters.GetEnumerator(); while (gEmitter.MoveNext()) { if (gEmitter.Current == null) { continue; } gEmitter.Current.emit = true; } gEmitter.Dispose(); List <KSPParticleEmitter> .Enumerator pEmitter = pEmitters.GetEnumerator(); while (pEmitter.MoveNext()) { if (pEmitter.Current == null) { continue; } pEmitter.Current.emit = true; } pEmitter.Dispose(); BDArmorySetup.numberOfParticleEmitters++; if (lights == null) { lights = gameObject.GetComponentsInChildren <Light>(); } IEnumerator <Light> lgt = lights.AsEnumerable().GetEnumerator(); while (lgt.MoveNext()) { if (lgt.Current == null) { continue; } lgt.Current.enabled = true; } lgt.Dispose(); startTime = Time.time; //ksp force applier //gameObject.AddComponent<KSPForceApplier>().drag = 0.4f; BDArmorySetup.Flares.Add(this); upDirection = VectorUtils.GetUpDirection(transform.position); }
void OnEnable() { // OLD: //thermal = BDArmorySettings.FLARE_THERMAL*UnityEngine.Random.Range(0.45f, 1.25f); // NEW: generate flare within spectrum of emitting vessel's heat signature thermal = BDATargetManager.GetVesselHeatSignature(sourceVessel) * UnityEngine.Random.Range(0.65f, 1.75f); startThermal = thermal; minThermal = startThermal * 0.3f; if (gaplessEmitters == null || pEmitters == null) { gaplessEmitters = new List <BDAGaplessParticleEmitter>(); pEmitters = new List <KSPParticleEmitter>(); IEnumerator <KSPParticleEmitter> pe = gameObject.GetComponentsInChildren <KSPParticleEmitter>().Cast <KSPParticleEmitter>().GetEnumerator(); while (pe.MoveNext()) { if (pe.Current == null) { continue; } if (pe.Current.useWorldSpace) { BDAGaplessParticleEmitter gpe = pe.Current.gameObject.AddComponent <BDAGaplessParticleEmitter>(); gaplessEmitters.Add(gpe); gpe.emit = true; } else { EffectBehaviour.AddParticleEmitter(pe.Current); pEmitters.Add(pe.Current); pe.Current.emit = true; } } pe.Dispose(); } List <BDAGaplessParticleEmitter> .Enumerator gEmitter = gaplessEmitters.GetEnumerator(); while (gEmitter.MoveNext()) { if (gEmitter.Current == null) { continue; } gEmitter.Current.emit = true; } gEmitter.Dispose(); List <KSPParticleEmitter> .Enumerator pEmitter = pEmitters.GetEnumerator(); while (pEmitter.MoveNext()) { if (pEmitter.Current == null) { continue; } pEmitter.Current.emit = true; } pEmitter.Dispose(); BDArmorySettings.numberOfParticleEmitters++; if (lights == null) { lights = gameObject.GetComponentsInChildren <Light>(); } IEnumerator <Light> lgt = lights.AsEnumerable().GetEnumerator(); while (lgt.MoveNext()) { if (lgt.Current == null) { continue; } lgt.Current.enabled = true; } lgt.Dispose(); startTime = Time.time; //ksp force applier //gameObject.AddComponent<KSPForceApplier>().drag = 0.4f; BDArmorySettings.Flares.Add(this); if (sourceVessel != null) { relativePos = transform.position - sourceVessel.transform.position; } upDirection = VectorUtils.GetUpDirection(transform.position); velocity = startVelocity; }
void OnEnable() { BDArmorySetup.numberOfParticleEmitters++; rb = gameObject.AddOrGetComponent <Rigidbody>(); pEmitters = gameObject.GetComponentsInChildren <KSPParticleEmitter>(); using (var pe = pEmitters.AsEnumerable().GetEnumerator()) while (pe.MoveNext()) { if (pe.Current == null) { continue; } if (FlightGlobals.getStaticPressure(transform.position) == 0 && pe.Current.useWorldSpace) { pe.Current.emit = false; } else if (pe.Current.useWorldSpace) { BDAGaplessParticleEmitter gpe = pe.Current.gameObject.AddComponent <BDAGaplessParticleEmitter>(); gpe.rb = rb; gpe.emit = true; } else { pe.Current.emit = true; EffectBehaviour.AddParticleEmitter(pe.Current); } } prevPosition = transform.position; currPosition = transform.position; startPosition = transform.position; startTime = Time.time; massScalar = 0.012f / rocketMass; rb.mass = rocketMass; rb.isKinematic = true; rb.velocity = Vector3.zero; if (!FlightGlobals.RefFrameIsRotating) { rb.useGravity = false; } rb.useGravity = false; randThrustSeed = UnityEngine.Random.Range(0f, 100f); thrustVector = new Vector3(0, 0, thrust); SetupAudio(); if (this.sourceVessel) { var aName = this.sourceVessel.GetName(); if (BDACompetitionMode.Instance && BDACompetitionMode.Instance.Scores.ContainsKey(aName)) { ++BDACompetitionMode.Instance.Scores[aName].shotsFired; } sourceVesselName = sourceVessel.GetName(); // Set the source vessel name as the vessel might have changed its name or died by the time the bullet hits. } else { sourceVesselName = null; } if (tntMass <= 0) { explosive = false; } }
void OnEnable() { startThermal = thermal; minThermal = startThermal * 0.3f; if (gaplessEmitters == null || pEmitters == null) { gaplessEmitters = new List <BDAGaplessParticleEmitter>(); pEmitters = new List <KSPParticleEmitter>(); IEnumerator <KSPParticleEmitter> pe = gameObject.GetComponentsInChildren <KSPParticleEmitter>().Cast <KSPParticleEmitter>().GetEnumerator(); while (pe.MoveNext()) { if (pe.Current == null) { continue; } if (pe.Current.useWorldSpace) { BDAGaplessParticleEmitter gpe = pe.Current.gameObject.AddComponent <BDAGaplessParticleEmitter>(); gaplessEmitters.Add(gpe); gpe.emit = true; } else { EffectBehaviour.AddParticleEmitter(pe.Current); pEmitters.Add(pe.Current); pe.Current.emit = true; } } pe.Dispose(); } List <BDAGaplessParticleEmitter> .Enumerator gEmitter = gaplessEmitters.GetEnumerator(); while (gEmitter.MoveNext()) { if (gEmitter.Current == null) { continue; } gEmitter.Current.emit = true; } gEmitter.Dispose(); List <KSPParticleEmitter> .Enumerator pEmitter = pEmitters.GetEnumerator(); while (pEmitter.MoveNext()) { if (pEmitter.Current == null) { continue; } pEmitter.Current.emit = true; } pEmitter.Dispose(); BDArmorySetup.numberOfParticleEmitters++; if (lights == null) { lights = gameObject.GetComponentsInChildren <Light>(); } IEnumerator <Light> lgt = lights.AsEnumerable().GetEnumerator(); while (lgt.MoveNext()) { if (lgt.Current == null) { continue; } lgt.Current.enabled = true; } lgt.Dispose(); startTime = Time.time; //ksp force applier //gameObject.AddComponent<KSPForceApplier>().drag = 0.4f; BDArmorySetup.Flares.Add(this); upDirection = VectorUtils.GetUpDirection(transform.position); }