#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