VolumetricDustParticlesEditor.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #if UNITY_EDITOR
  2. using UnityEditor;
  3. using UnityEngine;
  4. namespace VLB
  5. {
  6. [CustomEditor(typeof(VolumetricDustParticles))]
  7. [CanEditMultipleObjects]
  8. public class VolumetricDustParticlesEditor : EditorCommon
  9. {
  10. SerializedProperty alpha, size, direction, velocity, density, spawnMinDistance, spawnMaxDistance, cullingEnabled, cullingMaxDistance;
  11. static bool AreParticlesInfosUpdated() { return VolumetricDustParticles.isFeatureSupported && Application.isPlaying; }
  12. public override bool RequiresConstantRepaint() { return AreParticlesInfosUpdated(); }
  13. protected override void OnEnable()
  14. {
  15. base.OnEnable();
  16. alpha = FindProperty((VolumetricDustParticles x) => x.alpha);
  17. size = FindProperty((VolumetricDustParticles x) => x.size);
  18. direction = FindProperty((VolumetricDustParticles x) => x.direction);
  19. velocity = FindProperty((VolumetricDustParticles x) => x.velocity);
  20. density = FindProperty((VolumetricDustParticles x) => x.density);
  21. spawnMinDistance = FindProperty((VolumetricDustParticles x) => x.spawnMinDistance);
  22. spawnMaxDistance = FindProperty((VolumetricDustParticles x) => x.spawnMaxDistance);
  23. cullingEnabled = FindProperty((VolumetricDustParticles x) => x.cullingEnabled);
  24. cullingMaxDistance = FindProperty((VolumetricDustParticles x) => x.cullingMaxDistance);
  25. }
  26. public override void OnInspectorGUI()
  27. {
  28. base.OnInspectorGUI();
  29. var particles = target as VolumetricDustParticles;
  30. if (!VolumetricDustParticles.isFeatureSupported)
  31. {
  32. EditorGUILayout.HelpBox(EditorStrings.DustParticles.HelpFeatureNotSupported, MessageType.Warning);
  33. }
  34. else if (particles.gameObject.activeSelf && particles.enabled && !particles.particlesAreInstantiated)
  35. {
  36. EditorGUILayout.HelpBox(EditorStrings.DustParticles.HelpFailToInstantiate, MessageType.Error);
  37. ButtonOpenConfig();
  38. }
  39. if (FoldableHeader.Begin(this, EditorStrings.DustParticles.HeaderRendering))
  40. {
  41. EditorGUILayout.PropertyField(alpha, EditorStrings.DustParticles.Alpha);
  42. EditorGUILayout.PropertyField(size, EditorStrings.DustParticles.Size);
  43. }
  44. FoldableHeader.End();
  45. if (FoldableHeader.Begin(this, EditorStrings.DustParticles.HeaderDirectionAndVelocity))
  46. {
  47. EditorGUILayout.PropertyField(direction, EditorStrings.DustParticles.Direction);
  48. if (particles.direction == ParticlesDirection.Random)
  49. {
  50. var vec = velocity.vector3Value;
  51. vec.z = EditorGUILayout.FloatField(EditorStrings.DustParticles.Velocity, vec.z);
  52. velocity.vector3Value = vec;
  53. }
  54. else
  55. {
  56. EditorGUILayout.PropertyField(velocity, EditorStrings.DustParticles.Velocity);
  57. }
  58. }
  59. FoldableHeader.End();
  60. if (FoldableHeader.Begin(this, EditorStrings.DustParticles.HeaderCulling))
  61. {
  62. EditorGUILayout.PropertyField(cullingEnabled, EditorStrings.DustParticles.CullingEnabled);
  63. if (cullingEnabled.boolValue)
  64. EditorGUILayout.PropertyField(cullingMaxDistance, EditorStrings.DustParticles.CullingMaxDistance);
  65. }
  66. FoldableHeader.End();
  67. if (FoldableHeader.Begin(this, EditorStrings.DustParticles.HeaderSpawning))
  68. {
  69. EditorGUILayout.PropertyField(density, EditorStrings.DustParticles.Density);
  70. EditorGUILayout.PropertyField(spawnMinDistance, EditorStrings.DustParticles.SpawnMinDistance);
  71. EditorGUILayout.PropertyField(spawnMaxDistance, EditorStrings.DustParticles.SpawnMaxDistance);
  72. if (VolumetricDustParticles.isFeatureSupported)
  73. {
  74. var infos = "Particles count:\nCurrent: ";
  75. if (AreParticlesInfosUpdated()) infos += particles.particlesCurrentCount;
  76. else infos += "(playtime only)";
  77. if (particles.isCulled)
  78. infos += string.Format(" (culled by '{0}')", particles.mainCamera.name);
  79. infos += string.Format("\nMax: {0}", particles.particlesMaxCount);
  80. EditorGUILayout.HelpBox(infos, MessageType.Info);
  81. }
  82. }
  83. FoldableHeader.End();
  84. if (FoldableHeader.Begin(this, EditorStrings.DustParticles.HeaderInfos))
  85. {
  86. EditorGUILayout.HelpBox(EditorStrings.DustParticles.HelpRecommendation, MessageType.Info);
  87. }
  88. FoldableHeader.End();
  89. serializedObject.ApplyModifiedProperties();
  90. }
  91. }
  92. }
  93. #endif