Car/Assets/VolumetricLightBeam/Editor/Editor_VolumetricDustPartic...

95 lines
3.9 KiB
C#
Raw Permalink Normal View History

#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