95 lines
3.9 KiB
C#
95 lines
3.9 KiB
C#
|
#if UNITY_EDITOR
|
|||
|
using UnityEditor;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
namespace VLB
|
|||
|
{
|
|||
|
[CustomEditor(typeof(VolumetricDustParticles))]
|
|||
|
[CanEditMultipleObjects]
|
|||
|
public class Editor_VolumetricDustParticles : Editor_CommonSD
|
|||
|
{
|
|||
|
SerializedProperty alpha = null;
|
|||
|
SerializedProperty size = null;
|
|||
|
SerializedProperty direction = null;
|
|||
|
SerializedProperty velocity = null;
|
|||
|
SerializedProperty density = null;
|
|||
|
SerializedProperty spawnDistanceRange = null;
|
|||
|
SerializedProperty cullingEnabled = null;
|
|||
|
SerializedProperty cullingMaxDistance = null;
|
|||
|
|
|||
|
static bool AreParticlesInfosUpdated() { return Application.isPlaying; }
|
|||
|
public override bool RequiresConstantRepaint() { return AreParticlesInfosUpdated(); }
|
|||
|
|
|||
|
public override void OnInspectorGUI()
|
|||
|
{
|
|||
|
base.OnInspectorGUI();
|
|||
|
|
|||
|
var particles = target as VolumetricDustParticles;
|
|||
|
|
|||
|
if (particles.gameObject.activeSelf && particles.enabled && !particles.particlesAreInstantiated)
|
|||
|
{
|
|||
|
EditorGUILayout.HelpBox(EditorStrings.DustParticles.HelpFailToInstantiate, MessageType.Error);
|
|||
|
ButtonOpenConfig();
|
|||
|
}
|
|||
|
|
|||
|
if (FoldableHeader.Begin(this, EditorStrings.DustParticles.HeaderRendering))
|
|||
|
{
|
|||
|
EditorGUILayout.PropertyField(alpha, EditorStrings.DustParticles.Alpha);
|
|||
|
EditorGUILayout.PropertyField(size, EditorStrings.DustParticles.Size);
|
|||
|
}
|
|||
|
FoldableHeader.End();
|
|||
|
|
|||
|
if (FoldableHeader.Begin(this, EditorStrings.DustParticles.HeaderDirectionAndVelocity))
|
|||
|
{
|
|||
|
EditorGUILayout.PropertyField(direction, EditorStrings.DustParticles.Direction);
|
|||
|
|
|||
|
if (particles.direction == ParticlesDirection.Random)
|
|||
|
{
|
|||
|
var vec = velocity.vector3Value;
|
|||
|
vec.z = EditorGUILayout.FloatField(EditorStrings.DustParticles.Velocity, vec.z);
|
|||
|
velocity.vector3Value = vec;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
EditorGUILayout.PropertyField(velocity, EditorStrings.DustParticles.Velocity);
|
|||
|
}
|
|||
|
}
|
|||
|
FoldableHeader.End();
|
|||
|
|
|||
|
if (FoldableHeader.Begin(this, EditorStrings.DustParticles.HeaderCulling))
|
|||
|
{
|
|||
|
EditorGUILayout.PropertyField(cullingEnabled, EditorStrings.DustParticles.CullingEnabled);
|
|||
|
if (cullingEnabled.boolValue)
|
|||
|
EditorGUILayout.PropertyField(cullingMaxDistance, EditorStrings.DustParticles.CullingMaxDistance);
|
|||
|
}
|
|||
|
FoldableHeader.End();
|
|||
|
|
|||
|
if (FoldableHeader.Begin(this, EditorStrings.DustParticles.HeaderSpawning))
|
|||
|
{
|
|||
|
EditorGUILayout.PropertyField(density, EditorStrings.DustParticles.Density);
|
|||
|
EditorGUILayout.PropertyField(spawnDistanceRange, EditorStrings.DustParticles.SpawnDistanceRange);
|
|||
|
|
|||
|
{
|
|||
|
var infos = "Current particles count: ";
|
|||
|
if (AreParticlesInfosUpdated()) infos += particles.particlesCurrentCount;
|
|||
|
else infos += "(playtime only)";
|
|||
|
if (particles.isCulled)
|
|||
|
infos += string.Format(" (culled by '{0}')", particles.mainCamera.name);
|
|||
|
infos += string.Format("\nMax particles count: {0}", particles.particlesMaxCount);
|
|||
|
EditorGUILayout.HelpBox(infos, MessageType.Info);
|
|||
|
}
|
|||
|
}
|
|||
|
FoldableHeader.End();
|
|||
|
|
|||
|
if (FoldableHeader.Begin(this, EditorStrings.DustParticles.HeaderInfos))
|
|||
|
{
|
|||
|
EditorGUILayout.HelpBox(EditorStrings.DustParticles.HelpRecommendation, MessageType.Info);
|
|||
|
}
|
|||
|
FoldableHeader.End();
|
|||
|
|
|||
|
serializedObject.ApplyModifiedProperties();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
#endif
|