using UnityEngine; namespace Artngame.SKYMASTER { [ExecuteInEditMode] public class PlaceParticleOnGroundSKYMASTER : MonoBehaviour { public ParticleSystem p11; public bool make_circle; public float Circle_radius = 5f; public int loosen_circle = 1; public bool is_target; public float spread; private ParticleSystem.Particle[] ParticleList; private Transform thisTransform; public Vector2 Grass_Up_Low_Threshold = new Vector2(1f, 1f); public bool relaxed = true; public float Dist_Above_Terrain = 1f; private void Start() { p11 = base.gameObject.GetComponent("ParticleSystem") as ParticleSystem; if (p11 == null) { Debug.Log("Please attach the script to a particle system"); } } private void LateUpdate() { if (p11 == null) { p11 = base.gameObject.GetComponent("ParticleSystem") as ParticleSystem; } else { if (!(Terrain.activeTerrain != null)) { return; } ParticleList = new ParticleSystem.Particle[p11.particleCount]; p11.GetParticles(ParticleList); for (int i = 0; i < ParticleList.Length; i++) { if (!make_circle) { int num = Random.Range(1, ParticleList.Length); if ((i == num) | !relaxed) { ParticleList[i].position = new Vector3(ParticleList[i].position.x, Terrain.activeTerrain.transform.position.y + Terrain.activeTerrain.SampleHeight(ParticleList[i].position) + Dist_Above_Terrain, ParticleList[i].position.z); } if (relaxed & (base.gameObject.tag == "Grass")) { float num2 = Terrain.activeTerrain.transform.position.y + Terrain.activeTerrain.SampleHeight(ParticleList[i].position) + Dist_Above_Terrain; float num3 = num2 + Grass_Up_Low_Threshold.x; float num4 = num2 - Grass_Up_Low_Threshold.y; float y = ParticleList[i].position.y; if (ParticleList[i].position.y > num3) { y = num3; } if (ParticleList[i].position.y < num4) { y = num4; } ParticleList[i].position = new Vector3(ParticleList[i].position.x, y, ParticleList[i].position.z); } } int num5 = Random.Range(1, loosen_circle); if (make_circle & ((num5 == 1) | (is_target & (i < p11.particleCount / 1)))) { float x = base.transform.position.x + Mathf.Sin(i) * (Circle_radius + (float)i * spread * 0.01f); float z = base.transform.position.z + Mathf.Cos(i) * (Circle_radius + (float)i * spread * 0.01f); float num6 = ParticleList[i].position.y; if (!is_target) { num6 = Terrain.activeTerrain.SampleHeight(new Vector3(x, 0f, z)) + Dist_Above_Terrain + Terrain.activeTerrain.transform.position.y; } if (is_target) { num6 = Terrain.activeTerrain.SampleHeight(new Vector3(x, 0f, z)) + Dist_Above_Terrain + Terrain.activeTerrain.transform.position.y; } ParticleList[i].position = new Vector3(x, num6 + 0f, z); } } p11.SetParticles(ParticleList, p11.particleCount); } } } }