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); } } }
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); } } }