// 替换图片引用
        public void ReplaceImage(AssetData item, AssetData main)
        {
            //XmlNodeList xnList = xmlDocument.SelectNodes("/component/displayList/image[@src='" + item.id + "']");
            //foreach (XmlElement xn in xnList)
            //{
            //    xn.SetAttribute("src", main.id);
            //    xn.SetAttribute("pkg", main.package.id);
            //    xn.SetAttribute("fileName", main.fileNameForPackage);
            //}


            //xnList = xmlDocument.SelectNodes("/component/displayList/loader[@url='" + item.URL + "']");
            //foreach (XmlElement xn in xnList)
            //{
            //    xn.SetAttribute("url", main.URL);
            //}


            //xnList = xmlDocument.SelectNodes("/component/displayList/component/Label[@icon='" + item.URL + "']");
            //foreach (XmlElement xn in xnList)
            //{
            //    xn.SetAttribute("icon", main.URL);
            //}

            //xnList = xmlDocument.SelectNodes("/component/displayList/component/Button[@icon='" + item.URL + "']");
            //foreach (XmlElement xn in xnList)
            //{
            //    xn.SetAttribute("icon", main.URL);
            //}

            //xnList = xmlDocument.SelectNodes("/component/displayList/component/Button[@selectedIcon='" + item.URL + "']");
            //foreach (XmlElement xn in xnList)
            //{
            //    xn.SetAttribute("selectedIcon", main.URL);
            //}

            //xmlDocument.Save(pathForFull);

            ReplaceImage(item.URL, main.URL,
                         item.id, main.id,
                         item.package.id, main.package.id,
                         item.fileNameForPackage, main.fileNameForPackage
                         );
        }
Exemplo n.º 2
0
        public void SetImageExport(AssetData assetData, bool export)
        {
            XmlNodeList xnList = xmlDocument.SelectNodes("/packageDescription/resources/image[@id='" + assetData.id + "']");

            foreach (XmlElement xn in xnList)
            {
                if (export)
                {
                    xn.SetAttribute("exported", "true");
                }
                else if (xn.HasAttribute("exported"))
                {
                    xn.RemoveAttribute("exported");
                }
            }
            assetData.exported = export;

            xmlDocument.Save(pathForFull);
        }
Exemplo n.º 3
0
        private void DrawUseItem(int index, AssetData file)
        {
            int width  = 100;
            int height = 25;

            EditorGUILayout.BeginHorizontal(HStyle.boxTableHeadStyle);

            if (GUILayout.Button("依赖详情", HStyle.boxMiddleCenterStyle, GUILayout.Width(100), GUILayout.Height(height)))
            {
                FguiRefDetailsEditorWindow.Open(file);
            }


            if (GUILayout.Button("选中", HStyle.boxMiddleCenterStyle, GUILayout.Width(100), GUILayout.Height(height)))
            {
                Shell.ShowInExplorer(file.pathForFull);
                //Selection.activeObject = AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(file.pathForAssets);
            }

            bool export = GUILayout.Toggle(file.exported, "是否导出", GUILayout.Width(100), GUILayout.Height(height));

            if (export != file.exported)
            {
                file.package.SetImageExport(file, export);
            }


            GUILayout.Space(10);
            GUILayout.Label(index.ToString(), HStyle.labelMiddleCenterStyle, GUILayout.Width(width), GUILayout.Height(height));

            GUILayout.Space(10);
            GUILayout.Label(file.beDependCount + "", HStyle.labelMiddleCenterStyle, GUILayout.Width(width), GUILayout.Height(height));

            GUILayout.Space(10);
            GUILayout.Label(file.pathForAssets, GUILayout.Height(height));
            GUILayout.Space(10);

            EditorGUILayout.EndHorizontal();
        }
        private void DrawUseItem(int index, AssetData file)
        {
            int width  = 100;
            int height = 25;

            EditorGUILayout.BeginHorizontal(HStyle.boxTableHeadStyle);



            if (GUILayout.Button("选中", HStyle.boxMiddleCenterStyle, GUILayout.Width(100), GUILayout.Height(height)))
            {
            }


            GUILayout.Space(10);
            GUILayout.Label(index.ToString(), HStyle.labelMiddleCenterStyle, GUILayout.Width(width), GUILayout.Height(height));

            GUILayout.Space(10);
            GUILayout.Label(file.pathForAssets, GUILayout.Height(height));
            GUILayout.Space(10);

            EditorGUILayout.EndHorizontal();
        }
Exemplo n.º 5
0
        private void DrawItem(int index, List <AssetData> md5files)
        {
            int width  = 100;
            int height = 25;

            EditorGUILayout.BeginHorizontal(HStyle.boxTableHeadStyle);
            GUILayout.Label(index.ToString(), HStyle.labelMiddleCenterStyle, GUILayout.Width(width), GUILayout.Height(height));

            if (isSetDict.ContainsKey(index) && isSetDict[index])
            {
                GUILayout.Label("已设置", GUILayout.Width(60), GUILayout.Height(height));
            }

            EditorGUILayout.BeginVertical();
            for (int i = 0; i < md5files.Count; i++)
            {
                EditorGUILayout.BeginHorizontal();
                AssetData file = md5files[i];

                if (GUILayout.Button("选中", HStyle.boxMiddleCenterStyle, GUILayout.Width(100), GUILayout.Height(height)))
                {
                    Selection.activeObject = AssetDatabase.LoadAssetAtPath <UnityEngine.Object>(file.path);
                }


                if (GUILayout.Button("设为主资源", HStyle.boxMiddleCenterStyle, GUILayout.Width(100), GUILayout.Height(height)))
                {
                    SetMainRes(index, md5files, file);
                }



                if (GUILayout.Button("移至 Common", HStyle.boxMiddleCenterStyle, GUILayout.Width(100), GUILayout.Height(height)))
                {
                    file.MoveToCommon();
                }


                if (GUILayout.Button("引用详情", HStyle.boxMiddleCenterStyle, GUILayout.Width(100), GUILayout.Height(height)))
                {
                    FguiRefDetailsEditorWindow.Open(file);
                }

                if (GUILayout.Button("打开 Common", HStyle.boxMiddleCenterStyle, GUILayout.Width(100), GUILayout.Height(height)))
                {
                    file.ShowInExplorerForCommon();
                }

                bool export = GUILayout.Toggle(file.exported, "是否导出", GUILayout.Width(100), GUILayout.Height(height));
                if (export != file.exported)
                {
                    file.package.SetImageExport(file, export);
                }



                GUILayout.Space(10);
                GUILayout.Label(file.beDependCount.ToString(), GUILayout.Width(width), GUILayout.Height(height));

                GUILayout.Space(10);
                GUILayout.Label(file.pathForAssets, GUILayout.Height(height));
                EditorGUILayout.EndHorizontal();
            }
            EditorGUILayout.EndVertical();


            EditorGUILayout.EndHorizontal();
        }
Exemplo n.º 6
0
        private void SetComponentNode()
        {
            foreach (Package package in packageList)
            {
                foreach (AssetData component in package.resourcesList)
                {
                    foreach (Node node in component.assetDisplayList)
                    {
                        node.assetData = GetRescoureComponent(node);
                        if (node.assetData == null)
                        {
                            UnityEngine.Debug.LogWarningFormat("没有找到 resourceComponent packagename= {0} comname= {1} nodename={2}", node.parent.package.name, node.parent.name, node.name);
                        }
                        else
                        {
                            // 添加被依赖
                            node.assetData.beDependList.Add(component);
                            if (component.exported)
                            {
                                node.assetData.hasBeDependForExtported = true;
                            }

                            if (node.type == fairygui.CommonName.GComponent)
                            {
                                if (!string.IsNullOrEmpty(node.labelIcon))
                                {
                                    node.labelIconAssetData = GetAssetDataByUrl(node.labelIcon);
                                    if (node.labelIconAssetData != null)
                                    {
                                        node.labelIconAssetData.beDependList.Add(component);
                                    }
                                }


                                if (!string.IsNullOrEmpty(node.buttonIcon))
                                {
                                    node.buttonIconAssetData = GetAssetDataByUrl(node.buttonIcon);
                                    if (node.buttonIconAssetData != null)
                                    {
                                        node.buttonIconAssetData.beDependList.Add(component);
                                    }
                                }

                                if (!string.IsNullOrEmpty(node.buttonSelectIcon))
                                {
                                    node.buttonSelectIconAssetData = GetAssetDataByUrl(node.buttonSelectIcon);
                                    if (node.buttonSelectIconAssetData != null)
                                    {
                                        node.buttonSelectIconAssetData.beDependList.Add(component);
                                    }
                                }
                            }

                            // 控制器中依赖的资源
                            if (!string.IsNullOrEmpty(node.gearIconUrls))
                            {
                                node.gearIconAssetDatas = GetAssetDataForGearIcon(node.gearIconUrls);
                                if (node.gearIconAssetDatas != null)
                                {
                                    for (int ii = 0; ii < node.gearIconAssetDatas.Count; ii++)
                                    {
                                        AssetData gearIcon = node.gearIconAssetDatas[ii];
                                        if (gearIcon != null)
                                        {
                                            gearIcon.beDependList.Add(component);
                                        }
                                    }
                                }
                            }

                            if (!string.IsNullOrEmpty(node.gearDefault))
                            {
                                node.gearDefaultAssetData = GetAssetDataByUrl(node.gearDefault);
                                if (node.gearDefaultAssetData != null)
                                {
                                    node.gearDefaultAssetData.beDependList.Add(component);
                                }
                            }
                        }
                    }
                }
            }

            int i     = 0;
            int count = packageList.Count;

            // 生成依赖的包列表
            foreach (Package package in packageList)
            {
                if (i % 10 == 0)
                {
                    EditorUtility.DisplayProgressBar("生成依赖的包列表", package.folderName, i * 1f / count);
                }
                i++;
                foreach (AssetData component in package.resourcesList)
                {
                    component.AddDependPackage(package);
                    TraverseDependPackage(component, component);


                    foreach (Node node in component.displayList)
                    {
                        if (node.pkg != null)
                        {
                            Package pkg = GetPackage(node.pkg);
                            if (pkg != null)
                            {
                                component.AddDependPackage(pkg);
                            }
                        }
                    }
                }
            }

            EditorUtility.ClearProgressBar();
        }
Exemplo n.º 7
0
        private void DrawNuseItemTool(List <AssetData> list)
        {
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("全选", GUILayout.Width(100), GUILayout.Height(30)))
            {
                for (int i = 0; i < list.Count; i++)
                {
                    list[i].isSelected = true;
                }
            }


            if (GUILayout.Button("反选", GUILayout.Width(100), GUILayout.Height(30)))
            {
                for (int i = 0; i < list.Count; i++)
                {
                    list[i].isSelected = !list[i].isSelected;
                }
            }

            if (GUILayout.Button("删除选中的", GUILayout.Width(100), GUILayout.Height(30)))
            {
                for (int i = 0; i < list.Count; i++)
                {
                    AssetData file = list[i];
                    if (file.isSelected)
                    {
                        file.package.RemoveImageXml(file);
                        file.package.RemoveResource(file);
                        if (File.Exists(file.pathForFull))
                        {
                            File.Delete(file.pathForFull);
                        }
                    }
                }

                //AssetDatabase.Refresh();
            }



            if (GUILayout.Button("删除选中 不包含设置导出的", GUILayout.Width(100), GUILayout.Height(30)))
            {
                for (int i = 0; i < list.Count; i++)
                {
                    AssetData file = list[i];
                    if (file.isSelected && !file.exported)
                    {
                        file.package.RemoveImageXml(file);
                        file.package.RemoveResource(file);
                        if (File.Exists(file.pathForFull))
                        {
                            File.Delete(file.pathForFull);
                        }
                    }
                }

                //AssetDatabase.Refresh();
            }
            EditorGUILayout.EndHorizontal();
        }
        public static Package Load(string path)
        {
            Console.WriteLine("PackageReader:" + path);

            Package package = new Package();

            package.rootPath    = Path.GetDirectoryName(path);
            package.folderName  = Path.GetFileName(package.rootPath);
            package.pathForFull = path;


            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.Load(path);
            package.xmlDocument = xmlDocument;

            XmlNode packageDescription = xmlDocument.SelectSingleNode(@"packageDescription");
            XmlNode publish            = xmlDocument.SelectSingleNode(@"packageDescription/publish");


            package.genCode = false;
            package.id      = packageDescription.Attributes.GetNamedItem("id").InnerText;
            if (publish != null)
            {
                package.name = publish.Attributes.GetNamedItem("name").InnerText;

                if (publish.Attributes["genCode"] != null)
                {
                    package.genCode = publish.Attributes.GetNamedItem("genCode").InnerText == "true";
                }
            }
            else
            {
                package.name = Path.GetFileNameWithoutExtension(Path.GetDirectoryName(path));
            }


            XmlNodeList xmlNodeList = xmlDocument.SelectSingleNode("packageDescription/resources").ChildNodes;

            foreach (XmlNode node in xmlNodeList)
            {
                bool exported = false;
                if (node.Attributes["exported"] != null)
                {
                    exported = node.Attributes.GetNamedItem("exported").InnerText == "true";
                }

                AssetData item = new AssetData()
                {
                    id       = node.Attributes.GetNamedItem("id").InnerText,
                    name     = node.Attributes.GetNamedItem("name").InnerText,
                    path     = node.Attributes.GetNamedItem("path").InnerText,
                    exported = exported,
                    type     = node.Name.GetResourceComponentTypeByName()
                };

                item.pathForPackage     = item.path + item.name;
                item.fileNameForPackage = item.pathForPackage.Substring(1, item.pathForPackage.Length - 1);
                item.pathForAssets      = "assets/" + package.folderName + item.path + item.name;
                item.pathForAssetsData  = package.folderName + item.path + item.name;
                item.pathForFull        = package.rootPath + item.path + item.name;


                if (File.Exists(item.pathForFull))
                {
                    package.AddResource(item);
                }
            }

            return(package);
        }
        public static void Load(string path, AssetData resourceComponent)
        {
            Console.WriteLine("ComponentReader:" + path);
            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.Load(path);
            resourceComponent.xmlDocument = xmlDocument;


            XmlNode component = xmlDocument.SelectSingleNode(@"component");

            // 继承
            string extention = fairygui.ExtendType.Component;

            if (component.Attributes["extention"] != null)
            {
                extention = component.Attributes.GetNamedItem("extention").InnerText;
            }
            resourceComponent.extention = extention;


            XmlNodeList xmlNodeList = component.ChildNodes;

            foreach (XmlNode node in xmlNodeList)
            {
                switch (node.Name)
                {
                // 控制器
                case fairygui.NodeName.controller:
                    resourceComponent.controllerList.Add(new Node()
                    {
                        name = node.Attributes.GetNamedItem("name").InnerText, type = fairygui.CommonName.Controller
                    });
                    break;

                // 动效
                case fairygui.NodeName.transition:
                    resourceComponent.transitionList.Add(new Node()
                    {
                        name = node.Attributes.GetNamedItem("name").InnerText, type = fairygui.CommonName.Transition
                    });
                    break;

                case fairygui.NodeName.displayList:
                    XmlNodeList displayNodeList = node.ChildNodes;
                    foreach (XmlNode displayNode in displayNodeList)
                    {
                        Node   fguiNode = null;
                        string pkg      = null;
                        string src      = null;
                        string nodeName = displayNode.Attributes.GetNamedItem("name").InnerText;
                        switch (displayNode.Name)
                        {
                        // 图片
                        case fairygui.NodeName.image:

                            pkg = null;
                            if (displayNode.Attributes["pkg"] != null)
                            {
                                pkg = displayNode.Attributes.GetNamedItem("pkg").InnerText;
                            }

                            src = null;
                            if (displayNode.Attributes["src"] != null)
                            {
                                src = displayNode.Attributes.GetNamedItem("src").InnerText;
                            }
                            fguiNode = new Node()
                            {
                                name = nodeName, type = fairygui.CommonName.GImage, pkg = pkg, src = src
                            };
                            resourceComponent.AddNode(fguiNode);
                            break;

                        // 文本
                        case fairygui.NodeName.text:
                            bool input = false;
                            if (displayNode.Attributes["input"] != null)
                            {
                                input = displayNode.Attributes.GetNamedItem("input").InnerText == "true";
                            }

                            if (input)
                            {
                                fguiNode = new Node()
                                {
                                    name = nodeName, type = fairygui.CommonName.GTextInput
                                };
                            }
                            else
                            {
                                fguiNode = new Node()
                                {
                                    name = nodeName, type = fairygui.CommonName.GTextField
                                };
                            }
                            resourceComponent.AddNode(fguiNode);
                            break;

                        // 富文本
                        case fairygui.NodeName.richtext:
                            fguiNode = new Node()
                            {
                                name = nodeName, type = fairygui.CommonName.GRichTextField
                            };
                            resourceComponent.AddNode(fguiNode);
                            break;

                        // 图形
                        case fairygui.NodeName.graph:
                            fguiNode = new Node()
                            {
                                name = nodeName, type = fairygui.CommonName.GGraph
                            };
                            resourceComponent.AddNode(fguiNode);
                            break;

                        // 组
                        case fairygui.NodeName.group:
                            bool advanced = false;
                            if (displayNode.Attributes["advanced"] != null)
                            {
                                advanced = displayNode.Attributes.GetNamedItem("advanced").InnerText == "true";
                            }

                            if (advanced)
                            {
                                fguiNode = new Node()
                                {
                                    name = nodeName, type = fairygui.CommonName.GGroup
                                };
                                resourceComponent.AddNode(fguiNode);
                            }
                            break;

                        // 装载器
                        case fairygui.NodeName.loader:

                            string url = null;
                            if (displayNode.Attributes["url"] != null)
                            {
                                url = displayNode.Attributes.GetNamedItem("url").InnerText;
                            }
                            fguiNode = new Node()
                            {
                                name = nodeName, type = fairygui.CommonName.GLoader, url = url
                            };
                            resourceComponent.AddNode(fguiNode);


                            break;

                        // 列表
                        case fairygui.NodeName.list:
                            string defaultItem = null;
                            if (displayNode.Attributes["defaultItem"] != null)
                            {
                                defaultItem = displayNode.Attributes.GetNamedItem("defaultItem").InnerText;
                            }
                            fguiNode = new Node()
                            {
                                name = nodeName, type = fairygui.CommonName.GList, defaultItem = defaultItem
                            };
                            resourceComponent.AddNode(fguiNode);
                            break;

                        // 序列帧动画
                        case fairygui.NodeName.movieclip:


                            pkg = null;
                            if (displayNode.Attributes["pkg"] != null)
                            {
                                pkg = displayNode.Attributes.GetNamedItem("pkg").InnerText;
                            }

                            src = null;
                            if (displayNode.Attributes["src"] != null)
                            {
                                src = displayNode.Attributes.GetNamedItem("src").InnerText;
                            }

                            fguiNode = new Node()
                            {
                                name = nodeName, type = fairygui.CommonName.GMovieClip, pkg = pkg, src = src
                            };
                            resourceComponent.AddNode(fguiNode);
                            break;

                        // 自定义组件
                        case fairygui.NodeName.component:
                            pkg = null;
                            if (displayNode.Attributes["pkg"] != null)
                            {
                                pkg = displayNode.Attributes.GetNamedItem("pkg").InnerText;
                            }
                            fguiNode = new Node()
                            {
                                name = nodeName,
                                type = fairygui.CommonName.GComponent,
                                pkg  = pkg,
                                src  = displayNode.Attributes.GetNamedItem("src").InnerText
                            };

                            XmlElement label = (XmlElement)displayNode.SelectSingleNode("Label");
                            if (label != null)
                            {
                                if (label.HasAttribute("icon"))
                                {
                                    fguiNode.labelIcon = label.GetAttribute("icon");
                                }
                            }

                            XmlElement button = (XmlElement)displayNode.SelectSingleNode("Button");
                            if (button != null)
                            {
                                if (button.HasAttribute("icon"))
                                {
                                    fguiNode.buttonIcon = button.GetAttribute("icon");
                                }

                                if (button.HasAttribute("selectedIcon"))
                                {
                                    fguiNode.buttonSelectIcon = button.GetAttribute("selectedIcon");
                                }
                            }


                            resourceComponent.AddNode(fguiNode);
                            break;
                        }

                        if (fguiNode != null)
                        {
                            XmlElement gearIcon = (XmlElement)displayNode.SelectSingleNode("gearIcon");
                            if (gearIcon != null)
                            {
                                if (gearIcon.HasAttribute("values"))
                                {
                                    fguiNode.gearIconUrls = gearIcon.GetAttribute("values");
                                }

                                if (gearIcon.HasAttribute("default"))
                                {
                                    fguiNode.gearDefault = gearIcon.GetAttribute("default");
                                }
                            }
                        }
                    }
                    break;
                }
            }
        }