11using System.Collections.Generic;
19 [CanEditMultipleObjects]
20 [CustomEditor(typeof(PropertyRecorder))]
30 private void drawProperties(SerializedProperty list) {
31 List<EditorCurveBinding> bindings =
null;
34 var parent =
target.transform.root.gameObject;
35 var singleBinding =
new List<EditorCurveBinding>(AnimationUtility.GetAnimatableBindings(
target.gameObject, parent));
36 if (bindings ==
null) {
37 bindings =
new List<EditorCurveBinding>(singleBinding);
39 for (
int i = bindings.Count; i-- != 0;) {
40 if (!singleBinding.Query().Any(t => t.propertyName == bindings[i].propertyName && t.type == bindings[i].type)) {
47 bindings = bindings.Query().
48 Where(t => t.type != typeof(PropertyRecorder) &&
49 t.type != typeof(GameObject) &&
50 t.type != typeof(Transform) &&
51 t.propertyName !=
"m_Enabled").
54 bool shouldOverride =
false;
55 bool overrideValue =
false;
57 EditorGUI.indentLevel++;
59 foreach (var binding
in bindings) {
60 bool isTypeExpanded =
targets.All(t => t.IsBindingExpanded(binding));
62 if (binding.type != currType) {
63 currType = binding.type;
64 shouldOverride =
false;
66 EditorGUI.indentLevel--;
67 EditorGUILayout.BeginHorizontal();
69 isTypeExpanded = EditorGUILayout.Foldout(isTypeExpanded, binding.type.Name);
71 target.SetBindingExpanded(binding, isTypeExpanded);
74 if (GUILayout.Button(
"Record All")) {
75 shouldOverride =
true;
79 if (GUILayout.Button(
"Clear All")) {
80 shouldOverride =
true;
81 overrideValue =
false;
84 EditorGUILayout.EndHorizontal();
85 EditorGUI.indentLevel++;
89 EditorGUI.showMixedValue = !
targets.Query().Select(t => t.IsBindingEnabled(binding)).AllEqual();
90 bool isEnabled =
target.IsBindingEnabled(binding);
92 EditorGUI.BeginChangeCheck();
93 isEnabled = EditorGUILayout.ToggleLeft(binding.propertyName, isEnabled);
95 if (EditorGUI.EndChangeCheck()) {
97 target.SetBindingEnabled(binding, isEnabled);
102 if (shouldOverride) {
104 target.SetBindingEnabled(binding, overrideValue);
109 EditorGUI.indentLevel--;
111 serializedObject.Update();
void hideField(string propertyName)
void specifyCustomDrawer(string propertyName, Action< SerializedProperty > propertyDrawer)
Specify a callback to be used to draw a specific named property. Should be called in OnEnable.