示例#1
0
        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();
        }
示例#2
0
        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();
        }
示例#3
0
        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);
        }
示例#4
0
        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;
        }
示例#5
0
        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;
            }
        }
示例#6
0
        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);
        }