Ejemplo n.º 1
0
    /// <summary>
    /// 绘制数组
    /// </summary>
    /// <param name="name"></param>
    /// <param name="data"></param>
    /// <param name="addCustomData">自定义添加新的Item</param>
    /// <param name="ItemChnageCallBack">当Item添加或删除时回调</param>
    /// <param name="customDrawItem">自定义绘制Item</param>
    /// <returns></returns>
    public static object DrawArray(GUIContent name, object data, CallBackR <object> addCustomData = null, CallBack <bool, object> ItemChnageCallBack = null, CallBackR <object, object> customDrawItem = null)
    {
        if (data == null)
        {
            DrawLableString(name, "Null");
            return(null);
        }

        Type   type = data.GetType();
        string ts   = type.FullName.Replace("[]", "");

        type = ReflectionUtils.GetTypeByTypeFullName(ts);
        var    typeList     = typeof(List <>);
        Type   typeDataList = typeList.MakeGenericType(type);
        object instance     = Activator.CreateInstance(typeDataList);

        MethodInfo AddRange = typeDataList.GetMethod("AddRange");

        AddRange.Invoke(instance, new object[] { data });
        instance = DrawList(name, instance, addCustomData, ItemChnageCallBack, customDrawItem);

        MethodInfo ToArray = typeDataList.GetMethod("ToArray");

        return(ToArray.Invoke(instance, null));
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 绘制数组
    /// </summary>
    /// <param name="name"></param>
    /// <param name="data"></param>
    /// <returns></returns>
    public static object DrawArray(string name, object data, CallBackR <object> addCustomData = null, CallBack <bool, object> ItemChnageCallBack = null, EditorUIOpenState openState = EditorUIOpenState.NoOpen, UIStateData uIStateData = null)
    {
        if (data == null)
        {
            Debug.LogError("data is null");
            return(null);
        }
        if (uIStateData == null)
        {
            uIStateData = EditorUIStateData.GetRootUIState(data.GetHashCode(), openState);
        }

        Type   type = data.GetType();
        string ts   = type.FullName.Replace("[]", "");

        type = ReflectionUtils.GetTypeByTypeFullName(ts);
        var    typeList     = typeof(List <>);
        Type   typeDataList = typeList.MakeGenericType(type);
        object instance     = Activator.CreateInstance(typeDataList);

        MethodInfo AddRange = typeDataList.GetMethod("AddRange");

        AddRange.Invoke(instance, new object[] { data });
        instance = DrawList(name, instance, addCustomData, ItemChnageCallBack, openState, uIStateData);

        MethodInfo ToArray = typeDataList.GetMethod("ToArray");

        return(ToArray.Invoke(instance, null));
    }
Ejemplo n.º 3
0
    void ShowInfoGUI <T>(T[] info, ref T selectT, CallBackR <string, T> detailNameButtonGUICallBack, CallBack <T> detailInfoGUICallBack, CallBack <T> followFuctionButonUIExtend = null) where T : MemberInfo
    {
        if (info == null)
        {
            return;
        }
        foreach (var f in info)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Space(8);
            bool   select = f.Equals(selectT);
            string str    = select ? "▼" : "►";
            str += " " + detailNameButtonGUICallBack(f);
            GUIStyle style = "hostview";
            style.richText  = true;
            style.alignment = TextAnchor.MiddleLeft;
            style.fontSize  = 14;
            if (GUILayout.Button(str, style))
            {
                if (select)
                {
                    selectT = null;
                }
                else
                {
                    selectT = f;
                }
            }
            if (followFuctionButonUIExtend != null)
            {
                followFuctionButonUIExtend(f);
            }

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal("Label");
            GUILayout.Space(5);

            if (select)
            {
                GUILayout.Space(5);
                GUILayout.BeginVertical("box");
                ShowLabel("定义", detailNameButtonGUICallBack(f));
                if (detailInfoGUICallBack != null)
                {
                    detailInfoGUICallBack(f);
                }
                GUILayout.EndVertical();
            }

            GUILayout.EndHorizontal();
            GUILayout.Space(5);
        }
    }
Ejemplo n.º 4
0
    public AssetsData LoadAssetsLogic(string path, CallBackR <bool> checkContainsAssets, CallBackR <AssetsData, string> loadMethod)
    {
        LoadAssetsDependencie(path);
        AssetsData assets = null;

        if (checkContainsAssets())
        {
            assets = assetsCaches[path];
        }
        else
        {
            assets = loadMethod(path);
            if (assets == null)
            {
                Debug.LogError("资源加载失败:" + path);
                return(assets);
            }
            else
            {
                if (assetsCaches.ContainsKey(path))
                {
                    List <Object> asList = new List <Object>(assetsCaches[path].Assets);
                    foreach (var item in assets.Assets)
                    {
                        if (!asList.Contains(item))
                        {
                            asList.Add(item);
                        }
                    }
                    assetsCaches[path].Assets = asList.ToArray();
                    assets = assetsCaches[path];
                }
                else
                {
                    if (useCache)
                    {
                        assetsCaches.Add(path, assets);
                    }
                }
            }
        }
        if (useCache)
        {
            assets.refCount++;
            AssetsUnloadHandler.MarkUseAssets(assets, loader.IsHaveDependencies(path));
        }
        return(assets);
    }
Ejemplo n.º 5
0
 public void ListForeachNode(CallBackR <bool, T> eachItemCallBack)
 {
     for (int i = 0; i < TreeDataList.Count; i++)
     {
         if (eachItemCallBack != null)
         {
             T t = TreeDataList[i];
             if (t == rootNode)
             {
                 continue;
             }
             if (!eachItemCallBack(t))
             {
                 break;
             }
         }
     }
 }
Ejemplo n.º 6
0
    public void SearchChilds(T node, CallBackR <bool, T> eachItemCallBack)
    {
        if (node == null)
        {
            return;
        }

        List <int> idList = node.childs;

        for (int i = 0; i < idList.Count; i++)
        {
            T n = GetNode(idList[i]);

            if (eachItemCallBack(n))
            {
                SearchChilds(n, eachItemCallBack);
            }
        }
    }
Ejemplo n.º 7
0
    void LayerTagDataShowGUI(string name, List <string> data, CallBackR <bool, string> addNewDataCallBack, CallBackR <bool, string> deleteCallBack)
    {
        GUILayout.BeginHorizontal();
        GUILayout.Label(name);
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("+", GUILayout.Width(20)))
        {
            string s   = "new " + name + data.Count;
            bool   res = addNewDataCallBack(s);
            if (!res)
            {
                s += "_1";
                addNewDataCallBack(s);
            }
        }
        GUILayout.EndHorizontal();

        for (int i = 0; i < data.Count; i++)
        {
            GUILayout.BeginHorizontal("box");
            GUILayout.Label("   " + data[i]);
            bool isDefult = data[i] == "None" ? true : false;
            if (!isDefult)
            {
                if (GUILayout.Button("ReName"))
                {
                    chooseRenameItem = data[i];
                    isRename         = true;
                    return;
                }

                if (GUILayout.Button("Delete"))
                {
                    deleteCallBack(data[i]);
                    return;
                }
            }
            GUILayout.EndHorizontal();
        }
    }
Ejemplo n.º 8
0
    /// <summary>
    /// 绘制List泛型
    /// </summary>
    /// <param name="name"></param>
    /// <param name="data"></param>
    /// <returns></returns>
    public static object DrawList(string name, object data, CallBackR <object> addCustomData = null, CallBack <bool, object> ItemChnageCallBack = null, EditorUIOpenState openState = EditorUIOpenState.NoOpen, UIStateData uIStateData = null)
    {
        if (data == null)
        {
            Debug.LogError("data is null");
            return(null);
        }
        if (uIStateData == null)
        {
            uIStateData = EditorUIStateData.GetRootUIState(data.GetHashCode(), openState);
        }

        Type type = data.GetType();
        Type t    = type.GetGenericArguments()[0];

        int count = (int)type.GetProperty("Count").GetValue(data, null);

        if (!string.IsNullOrEmpty(name))
        {
            name = name + "(List<" + t.Name + ">)  Count : " + count;
        }
        else
        {
            name = "";
        }

        bool isFold       = true;
        bool useStateData = false;

        if (uIStateData != null)
        {
            useStateData = true;
            isFold       = EditorGUILayout.Foldout(uIStateData.isFold, name);
        }
        else
        {
            GUILayout.Label(name);
        }

        MethodInfo methodInfo  = type.GetMethod("get_Item", BindingFlags.Instance | BindingFlags.Public);
        MethodInfo methodInfo1 = type.GetMethod("set_Item", BindingFlags.Instance | BindingFlags.Public);
        MethodInfo methodInfo2 = type.GetMethod("RemoveAt", BindingFlags.Instance | BindingFlags.Public);
        MethodInfo methodInfo3 = type.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public);


        if (isFold)
        {
            GUILayout.BeginVertical("box");
            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            if (CanEdit && GUILayout.Button("+", GUILayout.Width(50)))
            {
                object temp = null;
                if (addCustomData != null)
                {
                    object tempVV = addCustomData();
                    if (tempVV == null || tempVV.GetType().FullName != t.FullName)
                    {
                        temp = ReflectionUtils.CreateDefultInstance(t);
                    }
                    else
                    {
                        temp = tempVV;
                    }
                }
                else
                {
                    temp = ReflectionUtils.CreateDefultInstance(t);
                }
                methodInfo3.Invoke(data, new object[] { temp });
                if (ItemChnageCallBack != null)
                {
                    ItemChnageCallBack(true, temp);
                }
            }
            GUILayout.EndHorizontal();
        }

        if (count > 0)
        {
            if (isFold)
            {
                GUILayout.BeginVertical("box");
            }

            for (int i = 0; i < count; i++)
            {
                UIStateData uIStateData0 = null;
                if (uIStateData != null)
                {
                    uIStateData0 = uIStateData.editorUIStateData.GetNextStateData();
                }
                if (isFold)
                {
                    object da = methodInfo.Invoke(data, new object[] { i });
                    GUILayout.BeginHorizontal();

                    da = DrawBaseValue("" + i, da, openState, uIStateData0);

                    methodInfo1.Invoke(data, new object[] { i, da });

                    if (CanEdit && GUILayout.Button("-", GUILayout.Width(50)))
                    {
                        methodInfo2.Invoke(data, new object[] { i });
                        if (ItemChnageCallBack != null)
                        {
                            ItemChnageCallBack(false, da);
                        }
                        break;
                    }
                    GUILayout.EndHorizontal();
                }
            }

            if (isFold)
            {
                GUILayout.EndVertical();
            }
        }

        if (isFold)
        {
            GUILayout.EndVertical();
        }

        if (useStateData)
        {
            uIStateData.isFold = isFold;
        }
        return(data);
    }
Ejemplo n.º 9
0
 public static object DrawArray(string name, object data, CallBackR <object> addCustomData = null, CallBack <bool, object> ItemChnageCallBack = null, CallBackR <object, object> customDrawItem = null)
 {
     return(DrawArray(new GUIContent(name), data, addCustomData, ItemChnageCallBack, customDrawItem));
 }
Ejemplo n.º 10
0
    /// <summary>
    /// 绘制多页显示List数据
    /// </summary>
    /// <param name="name"></param>
    /// <param name="data"></param>
    /// <param name="addCustomData">自定义添加新的Item</param>
    /// <param name="ItemChnageCallBack">当Item添加或删除时回调</param>
    /// <param name="customDrawItem">自定义绘制Item</param>
    /// <returns></returns>
    public static int DrawPage(GUIContent name, int index, object data, CallBackR <object> addCustomData = null, CallBack <bool, object> ItemChnageCallBack = null, CallBackR <object, object> customDrawItem = null)
    {
        if (data == null)
        {
            DrawLableString(name, "Null");
            return(-1);
        }

        Type type = data.GetType();
        Type t    = type.GetGenericArguments()[0];

        int count = (int)type.GetProperty("Count").GetValue(data, null);
        //Debug.Log(name + "  count :" + count);

        MethodInfo methodInfo  = type.GetMethod("get_Item", BindingFlags.Instance | BindingFlags.Public);
        MethodInfo methodInfo1 = type.GetMethod("set_Item", BindingFlags.Instance | BindingFlags.Public);
        MethodInfo methodInfo2 = type.GetMethod("RemoveAt", BindingFlags.Instance | BindingFlags.Public);
        MethodInfo methodInfo3 = type.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public);
        MethodInfo methodInfo4 = type.GetMethod("Reverse", new Type[] { typeof(int), typeof(int) });

        GUILayout.BeginVertical("box");
        GUILayout.BeginHorizontal();
        GUILayout.Label(name);
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("<", GUILayout.Width(60)))
        {
            index--;
        }
        index = EditorGUILayout.IntField(index, GUILayout.Width(40));
        GUILayout.Label(index + "/" + (count - 1));
        if (GUILayout.Button(">", GUILayout.Width(60)))
        {
            index++;
        }
        GUILayout.FlexibleSpace();

        if (index <= 0)
        {
            index = 0;
        }
        if (index >= count)
        {
            index = count - 1;
        }

        if (CanEdit && GUILayout.Button("+", GUILayout.Width(50)))
        {
            object temp = null;
            if (addCustomData != null)
            {
                object tempVV = addCustomData();
                if (tempVV == null || tempVV.GetType().FullName != t.FullName)
                {
                    temp = ReflectionUtils.CreateDefultInstance(t);
                }
                else
                {
                    temp = tempVV;
                }
            }
            else
            {
                temp = ReflectionUtils.CreateDefultInstance(t);
            }
            methodInfo3.Invoke(data, new object[] { temp });
            if (ItemChnageCallBack != null)
            {
                ItemChnageCallBack(true, temp);
            }
        }
        GUILayout.EndHorizontal();


        if (count > 0)
        {
            GUILayout.BeginVertical("box");

            int    i  = index;
            object da = methodInfo.Invoke(data, new object[] { i });
            GUILayout.BeginHorizontal();
            GUILayout.BeginVertical();
            if (customDrawItem != null)
            {
                da = customDrawItem(da);
            }
            else
            {
                da = DrawBaseValue("" + i, da);
            }
            GUILayout.EndVertical();
            methodInfo1.Invoke(data, new object[] { i, da });
            if (CanEdit && GUILayout.Button("↑", GUILayout.Width(15)))
            {
                if (i != 0)
                {
                    methodInfo4.Invoke(data, new object[] { i - 1, 2 });
                }
            }
            if (CanEdit && GUILayout.Button("↓", GUILayout.Width(15)))
            {
                if (i != (count - 1))
                {
                    methodInfo4.Invoke(data, new object[] { i, 2 });
                }
            }
            if (CanEdit && GUILayout.Button("-", GUILayout.Width(30)))
            {
                methodInfo2.Invoke(data, new object[] { i });
                if (ItemChnageCallBack != null)
                {
                    ItemChnageCallBack(false, da);
                }
            }
            GUILayout.EndHorizontal();



            GUILayout.EndVertical();
        }
        GUILayout.EndVertical();

        return(index);
    }
Ejemplo n.º 11
0
 public static object DrawList(string name, object data, CallBackR <object> addCustomData = null, CallBack <bool, object> ItemChnageCallBack = null, CallBackR <object, object> customDrawItem = null, CallBackR <string, object> itemTitleName = null)
 {
     return(DrawList(new GUIContent(name), data, addCustomData, ItemChnageCallBack, customDrawItem, itemTitleName));
 }
Ejemplo n.º 12
0
    /// <summary>
    /// 绘制弹出菜单
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="name"></param>
    /// <param name="selectedStr"></param>
    /// <param name="displayedOptions"></param>
    /// <param name="selectChangeCallBack"></param>
    /// <param name="customShowItemTextCallBack">自定义显示的Item的选项内容</param>
    /// <returns></returns>
    public static T DrawPopup <T>(string name, T selectedStr, List <T> displayedOptions, CallBack <T> selectChangeCallBack = null, CallBackR <string, T> customShowItemTextCallBack = null)
    {
        if (displayedOptions == null || (displayedOptions.Count == 0))
        {
            return(default(T));
        }

        int selectedIndex = -1;

        if (displayedOptions.Contains(selectedStr))
        {
            selectedIndex = displayedOptions.IndexOf(selectedStr);
        }
        int recode = selectedIndex;

        if (selectedIndex == -1)
        {
            selectedIndex = 0;
        }
        GUIStyle style = new GUIStyle("Popup");

        style.richText = true;
        List <string> tempListStr = new List <string>();

        foreach (var item in displayedOptions)
        {
            if (customShowItemTextCallBack != null)
            {
                tempListStr.Add(customShowItemTextCallBack(item));
            }
            else
            {
                tempListStr.Add(item.ToString());
            }
        }
        selectedIndex = EditorGUILayout.Popup(name, selectedIndex, tempListStr.ToArray(), style);

        selectedStr = displayedOptions[selectedIndex];
        if (selectedIndex != recode)
        {
            if (selectChangeCallBack != null)
            {
                selectChangeCallBack(selectedStr);
            }
        }
        return(selectedStr);
    }
Ejemplo n.º 13
0
    /// <summary>
    /// 打开窗口
    /// </summary>
    /// <param name="title">标题</param>
    /// <param name="value">希望修改的数据</param>
    /// <param name="customDrawGUI">自定义GUI绘制</param>
    /// <param name="checkCanOkButtonCallBack">检查是否能使用"OK"按钮</param>
    /// <param name="modificationCompleteCallBack">完成修改回调</param>
    public static void OpenWindow(EditorWindow otherWindow, string title, object value, CallBackR <object, object> customDrawGUI, CallBackR <bool, object> checkCanOkButtonCallBack, CallBack <object> modificationCompleteCallBack)
    {
        win = GetWindow <GeneralDataModificationWindow>();
        win.wantsMouseMove           = true;
        win.autoRepaintOnSceneChange = true;
        win.otherWindow = otherWindow;
        FocusWindowIfItsOpen <GeneralDataModificationWindow>();

        win.m_Title = title;
        //win.value = value;
        win.modifi_Value = value;//.DeepCopySelf();

        win.customDrawGUI = customDrawGUI;
        win.modificationCompleteCallBack = modificationCompleteCallBack;
        win.checkCanOkButtonCallBack     = checkCanOkButtonCallBack;
    }
Ejemplo n.º 14
0
 public void TreeForeachNode(CallBackR <bool, T> eachItemCallBack)
 {
     SearchChilds(rootNode, eachItemCallBack);
 }
Ejemplo n.º 15
0
        /// <summary>
        /// 获取储存的实例
        /// </summary>
        /// <param name="getInstanceCallBackR">自定义实例生成,用于GameObject组件赋值</param>
        /// <returns></returns>
        public object GetValue(CallBackR <object, Type> getInstanceCallBackR = null)
        {
            if (string.IsNullOrEmpty(ScriptName))
            {
                return(null);
            }
            Type   type     = ReflectionUtils.GetTypeByTypeFullName(ScriptName);
            object classObj = null;

            if (getInstanceCallBackR != null)
            {
                classObj = getInstanceCallBackR(type);
            }
            else
            {
                classObj = ReflectionUtils.CreateDefultInstance(type);
            }

            BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;

            for (int i = 0; i < fieldValues.Count; i++)
            {
                BaseValue fInfo = fieldValues[i];
                FieldInfo f     = type.GetField(fInfo.name, flags);
                if (f != null && f.Name == fInfo.name)
                {
                    try
                    {
                        f.SetValue(classObj, fInfo.GetValue());
                    }
                    catch
                    {
                        continue;
                    }
                }
            }



            PropertyInfo[] propertyInfos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
            for (int i = 0; i < propertyInfos.Length; i++)
            {
                PropertyInfo property = propertyInfos[i];
                if (property.CanRead && property.CanWrite)
                {
                    try
                    {
                        for (int j = 0; j < propertyValues.Count; j++)
                        {
                            BaseValue pinfo = propertyValues[i];
                            if (property != null && property.Name == pinfo.name)
                            {
                                property.SetValue(classObj, pinfo.GetValue(), null);
                            }
                        }
                    }
                    catch
                    {
                        continue;
                    }
                }
            }

            return(classObj);
        }