public override void OnInspectorGUI() { base.OnInspectorGUI(); Target = target as BindingBase; if (!Application.isPlaying) Target.FindContext(); if (Target.Context == null) { EditorGUILayout.LabelField("BindingContext not found."); PropertyTextInputs(); } else if (Target.Context.DataType == null) { EditorGUILayout.LabelField("BindingContext.DataType not found."); PropertyTextInputs(); } else { Target.Init(); foreach (var binding in Target.GetBindingInfos()) { if (binding.ShouldShow != null && !binding.ShouldShow()) continue; PropertyDropDown(binding); } } }
void PropertyDropDown(BindingBase.BindingInfo info) { var type = Target.Context.DataType; var members = new MemberInfo[0]; var instance = Target.Context.DataInstance; Foundation.Databinding.Components.ObservableGameObject obsGO = instance as Foundation.Databinding.Components.ObservableGameObject; if(obsGO != null) { members = obsGO.GetMethods(); } else { // filter switch (info.Filters) { case BindingBase.BindingFilter.Commands: members = EditorMembersHelper.GetMethods(type); break; case BindingBase.BindingFilter.Properties: members = EditorMembersHelper.GetProperties(type); break; } } //filter if (info.FilterTypes != null) { members = members.Where(o => info.FilterTypes.Any(t => ValidType(t, o.GetParamaterType()))).ToArray(); } if (members.Length == 0) { EditorGUILayout.LabelField(string.Format("{0}->{1} has no valid members.", info.BindingName, type.Name)); return; } var labels = members.Select(o => string.Format("{0} : {1}", o.Name, o.GetParamaterType())).ToList(); var names = members.Select(o => o.Name).ToList(); labels.Insert(0, "Null"); names.Insert(0, ""); var index = Array.IndexOf(names.ToArray(), info.MemberName); var i = EditorGUILayout.Popup(info.BindingName, index, labels.ToArray()); if (i != index) { info.MemberName = names[i]; EditorUtility.SetDirty(target); } }