using UnityEngine;
using UnityEditor;
using UnityEditorInternal;
[CustomEditor(typeof(EventListener))]
public class CustomEventListener : Editor
{
private EventListener targetscript;
private ReorderableList reorderableList;
private void OnEnable()
{
targetscript = (EventListener)target;
reorderableList = new ReorderableList(serializedObject, serializedObject.FindProperty("eventsList"), true, true, true, true);
reorderableList.drawHeaderCallback += DrawHeader;
reorderableList.drawElementCallback += DrawElement;
reorderableList.elementHeightCallback += ElementHeightCallback;
reorderableList.onAddCallback += AddItem;
reorderableList.onRemoveCallback += RemoveItem;
}
public override void OnInspectorGUI()
{
//base.OnInspectorGUI();
GUILayout.Space(20);
reorderableList.DoLayoutList();
}
private void DrawHeader(Rect rect)
{
GUI.Label(rect, "Eventlist");
}
private void DrawElement(Rect rect, int index, bool active, bool focused)
{
EditorGUI.BeginChangeCheck();
EventTemplate item = targetscript.eventsList[index];
SerializedProperty unityeventprop = serializedObject.FindProperty("eventsList").GetArrayElementAtIndex(index).FindPropertyRelative("unityEvent");
SerializedProperty essentialprop = serializedObject.FindProperty("eventsList").GetArrayElementAtIndex(index).FindPropertyRelative("essential");
EditorGUILayout.BeginVertical();
item.templateName = EditorGUILayout.TextField("Event name", item.templateName);
item.delayTime = EditorGUILayout.FloatField( "Delay Time", item.delayTime);
item.sO = (SOClass)EditorGUILayout.ObjectField( "Scriptable Object", item.sO, typeof(SOClass), true);
item.audioclip = (AudioClip)EditorGUILayout.ObjectField("Audio", item.audioclip, typeof(AudioClip), true); ;
EditorGUILayout.PropertyField(essentialprop);
EditorGUILayout.PropertyField( unityeventprop);
EditorGUILayout.EndVertical();
if (EditorGUI.EndChangeCheck())
{
EditorUtility.SetDirty(target);
serializedObject.ApplyModifiedProperties();
}
}
private float ElementHeightCallback(int indexer)
{
float propertyHeight = EditorGUI.GetPropertyHeight(reorderableList.serializedProperty.GetArrayElementAtIndex(indexer), true);
return propertyHeight + 160;
}
private void AddItem(ReorderableList list)
{
targetscript.eventsList.Add(new EventTemplate());
EditorUtility.SetDirty(target);
}
private void RemoveItem(ReorderableList list)
{
targetscript.eventsList.RemoveAt(list.index);
EditorUtility.SetDirty(target);
}
private void OnDisable()
{
reorderableList.drawHeaderCallback -= DrawHeader;
reorderableList.drawElementCallback -= DrawElement;
reorderableList.onAddCallback -= AddItem;
reorderableList.onRemoveCallback -= RemoveItem;
}
}