You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.9 KiB

using UnityEditor;
using UnityEditorInternal;
using UnityEngine;
namespace uc
{
[CanEditMultipleObjects, CustomEditor(typeof(Activity), false)]
public class ActivityEditor : ActivityBaseEditor
{
SerializedProperty m_IdleTimeProperty;
GUIContent m_IdelTimeLabel;
SerializedProperty m_CanvasActivitiesProperty;
ReorderableList m_CanvasActivitiesList;
Activity activity;
protected override void OnEnable()
{
base.OnEnable();
activity = target as Activity;
m_IdleTimeProperty = serializedObject.FindProperty("idleTime");
m_IdelTimeLabel = new GUIContent("Idle Time", "activity maximum idle time (only work in ActivityManager idle mode)");
m_CanvasActivitiesProperty = serializedObject.FindProperty("canvases");
m_CanvasActivitiesList = new ReorderableList(serializedObject, m_CanvasActivitiesProperty, true, true, true, true);
m_CanvasActivitiesList.drawHeaderCallback = rect =>
{
EditorGUI.LabelField(rect, "Owned Canvas Activities");
};
m_CanvasActivitiesList.drawElementCallback = (rect, index, active, focused) =>
{
SerializedProperty prefab = m_CanvasActivitiesProperty.GetArrayElementAtIndex(index);
CanvasActivity go = (CanvasActivity)prefab.objectReferenceValue;
GUIContent label;
if (go == null)
{
label = new GUIContent("Empty", "Drag a GameObject here");
}
else
{
label = new GUIContent(go.name);
}
float shrink = 0.2f;
rect.y += rect.height * shrink * 0.4f;
rect.height *= (1.0f - shrink);
var newCanvas = (CanvasActivity)EditorGUI.ObjectField(rect, label, go, typeof(CanvasActivity), true);
if (newCanvas == null)
{
activity.canvases[index] = null;
EditorUtility.SetDirty(target);
return;
}
if (activity.canvases[index] != newCanvas)
{
activity.canvases[index] = newCanvas;
EditorUtility.SetDirty(target);
}
};
}
public override void OnInspectorGUI()
{
EditorGUILayout.Space();
serializedObject.Update();
DrawActivityInspectorGUI();
DrawEventInspectorGUI();
serializedObject.ApplyModifiedProperties();
}
public void DrawActivityInspectorGUI()
{
EditorGUILayout.PropertyField(m_IdleTimeProperty, m_IdelTimeLabel);
EditorGUILayout.Space();
m_CanvasActivitiesList.DoLayoutList();
}
}
}