public static void Draw(SerializedObject serializedObject, Binding binding, TypeItemsBuilder typeItemsBuilder) { eGUI.BeginColors(); eGUI.SetColor(eGUI.azureLt); EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(binding.useBindingRoot))); if (!binding.useBindingRoot) { EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(binding.sourceObject)), new GUIContent("Source")); } if (binding.sourceObject == null) { if (binding.useBindingRoot) { eGUI.TextEditor(ref binding.sourceMember, "Member"); } else { DrawSourceSelectorOfGameObject(binding, binding.gameObject, typeItemsBuilder); // use this } } else { if (binding.useBindingRoot) { DrawSourceSelectorAsIs(binding, binding.sourceObject, typeItemsBuilder); } else // use flexible selection to allow to select any component in given GameObject { var cmp = binding.sourceObject as Component; if (cmp) { DrawSourceSelectorOfGameObject(binding, cmp.gameObject, typeItemsBuilder); } else { var go = binding.sourceObject as GameObject; if (go) { DrawSourceSelectorOfGameObject(binding, go, typeItemsBuilder); } else { DrawSourceSelectorAsIs(binding, binding.sourceObject, typeItemsBuilder); } } } } eGUI.EndColors(); }
private static void DrawSourceSelectorOfGameObject(Binding binding, GameObject go, TypeItemsBuilder typeItemsBuilder) { var items = new List <string>(); var names = new List <string>(); var sources = new List <Object>(); var indx = -1; typeItemsBuilder(binding, go, ref indx, items, names, sources); foreach (var cmp in go.GetComponents <Component>()) { typeItemsBuilder(binding, cmp, ref indx, items, names, sources); } var newIndx = EditorGUILayout.Popup("Member", indx, items.ToArray()); if (newIndx == indx) { return; } binding.sourceMember = names[newIndx]; binding.sourceObject = sources[newIndx]; }
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- private static void DrawSourceSelectorAsIs(Binding binding, Object sourceObject, TypeItemsBuilder typeItemsBuilder) { var items = new List <string>(); var names = new List <string>(); var sources = new List <Object>(); var indx = -1; typeItemsBuilder(binding, sourceObject, ref indx, items, names, sources); var newIndx = EditorGUILayout.Popup("Member", indx, items.ToArray()); if (newIndx == indx) { return; } binding.sourceMember = names[newIndx]; binding.sourceObject = sources[newIndx]; }