101 lines
2.9 KiB
C#
101 lines
2.9 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|