Files
beyond/Assets/ThirdParty/FluXY/Editor/FluxyTargetEditor.cs
2024-11-20 15:21:28 +01:00

215 lines
9.6 KiB
C#

using UnityEditor;
using UnityEngine;
namespace Fluxy
{
[CustomEditor(typeof(FluxyTarget), true), CanEditMultipleObjects]
public class FluxyTargetEditor : Editor
{
[MenuItem("GameObject/3D Object/FluXY/Target", false, 200)]
static void CreateFluxyTarget(MenuCommand menuCommand)
{
GameObject go = new GameObject("Target", typeof(FluxyTarget), typeof(SphereCollider));
GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
Undo.RegisterCreatedObjectUndo(go, "Create " + go.name);
Selection.activeObject = go;
}
SerializedProperty splatMaterial;
SerializedProperty rateOverSteps;
SerializedProperty rateOverTime;
SerializedProperty rateOverDistance;
SerializedProperty scaleWithDistance;
SerializedProperty scaleWithTransform;
SerializedProperty overridePosition;
SerializedProperty overrideRotation;
SerializedProperty position;
SerializedProperty rotation;
SerializedProperty scale;
SerializedProperty positionRandomness;
SerializedProperty scaleRandomness;
SerializedProperty rotationRandomness;
SerializedProperty velocityWeight;
SerializedProperty velocityTexture;
SerializedProperty maxRelativeVelocity;
SerializedProperty maxRelativeAngularVelocity;
SerializedProperty velocityScale;
SerializedProperty angularVelocityScale;
SerializedProperty force;
SerializedProperty torque;
SerializedProperty densityWeight;
SerializedProperty densityTexture;
SerializedProperty srcBlend;
SerializedProperty dstBlend;
SerializedProperty blendOp;
SerializedProperty color;
SerializedProperty noiseTexture;
SerializedProperty densityNoise;
SerializedProperty densityNoiseOffset;
SerializedProperty densityNoiseTiling;
SerializedProperty velocityNoise;
SerializedProperty velocityNoiseOffset;
SerializedProperty velocityNoiseTiling;
BooleanPreference splatFoldout;
BooleanPreference placementFoldout;
BooleanPreference velocityFoldout;
BooleanPreference densityFoldout;
BooleanPreference noiseFoldout;
public void OnEnable()
{
splatMaterial = serializedObject.FindProperty("splatMaterial");
rateOverSteps = serializedObject.FindProperty("rateOverSteps");
rateOverTime = serializedObject.FindProperty("rateOverTime");
rateOverDistance = serializedObject.FindProperty("rateOverDistance");
scaleWithDistance = serializedObject.FindProperty("scaleWithDistance");
scaleWithTransform = serializedObject.FindProperty("scaleWithTransform");
overridePosition = serializedObject.FindProperty("overridePosition");
overrideRotation = serializedObject.FindProperty("overrideRotation");
position = serializedObject.FindProperty("position");
rotation = serializedObject.FindProperty("rotation");
scale = serializedObject.FindProperty("scale");
positionRandomness = serializedObject.FindProperty("positionRandomness");
scaleRandomness = serializedObject.FindProperty("scaleRandomness");
rotationRandomness = serializedObject.FindProperty("rotationRandomness");
velocityWeight = serializedObject.FindProperty("velocityWeight");
velocityTexture = serializedObject.FindProperty("velocityTexture");
maxRelativeVelocity = serializedObject.FindProperty("maxRelativeVelocity");
maxRelativeAngularVelocity = serializedObject.FindProperty("maxRelativeAngularVelocity");
velocityScale = serializedObject.FindProperty("velocityScale");
angularVelocityScale = serializedObject.FindProperty("angularVelocityScale");
force = serializedObject.FindProperty("force");
torque = serializedObject.FindProperty("torque");
densityWeight = serializedObject.FindProperty("densityWeight");
densityTexture = serializedObject.FindProperty("densityTexture");
srcBlend = serializedObject.FindProperty("srcBlend");
dstBlend = serializedObject.FindProperty("dstBlend");
blendOp = serializedObject.FindProperty("blendOp");
color = serializedObject.FindProperty("color");
noiseTexture = serializedObject.FindProperty("noiseTexture");
velocityNoise = serializedObject.FindProperty("velocityNoise");
velocityNoiseOffset = serializedObject.FindProperty("velocityNoiseOffset");
velocityNoiseTiling = serializedObject.FindProperty("velocityNoiseTiling");
densityNoise = serializedObject.FindProperty("densityNoise");
densityNoiseOffset = serializedObject.FindProperty("densityNoiseOffset");
densityNoiseTiling = serializedObject.FindProperty("densityNoiseTiling");
splatFoldout = new BooleanPreference($"{target.GetType()}.splatFoldout", true);
placementFoldout = new BooleanPreference($"{target.GetType()}.placementFoldout", true);
velocityFoldout = new BooleanPreference($"{target.GetType()}.velocityFoldout", false);
densityFoldout = new BooleanPreference($"{target.GetType()}.densityFoldout", false);
noiseFoldout = new BooleanPreference($"{target.GetType()}.noiseFoldout", false);
}
public override void OnInspectorGUI()
{
serializedObject.UpdateIfRequiredOrScript();
EditorGUILayout.PropertyField(splatMaterial);
splatFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(splatFoldout, "Timing");
if (splatFoldout)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(rateOverSteps);
EditorGUILayout.PropertyField(rateOverTime);
EditorGUILayout.PropertyField(rateOverDistance);
EditorGUI.indentLevel--;
}
EditorGUILayout.EndFoldoutHeaderGroup();
placementFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(placementFoldout, "Placement");
if (placementFoldout)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(overridePosition);
if (overridePosition.boolValue)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(position);
EditorGUI.indentLevel--;
}
EditorGUILayout.PropertyField(positionRandomness);
EditorGUILayout.PropertyField(overrideRotation);
if (overrideRotation.boolValue)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(rotation);
EditorGUI.indentLevel--;
}
EditorGUILayout.PropertyField(rotationRandomness);
EditorGUILayout.PropertyField(scaleWithDistance);
EditorGUILayout.PropertyField(scaleWithTransform);
EditorGUILayout.PropertyField(scale);
EditorGUILayout.PropertyField(scaleRandomness);
EditorGUI.indentLevel--;
}
EditorGUILayout.EndFoldoutHeaderGroup();
velocityFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(velocityFoldout, "Velocity");
if (velocityFoldout)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(velocityWeight);
EditorGUILayout.PropertyField(velocityTexture);
EditorGUILayout.PropertyField(maxRelativeVelocity);
EditorGUILayout.PropertyField(maxRelativeAngularVelocity);
EditorGUILayout.PropertyField(velocityScale);
EditorGUILayout.PropertyField(angularVelocityScale);
EditorGUILayout.PropertyField(force);
EditorGUILayout.PropertyField(torque);
EditorGUI.indentLevel--;
}
EditorGUILayout.EndFoldoutHeaderGroup();
densityFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(densityFoldout, "Density");
if (densityFoldout)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(densityWeight);
EditorGUILayout.PropertyField(densityTexture);
EditorGUILayout.PropertyField(srcBlend);
EditorGUILayout.PropertyField(dstBlend);
EditorGUILayout.PropertyField(blendOp);
EditorGUILayout.PropertyField(color);
EditorGUI.indentLevel--;
}
EditorGUILayout.EndFoldoutHeaderGroup();
noiseFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(noiseFoldout, "Noise");
if (noiseFoldout)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(noiseTexture);
EditorGUILayout.PropertyField(velocityNoise);
EditorGUILayout.PropertyField(velocityNoiseOffset);
EditorGUILayout.PropertyField(velocityNoiseTiling);
EditorGUILayout.PropertyField(densityNoise);
EditorGUILayout.PropertyField(densityNoiseOffset);
EditorGUILayout.PropertyField(densityNoiseTiling);
EditorGUI.indentLevel--;
}
EditorGUILayout.EndFoldoutHeaderGroup();
if (GUI.changed)
serializedObject.ApplyModifiedProperties();
}
}
}