rabidus-test/Assets/Dreamteck/Splines/Editor/Components/ParticleControllerEditor.cs

73 lines
3.5 KiB
C#
Raw Permalink Normal View History

2023-07-24 16:38:13 +03:00
namespace Dreamteck.Splines.Editor
{
using UnityEngine;
using System.Collections;
using UnityEditor;
[CustomEditor(typeof(ParticleController))]
[CanEditMultipleObjects]
public class ParticleControllerEditor : SplineUserEditor
{
protected override void BodyGUI()
{
base.BodyGUI();
ParticleController user = (ParticleController)target;
serializedObject.Update();
SerializedProperty _particleSystem = serializedObject.FindProperty("_particleSystem");
SerializedProperty emitPoint = serializedObject.FindProperty("emitPoint");
SerializedProperty offset = serializedObject.FindProperty("offset");
SerializedProperty volumetric = serializedObject.FindProperty("volumetric");
SerializedProperty pauseWhenNotVisible = serializedObject.FindProperty("pauseWhenNotVisible");
SerializedProperty applyRotation = serializedObject.FindProperty("apply3DRotation");
SerializedProperty emitFromShell = serializedObject.FindProperty("emitFromShell");
SerializedProperty scale = serializedObject.FindProperty("scale");
SerializedProperty motionType = serializedObject.FindProperty("motionType");
SerializedProperty wrapMode = serializedObject.FindProperty("wrapMode");
SerializedProperty minCycles = serializedObject.FindProperty("minCycles");
SerializedProperty maxCycles = serializedObject.FindProperty("maxCycles");
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(_particleSystem, new GUIContent("Particle System"));
if (_particleSystem.objectReferenceValue == null)
{
EditorGUILayout.HelpBox("No particle system is assigned", MessageType.Error);
return;
}
EditorGUILayout.PropertyField(pauseWhenNotVisible);
EditorGUILayout.PropertyField(emitPoint);
EditorGUILayout.PropertyField(offset);
EditorGUILayout.PropertyField(applyRotation);
EditorGUILayout.PropertyField(volumetric);
if (volumetric.boolValue)
{
EditorGUILayout.PropertyField(emitFromShell);
EditorGUILayout.PropertyField(scale);
}
EditorGUILayout.PropertyField(motionType);
if(motionType.intValue == (int)ParticleController.MotionType.FollowForward || motionType.intValue == (int)ParticleController.MotionType.FollowBackward)
{
EditorGUILayout.PropertyField(wrapMode);
EditorGUILayout.Space();
EditorGUILayout.LabelField("Path cycles (over " + user.particleSystemComponent.main.startLifetime.constantMax + "s.)", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(minCycles, new GUIContent("Min. Cycles"));
if (minCycles.floatValue < 0f) minCycles.floatValue = 0f;
EditorGUILayout.PropertyField(maxCycles, new GUIContent("Max. Cycles"));
if (maxCycles.floatValue < minCycles.floatValue) maxCycles.floatValue = minCycles.floatValue;
}
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
}
if (!Application.isPlaying)
{
EditorGUILayout.HelpBox("Particles may not work in the editor preview. Play the game to see the in-game result.", MessageType.Info);
}
}
}
}