100 lines
2.6 KiB
C#
100 lines
2.6 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace Enviro
|
|
{
|
|
[ExecuteInEditMode]
|
|
[AddComponentMenu("Enviro 3/Effect Removal Zone")]
|
|
public class EnviroEffectRemovalZone : MonoBehaviour
|
|
{
|
|
public enum Mode
|
|
{
|
|
Spherical,
|
|
Cubical
|
|
}
|
|
public Mode type;
|
|
|
|
[Range(-10f, 0f)]
|
|
public float density = -10.0f;
|
|
|
|
public float radius = 1.0f;
|
|
public float stretch = 2.0f;
|
|
[Range(0, 1)]
|
|
public float feather = 0.7f;
|
|
|
|
public Vector3 size = Vector3.one * 10;
|
|
|
|
void OnEnable()
|
|
{
|
|
if(EnviroManager.instance != null)
|
|
AddToZoneToManager();
|
|
}
|
|
|
|
void OnDisable()
|
|
{
|
|
if(EnviroManager.instance != null)
|
|
RemoveZoneFromManager();
|
|
}
|
|
|
|
|
|
void OnDestroy()
|
|
{
|
|
if(EnviroManager.instance != null)
|
|
RemoveZoneFromManager();
|
|
}
|
|
|
|
|
|
void AddToZoneToManager()
|
|
{
|
|
bool addedToMgr = false;
|
|
|
|
for(int i = 0; i < EnviroManager.instance.removalZones.Count; i++)
|
|
{
|
|
if(EnviroManager.instance.removalZones[i] == this)
|
|
{
|
|
addedToMgr = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(!addedToMgr)
|
|
EnviroManager.instance.AddRemovalZone(this);
|
|
}
|
|
|
|
void RemoveZoneFromManager()
|
|
{
|
|
for(int i = 0; i < EnviroManager.instance.removalZones.Count; i++)
|
|
{
|
|
if(EnviroManager.instance.removalZones[i] == this)
|
|
EnviroManager.instance.RemoveRemovaleZone(EnviroManager.instance.removalZones[i]);
|
|
}
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
transform.localScale = size;
|
|
}
|
|
|
|
void OnDrawGizmosSelected()
|
|
{
|
|
if(type == Mode.Spherical)
|
|
{
|
|
Matrix4x4 m = Matrix4x4.identity;
|
|
Transform t = transform;
|
|
m.SetTRS(t.position, t.rotation, new Vector3(1.0f, stretch, 1.0f));
|
|
Gizmos.matrix = m;
|
|
Gizmos.DrawWireSphere(Vector3.zero, radius);
|
|
}
|
|
else
|
|
{
|
|
Matrix4x4 m = Matrix4x4.identity;
|
|
Transform t = transform;
|
|
m.SetTRS(t.position, t.rotation, new Vector3(1.0f, 1.0f, 1.0f));
|
|
Gizmos.matrix = m;
|
|
Gizmos.DrawWireCube(Vector3.zero,t.localScale);
|
|
}
|
|
}
|
|
}
|
|
}
|