コード例 #1
0
    public override void OnInspectorGUI()
    {
        if (target == null || EditorApplication.isPlaying)
        {
            return;
        }

        base.OnInspectorGUI();

        if (string.IsNullOrEmpty(group.Name))
        {
            group.Name = group.gameObject.name;
        }
        if (string.IsNullOrEmpty(group.ClassName))
        {
            group.ClassName = group.gameObject.name;
        }

        MLuaUIPanel panel       = MFindHelper.GetParentComponent <MLuaUIPanel>(group.transform);
        MLuaUIGroup parentGroup = MFindHelper.GetParentComponent <MLuaUIGroup>(group.transform);

        if (GUILayout.Button("标准化", GUILayout.Height(20)))
        {
            MLuaUIGroup[] cacheGroups     = null;
            MLuaUICom[]   cacheComponents = null;
            FillComponents(group.gameObject, ref cacheGroups, ref cacheComponents);
        }

        if (GUILayout.Button("生成Lua模版代码", GUILayout.Height(20)))
        {
            CreateScript();
        }
    }
コード例 #2
0
    //得到当前Group的Code
    public static Dictionary <string, string> GetGroupCodes(MLuaUIGroup group, string keyHead, string valueHead)
    {
        Dictionary <string, string> codes = new Dictionary <string, string>();

        Dictionary <string, string> comRefsCodes = GetComRefsCodes(group.ComRefs);

        foreach (var item in comRefsCodes)
        {
            string key   = keyHead + item.Key;
            string value = null;
            if (!string.IsNullOrEmpty(item.Value))
            {
                value = valueHead + item.Value;
            }
            codes[key] = value;
        }

        //当前Group中还有Groups时,得到Group中的Groups的Code
        if (group.Groups.Length > 0)
        {
            var groupsCodes = GetGroupsCodes(group.Groups, keyHead, valueHead);
            MDictionaryHelper.AddRange(codes, groupsCodes);
        }
        return(codes);
    }
コード例 #3
0
    //对组件的名字进行检测
    //当名字没有相同的时候通过检测
    public static void NameRepetitionDetection(MLuaUICom[] coms, MLuaUIGroup[] groups)
    {
        Dictionary <string, List <int> > cacheName = new Dictionary <string, List <int> >();

        for (int i = 0; i < coms.Length; i++)
        {
            MLuaUICom com = coms[i];
            if (com.IsArray)
            {
                if (!cacheName.ContainsKey(com.Name))
                {
                    cacheName[com.Name] = new List <int>();
                    cacheName[com.Name].Add(i);
                }
            }
            else
            {
                if (!cacheName.ContainsKey(com.Name))
                {
                    cacheName[com.Name] = new List <int>();
                }
                cacheName[com.Name].Add(i);
            }
        }
        for (int i = 0; i < groups.Length; i++)
        {
            MLuaUIGroup group = groups[i];
            if (!cacheName.ContainsKey(group.Name))
            {
                cacheName[group.Name] = new List <int>();
            }
            cacheName[group.Name].Add(i + 20000);
            NameRepetitionDetection(group.ComRefs, group.Groups);
        }

        bool          isPassDetection = true;
        StringBuilder builder         = new StringBuilder();

        foreach (var item in cacheName)
        {
            if (item.Value.Count > 1)
            {
                builder.Append(item.Key);
                builder.Append(":\n");
                for (int i = 0; i < item.Value.Count; i++)
                {
                    int index = item.Value[i];
                    if (index >= 20000)
                    {
                        builder.Append("  Groups:");
                        index -= 20000;
                    }
                    else
                    {
                        builder.Append("  ComRefs:");
                    }
                    builder.Append(index);
                    builder.Append("\n");
                }
                isPassDetection = false;
            }
        }

        if (!isPassDetection)
        {
            EditorUtility.DisplayDialog("有名字重复的组件,请解决", builder.ToString(), "确定");
        }
    }
コード例 #4
0
    //得到此物体可包含的MLuaUIGroup和MLuaUICom
    public static KeyValuePair <MLuaUIGroup[], MLuaUICom[]> GetGroupsAndComs(GameObject go)
    {
        MLuaUIGroup[]      h      = go.GetComponentsInChildren <MLuaUIGroup>(true);
        List <MLuaUIGroup> groups = new List <MLuaUIGroup>(h);

        Dictionary <MLuaUIGroup, List <MLuaUICom> >   comInGroup   = new Dictionary <MLuaUIGroup, List <MLuaUICom> >();
        Dictionary <MLuaUIGroup, List <MLuaUIGroup> > groupInGroup = new Dictionary <MLuaUIGroup, List <MLuaUIGroup> >();
        List <MLuaUIGroup> panelGroup = new List <MLuaUIGroup>();

        for (int i = 0; i < groups.Count; i++)
        {
            comInGroup[groups[i]]   = new List <MLuaUICom>();
            groupInGroup[groups[i]] = new List <MLuaUIGroup>();
        }
        for (int i = 0; i < groups.Count; i++)
        {
            MLuaUIGroup parentGroup = MFindHelper.GetParentComponent <MLuaUIGroup>(groups[i].transform, go.transform);
            //如果Group父物体有Group则放入父物体Group中
            if (parentGroup != null && groupInGroup.ContainsKey(parentGroup))
            {
                groupInGroup[parentGroup].Add(groups[i]);
            }
            else
            {
                //没有则放入Panel的Group中
                panelGroup.Add(groups[i]);
            }
        }

        foreach (var item in groupInGroup)
        {
            item.Key.Groups = item.Value.ToArray();
        }

        MLuaUICom[]      components = go.GetComponentsInChildren <MLuaUICom>(true);
        List <MLuaUICom> comList    = new List <MLuaUICom>();

        for (int i = 0; i < components.Length; i++)
        {
            components[i].UIPanel = go.GetComponent <MLuaUIPanel>();
            MLuaUIGroup parentGroup = components[i].GetComponent <MLuaUIGroup>();
            if (parentGroup == null)
            {
                parentGroup = MFindHelper.GetParentComponent <MLuaUIGroup>(components[i].transform, go.transform);
            }
            //如果Component父物体有Group则放入父物体Group中
            if (parentGroup != null && comInGroup.ContainsKey(parentGroup))
            {
                comInGroup[parentGroup].Add(components[i]);
            }
            else
            {
                //没有则放入Panel的ComRefs中
                comList.Add(components[i]);
            }
        }
        foreach (var item in comInGroup)
        {
            item.Key.ComRefs = item.Value.ToArray();
        }

        MLuaUICom[] coms = comList.ToArray();
        //如果自己身上有MLuaUIGroup,做下处理
        //MLuaUIGroup selfGroup = go.GetComponent<MLuaUIGroup>();
        //if (selfGroup != null)
        //{
        //    panelGroup.Remove(selfGroup);
        //    coms = selfGroup.ComRefs;
        //}

        KeyValuePair <MLuaUIGroup[], MLuaUICom[]> data = new KeyValuePair <MLuaUIGroup[], MLuaUICom[]>(panelGroup.ToArray(), coms);

        return(data);
    }