using UnityEngine; using UnityEngine.PostProcessing; using System; using System.Linq.Expressions; namespace UnityEditor.PostProcessing { public class PostProcessingModelEditor { public PostProcessingModel target { get; internal set; } public SerializedProperty serializedProperty { get; internal set; } protected SerializedProperty m_SettingsProperty; protected SerializedProperty m_EnabledProperty; internal bool alwaysEnabled = false; internal PostProcessingProfile profile; internal PostProcessingInspector inspector; internal void OnPreEnable() { m_SettingsProperty = serializedProperty.FindPropertyRelative("m_Settings"); m_EnabledProperty = serializedProperty.FindPropertyRelative("m_Enabled"); OnEnable(); } public virtual void OnEnable() {} public virtual void OnDisable() {} internal void OnGUI() { GUILayout.Space(5); var display = alwaysEnabled ? EditorGUIHelper.Header(serializedProperty.displayName, m_SettingsProperty, Reset) : EditorGUIHelper.Header(serializedProperty.displayName, m_SettingsProperty, m_EnabledProperty, Reset); if (display) { EditorGUI.indentLevel++; using (new EditorGUI.DisabledGroupScope(!m_EnabledProperty.boolValue)) { OnInspectorGUI(); } EditorGUI.indentLevel--; } } void Reset() { var obj = serializedProperty.serializedObject; Undo.RecordObject(obj.targetObject, "Reset"); target.Reset(); EditorUtility.SetDirty(obj.targetObject); } public virtual void OnInspectorGUI() {} public void Repaint() { inspector.Repaint(); } protected SerializedProperty FindSetting(Expression> expr) { return m_SettingsProperty.FindPropertyRelative(ReflectionUtils.GetFieldPath(expr)); } protected SerializedProperty FindSetting(SerializedProperty prop, Expression> expr) { return prop.FindPropertyRelative(ReflectionUtils.GetFieldPath(expr)); } } }