示例#1
0
        //static GameObject go = GameDatabase.Instance.GetModel("BDArmory/Models/bulletHit/bulletHit"); //===TODO: static object wont load after scene reload

        void Start()
        {
            startTime = Time.time;
            pEmitters = gameObject.GetComponentsInChildren <KSPParticleEmitter>();
            foreach (KSPParticleEmitter pe in pEmitters)
            {
                EffectBehaviour.AddParticleEmitter(pe);
            }
            audioSource              = gameObject.AddComponent <AudioSource>();
            audioSource.minDistance  = 1;
            audioSource.maxDistance  = 50;
            audioSource.spatialBlend = 1;
            audioSource.volume       = BDArmorySettings.BDARMORY_WEAPONS_VOLUME;

            int random = UnityEngine.Random.Range(1, 3);

            if (ricochet)
            {
                string path = "BDArmory/Sounds/ricochet" + random;
                hitSound = GameDatabase.Instance.GetAudioClip(path);
            }
            else
            {
                string path = "BDArmory/Sounds/bulletHit" + random;
                hitSound = GameDatabase.Instance.GetAudioClip(path);
            }


            audioSource.PlayOneShot(hitSound);
        }
示例#2
0
    public static void Add(PersistentKSPParticleEmitter pkpe)
    {
        persistentEmitters.Add(pkpe);
        EffectBehaviour.AddParticleEmitter(pkpe.pe);

        //print("[SmokeScreen PersistentEmitterManager]: Added 1 PersistentKSPParticleEmitter. Count = " + persistentEmitters.Count);
    }
示例#3
0
        public override void OnStart(StartState state)
        {
            // print("vaporvent: OnStart");

            emitter = part.FindModelComponents <KSPParticleEmitter>();

            if (emitter != null)
            {
                foreach (KSPParticleEmitter unit in emitter)
                {
                    EffectBehaviour.AddParticleEmitter(unit);
                }
            }

            base.OnStart(state);
            if (HighLogic.LoadedSceneIsFlight)
            {
                GameEvents.onLaunch.Add(onLaunch);
                if (Vessel.Situations.PRELAUNCH == vessel.situation || Vessel.Situations.LANDED == vessel.situation)
                {
                    vaporVisible = true;
                    UpdateEvents(vaporVisible);
                    SlowCheck();
                }
            }
        }
示例#4
0
        void Start()
        {
            startTime = Time.time;
            pEmitters = gameObject.GetComponentsInChildren <KSPParticleEmitter>();
            foreach (KSPParticleEmitter pe in pEmitters)
            {
                EffectBehaviour.AddParticleEmitter(pe);

                pe.emit = true;


                //if(pe.useWorldSpace) pe.force = (4.49f * FlightGlobals.getGeeForceAtPosition(transform.position));

                if (pe.maxEnergy > maxTime)
                {
                    maxTime = pe.maxEnergy;
                }
            }
            lightFX           = gameObject.AddComponent <Light>();
            lightFX.color     = Misc.ParseColor255("255,238,184,255");
            lightFX.intensity = 8;
            lightFX.range     = range * 3f;
            lightFX.shadows   = LightShadows.None;


            audioSource.volume = BDArmorySettings.BDARMORY_WEAPONS_VOLUME;

            audioSource.PlayOneShot(exSound);
        }
示例#5
0
        private void Start()
        {
            StartTime = Time.time;
            MaxTime   = (Range / ExplosionVelocity) * 3f;
            CalculateBlastEvents();
            PEmitters = gameObject.GetComponentsInChildren <KSPParticleEmitter>();
            IEnumerator <KSPParticleEmitter> pe = PEmitters.AsEnumerable().GetEnumerator();

            while (pe.MoveNext())
            {
                if (pe.Current == null)
                {
                    continue;
                }
                EffectBehaviour.AddParticleEmitter(pe.Current);
                pe.Current.emit = true;
                if (pe.Current.maxEnergy > particlesMaxEnergy)
                {
                    particlesMaxEnergy = pe.Current.maxEnergy;
                }
            }
            pe.Dispose();

            LightFx           = gameObject.AddComponent <Light>();
            LightFx.color     = Misc.Misc.ParseColor255("255,238,184,255");
            LightFx.intensity = 8;
            LightFx.range     = Range * 3f;
            LightFx.shadows   = LightShadows.None;

            if (BDArmorySettings.DRAW_DEBUG_LABELS)
            {
                Debug.Log(
                    "[BDArmory]:Explosion started tntMass: {" + Power + "}  BlastRadius: {" + Range + "} StartTime: {" + StartTime + "}, Duration: {" + MaxTime + "}");
            }
        }
示例#6
0
        void Start()
        {
            startTime = Time.time;
            pEmitters = gameObject.GetComponentsInChildren <KSPParticleEmitter>();
            IEnumerator <KSPParticleEmitter> pe = pEmitters.AsEnumerable().GetEnumerator();

            while (pe.MoveNext())
            {
                if (pe.Current == null)
                {
                    continue;
                }
                EffectBehaviour.AddParticleEmitter(pe.Current);

                pe.Current.emit = true;

                if (pe.Current.maxEnergy > maxTime)
                {
                    maxTime = pe.Current.maxEnergy;
                }
            }
            pe.Dispose();

            lightFX           = gameObject.AddComponent <Light>();
            lightFX.color     = Misc.Misc.ParseColor255("255,238,184,255");
            lightFX.intensity = 8;
            lightFX.range     = range * 3f;
            lightFX.shadows   = LightShadows.None;


            audioSource.volume = BDArmorySettings.BDARMORY_WEAPONS_VOLUME;

            audioSource.PlayOneShot(exSound);
        }
示例#7
0
    /// <summary>
    /// 特效更随指定对象
    /// </summary>
    /// <param name="name"></param>
    /// <param name="trans"></param>
    public void Spawn(string name, Transform trans)
    {
        GameObject      effect = PoolManager.Instance.Spawn(name);
        EffectBehaviour eb     = effect.GetOrAddComponent <EffectBehaviour>();

        eb.ToFollow = trans;
    }
示例#8
0
        IEnumerator SmokeRoutine()
        {
            yield return(new WaitForSeconds(0.2f));

            GameObject smokeCMObject = smokePool.GetPooledObject();

            smokeCMObject.SetActive(true);
            smokeCMObject.transform.position = ejectTransform.position + (10 * ejectTransform.forward);
            float longestLife = 0;
            IEnumerator <KSPParticleEmitter> emitter = smokeCMObject.GetComponentsInChildren <KSPParticleEmitter>().Cast <KSPParticleEmitter>().GetEnumerator();

            while (emitter.MoveNext())
            {
                if (emitter.Current == null)
                {
                    continue;
                }
                EffectBehaviour.AddParticleEmitter(emitter.Current);
                emitter.Current.Emit();
                if (emitter.Current.maxEnergy > longestLife)
                {
                    longestLife = emitter.Current.maxEnergy;
                }
            }
            emitter.Dispose();

            audioSource.PlayOneShot(smokePoofSound);
            yield return(new WaitForSeconds(longestLife));

            smokeCMObject.SetActive(false);
        }
        public void Start()
        {
            foreach (var otherFlame in FlamingJoints.FlameObjects)
            {
                if (
                    !((gameObject.transform.position - otherFlame.transform.position).sqrMagnitude
                      < _maxCombineDistance * _maxCombineDistance))
                {
                    continue;
                }
                Debug.Log("== Flame combined ==");
                Destroy(gameObject);
                return;
            }

            foreach (var pe in gameObject.GetComponentsInChildren <KSPParticleEmitter>())
            {
                var color = pe.material.color;
                color.a = color.a / 2;
                pe.material.SetColor("_TintColor", color);
                pe.force = -FlightGlobals.getGeeForceAtPosition(transform.position) / 3;
                if (!(pe.maxEnergy > _highestEnergy))
                {
                    continue;
                }
                _destroyer     = pe.gameObject;
                _highestEnergy = pe.maxEnergy;
                EffectBehaviour.AddParticleEmitter(pe);
            }
            FlamingJoints.FlameObjects.Add(gameObject);
        }
示例#10
0
    public void FireActivate()
    {
        float scale = float.Parse(GetComponent <EffectStatus>().stringData);

        this.transform.localScale = new Vector3(scale, 1 + (scale - 1) / 2, scale);
        EffectBehaviour.ParticleDamegeStartAutoMode(this.gameObject);
    }
 void OnDestroy()
 {
     if (pEmitter)
     {
         EffectBehaviour.RemoveParticleEmitter(pEmitter);
     }
 }
示例#12
0
        void Start()
        {
            if (decalPool_large == null || decalPool_small == null)
            {
                SetupShellPool();
            }

            startTime = Time.time;
            pEmitters = gameObject.GetComponentsInChildren <KSPParticleEmitter>();

            IEnumerator <KSPParticleEmitter> pe = pEmitters.AsEnumerable().GetEnumerator();

            while (pe.MoveNext())
            {
                if (pe.Current == null)
                {
                    continue;
                }
                EffectBehaviour.AddParticleEmitter(pe.Current);
            }

            pe.Dispose();

            audioSource              = gameObject.AddComponent <AudioSource>();
            audioSource.minDistance  = 1;
            audioSource.maxDistance  = 50;
            audioSource.spatialBlend = 1;
            audioSource.volume       = BDArmorySettings.BDARMORY_WEAPONS_VOLUME;

            int random = Random.Range(1, 3);

            if (ricochet)
            {
                if (caliber <= 30)
                {
                    string path = "BDArmory/Sounds/ricochet" + random;
                    hitSound = GameDatabase.Instance.GetAudioClip(path);
                }
                else
                {
                    string path = "BDArmory/Sounds/Artillery_Shot";
                    hitSound = GameDatabase.Instance.GetAudioClip(path);
                }
            }
            else
            {
                if (caliber <= 30)
                {
                    string path = "BDArmory/Sounds/bulletHit" + random;
                    hitSound = GameDatabase.Instance.GetAudioClip(path);
                }
                else
                {
                    string path = "BDArmory/Sounds/Artillery_Shot";
                    hitSound = GameDatabase.Instance.GetAudioClip(path);
                }
            }

            audioSource.PlayOneShot(hitSound);
        }
示例#13
0
        private void OnEnable()
        {
            StartTime = Time.time;
            disabled  = false;
            MaxTime   = Mathf.Sqrt((Range / ExplosionVelocity) * 3f) * 2f; // Scale MaxTime to get a reasonable visualisation of the explosion.
            if (!isFX)
            {
                CalculateBlastEvents();
            }
            pEmitters = gameObject.GetComponentsInChildren <KSPParticleEmitter>();
            foreach (var pe in pEmitters)
            {
                if (pe != null)
                {
                    if (pe.maxEnergy > particlesMaxEnergy)
                    {
                        particlesMaxEnergy = pe.maxEnergy;
                    }
                    pe.emit = true;
                    var emission = pe.ps.emission;
                    emission.enabled = true;
                    EffectBehaviour.AddParticleEmitter(pe);
                }
            }

            LightFx       = gameObject.GetComponent <Light>();
            LightFx.range = Range * 3f;

            if (BDArmorySettings.DRAW_DEBUG_LABELS)
            {
                Debug.Log("[BDArmory]:Explosion started tntMass: {" + Power + "}  BlastRadius: {" + Range + "} StartTime: {" + StartTime + "}, Duration: {" + MaxTime + "}");
            }
        }
示例#14
0
    public static void Remove(PersistentKSPParticleEmitter pkpe)
    {
        EffectBehaviour.RemoveParticleEmitter(pkpe.pe);
        persistentEmitters.Remove(pkpe);

        //print("[SmokeScreen PersistentEmitterManager]: Removed 1 PersistentKSPParticleEmitter. Count = " + persistentEmitters.Count);
    }
示例#15
0
    /// <summary>
    /// 在玩家身上的指定点播放特效
    /// </summary>
    public void SpawnEffectInPlayer(string name)
    {
        GameObject      effect = ioo.poolManager.Spawn(name);
        EffectBehaviour eb     = effect.GetOrAddComponent <EffectBehaviour>();

        eb.ToFollow = ioo.gameMode.Player.EffectPoint;
    }
示例#16
0
        private void OnEnable()
        {
            StartTime = Time.time;
            LifeTime  = Mathf.Clamp(Atmosphere, 0.04f, 1) * 5;
            PEmitters = gameObject.GetComponentsInChildren <KSPParticleEmitter>();
            using (var pe = PEmitters.AsEnumerable().GetEnumerator())
                while (pe.MoveNext())
                {
                    if (pe.Current == null)
                    {
                        continue;
                    }
                    EffectBehaviour.AddParticleEmitter(pe.Current);
                    pe.Current.emit      = true;
                    pe.Current.maxEnergy = Mathf.Clamp(Atmosphere, 0.01f, 1) * 7;
                    pe.Current.minEnergy = Mathf.Clamp(Atmosphere, 0.01f, 1) * 5;
                    pe.Current.maxSize   = 400 * (((Yield / 2) + 1) * Mathf.Clamp(Atmosphere, 0.2f, 1));
                    pe.Current.minSize   = 400 * (((Yield / 2) + 1) * Mathf.Clamp(Atmosphere, 0.2f, 1));
                }

            LightFx            = gameObject.GetComponent <Light>();
            LightFx.color      = XKCDColors.Ecru;
            LightFx.intensity  = 3;
            LightFx.range      = 100 * Yield;
            LightFx.shadows    = LightShadows.None;
            emittersOff        = false;
            transform.position = Position;
        }
示例#17
0
        IEnumerator SmokeRoutine()
        {
            yield return(new WaitForSeconds(0.2f));

            GameObject smokeCMObject = smokePool.GetPooledObject();
            CMSmoke    smoke         = smokeCMObject.GetComponent <CMSmoke>();

            smoke.velocity = part.rb.velocity + (ejectVelocity * transform.up) +
                             (UnityEngine.Random.Range(-3f, 3f) * transform.forward) +
                             (UnityEngine.Random.Range(-3f, 3f) * transform.right);
            smokeCMObject.SetActive(true);
            smokeCMObject.transform.position = ejectTransform.position + (10 * ejectTransform.forward);
            float longestLife = 0;

            using (IEnumerator <KSPParticleEmitter> emitter = smokeCMObject.GetComponentsInChildren <KSPParticleEmitter>().Cast <KSPParticleEmitter>().GetEnumerator())
                while (emitter.MoveNext())
                {
                    if (emitter.Current == null)
                    {
                        continue;
                    }
                    EffectBehaviour.AddParticleEmitter(emitter.Current);
                    emitter.Current.Emit();
                    if (emitter.Current.maxEnergy > longestLife)
                    {
                        longestLife = emitter.Current.maxEnergy;
                    }
                }

            audioSource.PlayOneShot(smokePoofSound);
            yield return(new WaitForSeconds(longestLife));

            smokeCMObject.SetActive(false);
        }
示例#18
0
 private void OnDestroy()
 {
     foreach (var pe in gameObject.GetComponentsInChildren <KSPParticleEmitter>())
     {
         EffectBehaviour.RemoveParticleEmitter(pe);
     }
 }
示例#19
0
 public override void OnStart(StartState state)
 {
     base.OnStart(state);
     emission = part.FindModelComponents <KSPParticleEmitter>();
     foreach (KSPParticleEmitter emi in emission)
     {
         EffectBehaviour.AddParticleEmitter(emi);
     }
 }
示例#20
0
 public void OnDestroy()
 {
     foreach (KSPParticleEmitter emi in emission)
     {
         emi.emit    = false;
         enablesmoke = false;
         EffectBehaviour.RemoveParticleEmitter(emi);
     }
 }
示例#21
0
 public void Start()
 {
     foreach (var pe in gameObject.GetComponentsInChildren <KSPParticleEmitter>())
     {
         EffectBehaviour.AddParticleEmitter(pe);
         pe.emit = true;
         StartCoroutine(TimerRoutine());
     }
 }
示例#22
0
 void OnDisable()
 {
     foreach (var pe in pEmitters)
     {
         if (pe != null)
         {
             pe.emit = false;
             EffectBehaviour.RemoveParticleEmitter(pe);
         }
     }
 }
示例#23
0
 void FireParticleEffects()
 {
     if (effectsTransform)
     {
         foreach (var pe in effectsTransform.gameObject.GetComponentsInChildren <KSPParticleEmitter>())
         {
             EffectBehaviour.AddParticleEmitter(pe);
             pe.Emit();
         }
     }
 }
示例#24
0
 public void OnDestroy()
 {
     GameEvents.onLaunch.Remove(onLaunch);
     emitter = part.FindModelComponents <KSPParticleEmitter>();
     if (emitter != null)
     {
         foreach (KSPParticleEmitter unit in emitter)
         {
             EffectBehaviour.RemoveParticleEmitter(unit);
         }
     }
 }
示例#25
0
 void onDisable()
 {
     BDArmorySetup.numberOfParticleEmitters--;
     foreach (var pe in pEmitters)
     {
         if (pe != null)
         {
             pe.emit = false;
             EffectBehaviour.RemoveParticleEmitter(pe);
         }
     }
 }
示例#26
0
 void OnDisable()
 {
     foreach (var pe in pEmitters)
     {
         if (pe != null)
         {
             pe.emit = false;
             EffectBehaviour.RemoveParticleEmitter(pe);
         }
     }
     ExplosivePart = null; // Clear the Part reference.
 }
        private void OnDestroy()
        {
            foreach (var pe in gameObject.GetComponentsInChildren <KSPParticleEmitter>())
            {
                EffectBehaviour.RemoveParticleEmitter(pe);
            }

            if (FlamingJoints.FlameObjects.Contains(gameObject))
            {
                FlamingJoints.FlameObjects.Remove(gameObject);
            }
        }
示例#28
0
 void onDisable()
 {
     BDArmorySetup.OnVolumeChange -= UpdateVolume;
     BDArmorySetup.numberOfParticleEmitters--;
     foreach (var pe in pEmitters)
     {
         if (pe != null)
         {
             pe.emit = false;
             EffectBehaviour.RemoveParticleEmitter(pe);
         }
     }
     sourceVesselName = null;
 }
示例#29
0
        IEnumerator SelfDestructRoutine()
        {
            pEmitter.emit = false;
            EffectBehaviour.RemoveParticleEmitter(pEmitter);
            if (gpe)
            {
                gpe.emit = false;
                EffectBehaviour.RemoveParticleEmitter(gpe.pEmitter);
            }
            yield return(new WaitForSeconds(pEmitter.maxEnergy));

            Destroy(gameObject);
            yield break;
        }
示例#30
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();
        }