Пример #1
0
    // ------------------------------------------------------------------
    // 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);
    }
Пример #2
0
    // ------------------------------------------------------------------
    // 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);
    }
Пример #3
0
    // ------------------------------------------------------------------
    // 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;
    }