Exemplo n.º 1
0
 private static void AddItem(UIResource resources, Type t, int maxUnnamedIndex)
 {
     UIResourceComponentItem[] res = new UIResourceComponentItem[resources.componentItems.Length + 1];
     Array.ConstrainedCopy(resources.componentItems, 0, res, 0, resources.componentItems.Length);
     res [res.Length - 1]          = new UIResourceComponentItem();
     res [res.Length - 1].typeName = t.FullName;
     res [res.Length - 1].key      = DefaultItemName + maxUnnamedIndex;
     resources.componentItems      = res;
 }
Exemplo n.º 2
0
 protected void OnDestroy()
 {
     if (m_IsDispose)
     {
         return;
     }
     m_IsDispose = true;
     if (resources != null && resources.componentItems != null)
     {
         for (int i = 0; i < resources.componentItems.Length; i++)
         {
             UIResourceComponentItem p_item = resources.componentItems[i];
             p_item.value = null;
             p_item       = null;
         }
         resources.componentItems = null;
     }
 }
Exemplo n.º 3
0
    private static bool DrawResource(UIResourceComponentItem r, ref int index)
    {
        bool delete = false;

        EditorGUILayout.BeginHorizontal();

        Color forecolor = GUI.color;

        GUI.color = Color.gray;
        index     = EditorGUILayout.DelayedIntField(index, GUILayout.Width(20));
        EditorGUILayout.LabelField(r.typeName, GUILayout.Width(140));
        GUI.color = forecolor;

        r.key = EditorGUILayout.TextField(r.key);

        Type t = string.IsNullOrEmpty(r.typeName) ? null : allowedTypes.FirstOrDefault(type => type.FullName == r.typeName);

        if (t == null || !t.IsSubclassOf(typeof(UnityEngine.Object)))
        {
            t = typeof(UnityEngine.Object);
        }
        UnityEngine.Object go = EditorGUILayout.ObjectField(r.value, t, true);
        //if (r.value == null && go != null && (string.IsNullOrEmpty(r.key) || r.key.StartsWith(DefaultItemName)))
        if (go != null && (string.IsNullOrEmpty(r.key) || Regex.IsMatch(r.key, "^[A-Z].*")))
        { // 为了保持一致
            string name = go.name;
            name  = name.Substring(0, 1).ToLower() + name.Substring(1);
            r.key = name;
        }
        r.value = go;

        Color color = GUI.color;

        GUI.color = Color.red;
        if (GUILayout.Button("X", GUILayout.Height(14), GUILayout.Width(50)))
        {
            delete = true;
        }
        GUI.color = color;
        EditorGUILayout.EndHorizontal();
        return(delete);
    }
Exemplo n.º 4
0
    protected static void DrawResources(UIResource resources)
    {
        int delete = -1;

        if (resources.componentItems == null)
        {
            resources.componentItems = new UIResourceComponentItem[] { }
        }
        ;
        UIResourceComponentItem[] items = resources.componentItems;

        int maxUnnamedIndex = 1;
        int moveFrom = 0, moveTo = 0;

        for (int i = 0; i < items.Length; i++)
        {
            if (items [i] == null)
            {
                items [i] = new UIResourceComponentItem();
            }
            if (!string.IsNullOrEmpty(items [i].key) && items [i].key.StartsWith(DefaultItemName))
            {
                int unnamedIndex = int.Parse(items [i].key.Substring(DefaultItemName.Length));
                if (unnamedIndex > 0)
                {
                    maxUnnamedIndex = Mathf.Max(unnamedIndex + 1, maxUnnamedIndex);
                }
            }
            int index = i;
            if (DrawResource(items[i], ref index))
            {
                delete = i;
            }
            if (index != i)
            {
                moveFrom = i;
                moveTo   = index;
            }
        }

        if (moveFrom != moveTo && moveFrom >= 0 && moveFrom < items.Length)
        {
            moveTo = Math.Max(0, Math.Min(items.Length, moveTo));
            List <UIResourceComponentItem> list = new List <UIResourceComponentItem> (items);
            var src = list [moveFrom];
            list.RemoveAt(moveFrom);
            if (moveTo < moveFrom)
            {
                list.Insert(moveTo, src);
            }
            else
            {
                list.Insert(moveTo - 1, src);
            }
            items = resources.componentItems = list.ToArray();
        }
        if (delete >= 0)
        {
            UIResourceComponentItem[] newItems = new UIResourceComponentItem[items.Length - 1];
            if (delete > 0)
            {
                Array.ConstrainedCopy(items, 0, newItems, 0, delete);
            }
            if (items.Length - delete - 1 > 0)
            {
                Array.ConstrainedCopy(items, delete + 1, newItems, delete, items.Length - delete - 1);
            }
            resources.componentItems = newItems;
        }

        GUILayout.Space(10);
        if (GUILayout.Button("Add"))
        {
            GenericMenu menu = new GenericMenu();
            for (int i = 0; i < allowedTypes.Length; i++)
            {
                Type t = allowedTypes [i];
                menu.AddItem(new GUIContent(t.Name), false, () => AddItem(resources, t, maxUnnamedIndex));
            }
            menu.ShowAsContext();
        }

        if (!CheckKeys(items))
        {
            EditorGUILayout.HelpBox("关键字不能重复或留空", MessageType.Warning);
        }
    }