// ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ protected bool EventField(exUIControl.EventTrigger _eventTrigger) { bool deleted = false; GUILayout.BeginHorizontal(); GUILayout.Space(4f); GUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); // name GUILayout.Toggle(true, _eventTrigger.name, "dragtab"); // delete if (GUILayout.Button(styles.iconToolbarMinus, "InvisibleButton", GUILayout.Width(styles.iconToolbarMinus.width), GUILayout.Height(styles.iconToolbarMinus.height))) { deleted = true; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal("AS TextArea", GUILayout.MinHeight(10f)); GUILayout.BeginVertical(); // slots for (int i = 0; i < _eventTrigger.slots.Count; ++i) { exUIControl.SlotInfo slotInfo = SlotField(_eventTrigger.slots[i]); if (slotInfo == null) { _eventTrigger.slots.RemoveAt(i); --i; EditorUtility.SetDirty(target); } } // new slot EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GameObject receiver = EditorGUILayout.ObjectField(null, typeof(GameObject), true, GUILayout.Width(150)) as GameObject; if (receiver != null) { exUIControl.SlotInfo slotInfo = new exUIControl.SlotInfo(); slotInfo.receiver = receiver; _eventTrigger.slots.Add(slotInfo); EditorUtility.SetDirty(target); } GUILayout.Label(styles.iconToolbarPlus, GUILayout.Width(20)); EditorGUILayout.EndHorizontal(); GUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.Space(4f); GUILayout.EndHorizontal(); return(deleted); }
// ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ protected exUIControl.SlotInfo SlotField(exUIControl.SlotInfo _slot) { exUIControl.SlotInfo slot = _slot; System.Type[] parameterTypes = new System.Type[] { typeof(exUIEvent) }; EditorGUILayout.BeginHorizontal(); // receiver EditorGUI.BeginChangeCheck(); slot.receiver = EditorGUILayout.ObjectField(slot.receiver, typeof(GameObject), true) as GameObject; if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(target); } if (slot.receiver != null) { // get valid methods List <string> methodNames = new List <string>(); methodNames.Add("None"); MonoBehaviour[] allMonoBehaviours = slot.receiver.GetComponents <MonoBehaviour>(); for (int i = 0; i < allMonoBehaviours.Length; ++i) { MonoBehaviour monoBehaviour = allMonoBehaviours[i]; // don't get method from control if (monoBehaviour is exUIControl) { continue; } MethodInfo[] methods = monoBehaviour.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); for (int m = 0; m < methods.Length; ++m) { MethodInfo mi = methods[m]; ParameterInfo[] miParameterTypes = mi.GetParameters(); if (mi.ReturnType == typeof(void) && miParameterTypes.Length == parameterTypes.Length) { bool notMatch = false; for (int p = 0; p < miParameterTypes.Length; ++p) { if (miParameterTypes[p].ParameterType != parameterTypes[p]) { notMatch = true; break; } } if (notMatch == false && methodNames.IndexOf(mi.Name) == -1) { methodNames.Add(mi.Name); } } } } EditorGUI.BeginChangeCheck(); int choice = methodNames.IndexOf(_slot.method); choice = EditorGUILayout.Popup(choice == -1 ? 0 : choice, methodNames.ToArray(), GUILayout.Width(100)); if (EditorGUI.EndChangeCheck()) { _slot.method = methodNames[choice]; EditorUtility.SetDirty(target); } } else { slot = null; } // Delete if (GUILayout.Button(styles.iconToolbarMinus, "InvisibleButton", GUILayout.Width(20f))) { slot = null; } GUILayout.Space(3f); EditorGUILayout.EndHorizontal(); return(slot); }
// ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ protected bool EventField( exUIControl.EventTrigger _eventTrigger ) { bool deleted = false; GUILayout.BeginHorizontal(); GUILayout.Space(4f); GUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); // name GUILayout.Toggle( true, _eventTrigger.name, "dragtab"); // delete if ( GUILayout.Button( styles.iconToolbarMinus, "InvisibleButton", GUILayout.Width(styles.iconToolbarMinus.width), GUILayout.Height(styles.iconToolbarMinus.height) ) ) { deleted = true; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal("AS TextArea", GUILayout.MinHeight(10f)); GUILayout.BeginVertical(); // slots for ( int i = 0; i < _eventTrigger.slots.Count; ++i ) { exUIControl.SlotInfo slotInfo = SlotField ( _eventTrigger.slots[i] ); if ( slotInfo == null ) { _eventTrigger.slots.RemoveAt(i); --i; EditorUtility.SetDirty(target); } } // new slot EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GameObject receiver = EditorGUILayout.ObjectField( null, typeof(GameObject), true, GUILayout.Width(150) ) as GameObject; if ( receiver != null ) { exUIControl.SlotInfo slotInfo = new exUIControl.SlotInfo(); slotInfo.receiver = receiver; _eventTrigger.slots.Add(slotInfo); EditorUtility.SetDirty(target); } GUILayout.Label( styles.iconToolbarPlus, GUILayout.Width(20) ); EditorGUILayout.EndHorizontal(); GUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.Space(4f); GUILayout.EndHorizontal(); return deleted; }