예제 #1
0
        private void DrawElementTitle(FillerElement element, int index)
        {
            //title rect 宽 150
            Rect rect = new Rect((element.depth + 2) * 15, index * 20, 150, 15);

            if (element.hasChildren)
            {
                //有子节点的绘制展开标签
                string title = "";
                if (element.IsFold)
                {
                    title = "\u25BA" + element.name;
                }
                else
                {
                    title = "\u25BC" + element.name;
                }

                bool isFold = GUI.Toggle(rect, element.IsFold, title, "PreToolbar2");
                if (isFold != element.IsFold)
                {
                    element.IsFold = isFold;
                    Repaint();
                }
            }
            else
            {
                GUI.Label(rect, element.name);
            }
        }
예제 #2
0
        private void Recursive(Transform trans, int depth, List <FillerElement> dataList)
        {
            FillerElement element = new FillerElement();

            element.CachedTransform = trans;
            element.name            = trans.name;
            element.id             = trans.gameObject.GetInstanceID();
            element.depth          = depth;
            element.ComponentsDict = new Dictionary <string, bool>();

            List <string> componentNames = GetFilterdComponentNames(trans);

            foreach (var item in componentNames)
            {
                if (!element.ComponentsDict.ContainsKey(item))
                {
                    element.ComponentsDict.Add(item, false);
                }
            }

            dataList.Add(element);

            if (trans.childCount > 0)
            {
                depth++;
                for (int i = 0, length = trans.childCount; i < length; i++)
                {
                    Recursive(trans.GetChild(i), depth, dataList);
                }
            }
        }
예제 #3
0
        private void DrawButtons()
        {
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("Refresh", GUILayout.Width(80f)))
            {
                _filler.UpdateActionData();
            }

            if (GUILayout.Button("Execute", GUILayout.Width(80f)))
            {
                //复制一份数据,否则数据变化会导致无法使用foreach遍历
                List <FillerElement> newDataList = new List <FillerElement>();
                foreach (var item in _filler.DataList)
                {
                    FillerElement element = new FillerElement();
                    element.name               = item.name;
                    element.id                 = item.id;
                    element.depth              = item.depth;
                    element.CachedTransform    = item.CachedTransform;
                    element.GameObjectSelected = item.GameObjectSelected;
                    Dictionary <string, bool> componentDict = new Dictionary <string, bool>();
                    foreach (var innerItem in item.ComponentsDict)
                    {
                        componentDict.Add(innerItem.Key, innerItem.Value);
                    }
                    element.ComponentsDict = componentDict;
                    newDataList.Add(element);
                }
                _filler.Fill(newDataList);
            }
            EditorGUILayout.EndHorizontal();
        }
예제 #4
0
        private void DrawDataTree()
        {
            GUILayout.Space(5f);
            _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);
            EditorGUILayout.BeginHorizontal();
            FillerElement root    = _filler.DataRoot;
            int           index   = 0;
            int           columns = 0;

            RecursiveDraw(root, ref index, ref columns);

            GUILayout.Space(OPTIONS_LEFT_PADDING + columns * 120);
            EditorGUILayout.EndHorizontal();
            GUILayout.Space((index + 1) * 20);
            EditorGUILayout.EndScrollView();
        }
예제 #5
0
        private void RecursiveDraw(FillerElement element, ref int index, ref int columns)
        {
            DrawElementTitle(element, index);
            //绘制选择项
            if (element.name != _filler.ActionRoot.name)
            {
                DrawElementOptions(element, index, ref columns);
            }
            index++;

            if (element.IsFold == true || element.children == null)
            {
                return;
            }

            for (int i = 0, length = element.children.Count; i < length; i++)
            {
                RecursiveDraw((FillerElement)element.children[i], ref index, ref columns);
            }
        }
예제 #6
0
        private void DrawElementOptions(FillerElement element, int index, ref int columns)
        {
            //option 的 宽120,高15,
            Rect rectForSelf = new Rect(OPTIONS_LEFT_PADDING, index * 20, 120, 15);

            element.GameObjectSelected = GUI.Toggle(rectForSelf, element.GameObjectSelected, "self");

            Dictionary <string, bool> componentsDict = element.ComponentsDict;
            List <string>             keys           = new List <string>(componentsDict.Keys);

            for (int i = 0, length = keys.Count; i < length; i++)
            {
                Rect rectForComponent = new Rect(OPTIONS_LEFT_PADDING + (i + 1) * 120, index * 20, 120, 15);
                componentsDict[keys[i]] = GUI.Toggle(rectForComponent, componentsDict[keys[i]], keys[i]);
            }

            int currentColumns = keys.Count + 1;

            if (columns < currentColumns)
            {
                columns = currentColumns;
            }
        }
예제 #7
0
 public void UpdateActionData()
 {
     UpdateActionDataList();
     //todo 生成树形结构
     _actionDataRoot = TreeElementUtility.ListToTree <FillerElement>(_actionDataList);
 }