Exemplo n.º 1
0
        public void Build()
        {
            var layerSize = ScriptThread.GetVar <float>("vortexLayerSeperationScale").Value;

            var radius = ScriptThread.GetVar <float>("vortexRadius").Value;

            var particleCount = ScriptThread.GetVar <int>("vortexParticleCount").Value;

            var maxLayers = ScriptThread.GetVar <int>("vortexMaxParticleLayers");

            var particleAsset = ScriptThread.GetVar <string>("vortexParticleAsset");

            var particleName = ScriptThread.GetVar <string>("vortexParticleName");

            var multiplier = 359 / particleCount;

            var particleSize = 3.0f;

            for (var i = 0; i < maxLayers; i++)
            {
                for (var angle = 0; angle <= particleCount; angle++)
                {
                    // increment the Z axis as we build up.
                    var position = _position;

                    position.Z += layerSize * i;

                    // place the particles at 360 / 10 on the X axis.
                    var rotation = new Vector3(angle * multiplier, 0, 0);

                    TornadoParticle particle;

                    if (i < 2 || i > maxLayers - 3)
                    {
                        particle = new TornadoParticle(this, position, rotation, "scr_agencyheistb",
                                                       "scr_env_agency3b_smoke", radius, i);

                        particle.StartFx(4.7f);

                        _particles.Add(particle);
                    }

                    particle = new TornadoParticle(this, position, rotation, particleAsset, particleName, radius, i);

                    particle.StartFx(particleSize);

                    radius += 0.0799999982118607f * (0.720000028610229f * i);

                    particleSize += 0.00999999977648258f * (0.119999997317791f * i);

                    _particles.Add(particle);
                }
            }
        }
Exemplo n.º 2
0
        public void Build()
        {
            float radius = ScriptThread.GetVar <float>("vortexRadius");

            int particleCount = ScriptThread.GetVar <int>("vortexParticleCount");

            int maxLayers = ScriptThread.GetVar <int>("vortexMaxParticleLayers");

            string particleAsset = ScriptThread.GetVar <string>("vortexParticleAsset");

            string particleName = ScriptThread.GetVar <string>("vortexParticleName");

            bool enableClouds = ScriptThread.GetVar <bool>("vortexEnableCloudTopParticle");

            bool enableDebris = ScriptThread.GetVar <bool>("vortexEnableCloudTopParticleDebris");

            var multiplier = 360 / particleCount;

            var particleSize = 3.0685f;

            maxLayers = enableClouds ? 12 : maxLayers; // cannot spawn top particles with more than 12 layers!!

            for (var layerIdx = 0; layerIdx < maxLayers; layerIdx++)
            {
                //var lyrParticleNum = (i > maxLayers - 4 ? particleCount + 5 : particleCount);

                //multiplier = 360 / lyrParticleNum;
                for (var angle = 0; angle < (layerIdx > maxLayers - 4 ? particleCount + 5 : particleCount); angle++)
                {
                    // increment the Z axis as we build up.
                    var position = _position;

                    position.Z += ScriptThread.GetVar <float>("vortexLayerSeperationScale") * layerIdx;

                    // place the particles at 360 / 10 on the X axis.
                    var rotation = new Vector3(angle * multiplier, 0, 0);

                    TornadoParticle particle;

                    bool bIsTopParticle = false;

                    if (layerIdx < 2) //debris layer
                    {
                        particle = new TornadoParticle(this, position, rotation, "scr_agencyheistb", "scr_env_agency3b_smoke", radius, layerIdx);

                        particle.StartFx(4.7f);

                        _particles.Add(particle);

                        Function.Call(Hash.ADD_SHOCKING_EVENT_FOR_ENTITY, 86, particle.Ref.Handle, 0.0f); // shocking event at outer vorticies
                    }

                    if (enableClouds && layerIdx > maxLayers - 3)
                    {
                        if (enableDebris)
                        {
                            particle = new TornadoParticle(this, position, rotation, "scr_agencyheistb", "scr_env_agency3b_smoke", radius * 2.2f, layerIdx);

                            particle.StartFx(12.7f);

                            _particles.Add(particle);
                        }

                        position.Z   += 12f;
                        particleSize += 6.0f;

                        radius += 7f;

                        bIsTopParticle = true;
                    }

                    particle = new TornadoParticle(this, position, rotation, particleAsset, particleName, radius, layerIdx, bIsTopParticle);

                    particle.StartFx(particleSize);

                    radius += 0.0799999982118607f * (0.720000028610229f * layerIdx);

                    particleSize += 0.00999999977648258f * (0.119999997317791f * layerIdx);

                    _particles.Add(particle);
                }
            }
        }