185 lines
8.1 KiB
C#
185 lines
8.1 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
|
|
namespace Enviro
|
|
{
|
|
[CustomEditor(typeof(EnviroEffectsModule))]
|
|
public class EnviroEffectsModuleEditor : EnviroModuleEditor
|
|
{
|
|
private EnviroEffectsModule myTarget;
|
|
|
|
private SerializedProperty particeEmissionRateModifier , enviroEffectSystemType;
|
|
|
|
//On Enable
|
|
public override void OnEnable()
|
|
{
|
|
if(!target)
|
|
return;
|
|
|
|
myTarget = (EnviroEffectsModule)target;
|
|
serializedObj = new SerializedObject(myTarget);
|
|
preset = serializedObj.FindProperty("preset");
|
|
particeEmissionRateModifier = serializedObj.FindProperty("Settings.particeEmissionRateModifier");
|
|
enviroEffectSystemType = serializedObj.FindProperty("Settings.enviroEffectSystemType");
|
|
|
|
}
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
if(!target)
|
|
return;
|
|
|
|
base.OnInspectorGUI();
|
|
|
|
GUI.backgroundColor = baseModuleColor;
|
|
GUILayout.BeginVertical("",boxStyleModified);
|
|
GUI.backgroundColor = Color.white;
|
|
EditorGUILayout.BeginHorizontal();
|
|
myTarget.showModuleInspector = GUILayout.Toggle(myTarget.showModuleInspector, "Effects", headerFoldout);
|
|
|
|
GUILayout.FlexibleSpace();
|
|
if(GUILayout.Button("x", EditorStyles.miniButtonRight,GUILayout.Width(18), GUILayout.Height(18)))
|
|
{
|
|
EnviroManager.instance.RemoveModule(EnviroManager.ModuleType.Effects);
|
|
DestroyImmediate(this);
|
|
return;
|
|
}
|
|
|
|
EditorGUILayout.EndHorizontal();
|
|
|
|
if(myTarget.showModuleInspector)
|
|
{
|
|
RenderDisableInputBox();
|
|
serializedObj.UpdateIfRequiredOrScript ();
|
|
EditorGUI.BeginChangeCheck();
|
|
|
|
|
|
GUI.backgroundColor = categoryModuleColor;
|
|
GUILayout.BeginVertical("",boxStyleModified);
|
|
GUI.backgroundColor = Color.white;
|
|
|
|
GUILayout.Label("General", headerStyle);
|
|
|
|
#if ENVIRO_VFXGRAPH
|
|
if (GUILayout.Button("Deactivate VFX Graph Support"))
|
|
{
|
|
RemoveDefineSymbol("ENVIRO_VFXGRAPH");
|
|
}
|
|
#else
|
|
if (GUILayout.Button("Activate VFX Graph Support"))
|
|
{
|
|
AddDefineSymbol("ENVIRO_VFXGRAPH");
|
|
}
|
|
#endif
|
|
#if ENVIRO_VFXGRAPH
|
|
EditorGUILayout.PropertyField(enviroEffectSystemType);
|
|
#endif
|
|
GUILayout.Space(5);
|
|
DisableInputStartQuality();
|
|
EditorGUILayout.PropertyField(particeEmissionRateModifier);
|
|
DisableInputEndQuality();
|
|
GUILayout.EndVertical();
|
|
|
|
GUI.backgroundColor = categoryModuleColor;
|
|
GUILayout.BeginVertical("",boxStyleModified);
|
|
GUI.backgroundColor = Color.white;
|
|
|
|
myTarget.showSetupControls = GUILayout.Toggle(myTarget.showSetupControls, "Setup", headerFoldout);
|
|
if(myTarget.showSetupControls)
|
|
{
|
|
GUILayout.Space(10);
|
|
if (!Application.isPlaying)
|
|
{
|
|
if (GUILayout.Button ("Add"))
|
|
{
|
|
myTarget.Settings.effectTypes.Add (new EnviroEffectTypes ());
|
|
}
|
|
}
|
|
else
|
|
EditorGUILayout.LabelField ("Can't add effects in runtime!");
|
|
|
|
if (GUILayout.Button ("Apply Changes"))
|
|
{
|
|
myTarget.CreateEffects();
|
|
}
|
|
|
|
GUILayout.Space(10);
|
|
|
|
for (int i = 0; i < myTarget.Settings.effectTypes.Count; i++)
|
|
{
|
|
GUILayout.BeginVertical (myTarget.Settings.effectTypes[i].name, boxStyleModified);
|
|
GUILayout.Space(15);
|
|
Undo.RecordObject(target, "Effect Setup Changed");
|
|
myTarget.Settings.effectTypes[i].name = EditorGUILayout.TextField ("Effect Name", myTarget.Settings.effectTypes[i].name);
|
|
myTarget.Settings.effectTypes [i].emissionRate = EditorGUILayout.Slider("Emission", myTarget.Settings.effectTypes [i].emissionRate,0f,1f);
|
|
GUILayout.Space(15);
|
|
GUILayout.Label("Particle System", headerStyle);
|
|
myTarget.Settings.effectTypes[i].prefab = (GameObject)EditorGUILayout.ObjectField ("Effect Prefab", myTarget.Settings.effectTypes[i].prefab, typeof(GameObject), true);
|
|
myTarget.Settings.effectTypes [i].localPositionOffset = EditorGUILayout.Vector3Field ("Position Offset", myTarget.Settings.effectTypes [i].localPositionOffset);
|
|
myTarget.Settings.effectTypes [i].localRotationOffset = EditorGUILayout.Vector3Field ("Rotation Offset", myTarget.Settings.effectTypes [i].localRotationOffset);
|
|
myTarget.Settings.effectTypes [i].maxEmission = EditorGUILayout.FloatField ("Maximum Emission", myTarget.Settings.effectTypes [i].maxEmission);
|
|
#if ENVIRO_VFXGRAPH
|
|
GUILayout.Space(15);
|
|
GUILayout.Label("VFX Graph", headerStyle);
|
|
myTarget.Settings.effectTypes[i].prefabVFXGraph = (GameObject)EditorGUILayout.ObjectField ("Effect Prefab", myTarget.Settings.effectTypes[i].prefabVFXGraph, typeof(GameObject), true);
|
|
myTarget.Settings.effectTypes [i].localPositionOffsetVFXGraph = EditorGUILayout.Vector3Field ("Position Offset", myTarget.Settings.effectTypes [i].localPositionOffsetVFXGraph);
|
|
myTarget.Settings.effectTypes [i].localRotationOffsetVFXGraph = EditorGUILayout.Vector3Field ("Rotation Offset", myTarget.Settings.effectTypes [i].localRotationOffsetVFXGraph);
|
|
myTarget.Settings.effectTypes [i].maxEmissionVFXGraph = EditorGUILayout.FloatField ("Maximum Emission", myTarget.Settings.effectTypes [i].maxEmissionVFXGraph);
|
|
GUILayout.Space(10);
|
|
#endif
|
|
|
|
if (GUILayout.Button ("Remove"))
|
|
{
|
|
myTarget.Settings.effectTypes.Remove (myTarget.Settings.effectTypes[i]);
|
|
}
|
|
GUILayout.EndVertical ();
|
|
}
|
|
|
|
}
|
|
GUILayout.EndVertical();
|
|
|
|
/// Save Load
|
|
GUI.backgroundColor = categoryModuleColor;
|
|
GUILayout.BeginVertical("",boxStyleModified);
|
|
GUI.backgroundColor = Color.white;
|
|
myTarget.showSaveLoad = GUILayout.Toggle(myTarget.showSaveLoad, "Save/Load", headerFoldout);
|
|
|
|
if(myTarget.showSaveLoad)
|
|
{
|
|
EditorGUILayout.PropertyField(preset);
|
|
|
|
GUILayout.BeginHorizontal("",wrapStyle);
|
|
|
|
if(myTarget.preset != null)
|
|
{
|
|
if(GUILayout.Button("Load"))
|
|
{
|
|
myTarget.LoadModuleValues();
|
|
}
|
|
if(GUILayout.Button("Save"))
|
|
{
|
|
myTarget.SaveModuleValues(myTarget.preset);
|
|
}
|
|
}
|
|
if(GUILayout.Button("Save As New"))
|
|
{
|
|
myTarget.SaveModuleValues();
|
|
}
|
|
GUILayout.EndHorizontal();
|
|
}
|
|
GUILayout.EndVertical();
|
|
/// Save Load End
|
|
|
|
ApplyChanges ();
|
|
EditorUtility.SetDirty (target);
|
|
}
|
|
GUILayout.EndVertical();
|
|
|
|
if(myTarget.showModuleInspector)
|
|
GUILayout.Space(20);
|
|
}
|
|
}
|
|
}
|