Exemple #1
0
        public static void LoadUI(string uipath)
        {
            if (string.IsNullOrEmpty(uipath))
            {
                return;
            }
            AssetBundle ab = null;

            if (m_abDir.ContainsKey(uipath))
            {
                ab = m_abDir[uipath];
            }
            if (null == ab)
            {
                ab = ABLoader.GetUIAssetBundle(uipath);
                m_abDir.Remove(uipath);
                if (null != ab)
                {
                    m_abDir.Add(uipath, ab);
                }
            }

            string id = uipath;

            if (m_pkgDir.ContainsKey(uipath))
            {
                id = m_pkgDir[uipath];
            }

            UIPackage pkg = UIPackage.GetById(id);

            if (null == pkg)
            {
                if (null == ab)
                {
                    pkg = UIPackage.AddPackage(uipath);
                }
                else
                {
                    pkg = UIPackage.AddPackage(ab);
                }
            }
            else
            {
                if (null == ab)
                {
                    pkg.ReloadAssets();
                }
                else
                {
                    pkg.ReloadAssets(ab);
                }
            }
            if (!m_pkgDir.ContainsKey(uipath))
            {
                m_pkgDir.Add(uipath, pkg.id);
            }
        }
Exemple #2
0
        public static void UnloadUI(string uipath)
        {
            if (string.IsNullOrEmpty(uipath))
            {
                return;
            }
            string id = uipath;

            if (m_pkgDir.ContainsKey(uipath))
            {
                id = m_pkgDir[uipath];
            }
            if (m_abDir.ContainsKey(uipath))
            {
                m_abDir.Remove(uipath);
            }
            UIPackage pkg = UIPackage.GetById(id);

            if (null != pkg)
            {
                pkg.UnloadAssets();
            }
        }
        /** 递归查找自定义组件下的自定义组件 */
        private static void FillInfoRecursively(IExportable exportComponentInfo, Dictionary <string, ExportComponentInfo> exportInfoMap, Dictionary <string, ExportCustomElementInfo> exportCustomElementInfoMap, FairyGUI.UIPackage pak, List <FairyGUI.PackageItem> allComponents)
        {
            //递归查找component下面元素
            var rootItem     = exportComponentInfo.PakItem;
            var loadedPi     = rootItem.Load();
            var piInst       = UIPackage.CreateObject(pak.name, rootItem.name) as FairyGUI.GComponent;
            var displayItems = piInst.GetChildren();// .displayList;

            for (int i = 0, c = displayItems.Length; i < c; i++)
            {
                var displayItem = displayItems[i];
                var item        = displayItem.packageItem;


                //var xml = item.componentData;
                //var xml = displayItem.desc;
                //字段名
                var fieldName = displayItem.name; // xml.GetAttribute("name");
                //字段id
                var id = displayItem.id;          //xml.GetAttribute("id");
                //是否应用了包内的组建
                //bool hasSrc =  xml.HasAttribute("src");

                //是否是否引用了其他包
                bool   isRefPakComponent = false; // xml.HasAttribute("pkg");
                string refPakId          = "";    // xml.GetAttribute("pkg") : "";
                string refPakName        = "";
                if (isRefPakComponent)
                {
                    //LogA("1.1$$ xml.node.src: " + xml.GetAttribute("src"));
                }
                //LogA("2$$ desc xml.node.name: " + xml.name + "  fieldName:" + fieldName);

                //ultra feature
                string CustomData = string.Concat(displayItem.data);// xml.GetAttribute("customData");
                //Debug.Log("$$ " + fieldName + " customData:" + CustomData);
                // 否则displayListItem为内置控件
                if (item == null) // == null
                {
                    //内置控件类型或者自定义控件元素名称 组件内的内置控件
                    var builtInTypeName = displayItem.GetType().Name.ToLower().Remove(0, 1);//xml.name;
                    if (builtInElementType.ContainsKey(builtInTypeName))
                    {
                        LogA("2.1$$ find exist builtInElementType: " + builtInTypeName);
                        var exportInfo = new ExportInfo();
                        exportInfo.ExportCategory  = ExportInfo.EExportCategory.builtInElement;
                        exportInfo.DisplayListItem = item;
                        exportInfo.ExportName      = fieldName;
                        exportInfo.ExportType      = builtInElementType[builtInTypeName];
                        exportInfo.ExportTypeName  = exportInfo.ExportType.FullName;
                        exportInfo.NodeIndex       = i;
                        exportInfo.ID         = id;
                        exportInfo.CustomData = CustomData;
                        exportComponentInfo.ExportInfos.Add(exportInfo);
                    }
                    else
                    {
                        Debug.LogError("2.1$$ find unexpected builtInElementType: " + builtInTypeName + " fieldName:" + fieldName);
                    }

                    //LogA("2.1$$ pakItem is null desc xml.node.name:" + xml.name + " fieldName:" + fieldName);
                }
                else //item不为null 引用的是包内资源或组件
                {
                    //if (allComponents.Contains(item))
                    //{
                    //    LogA("2.2$$ exist in allComponents name: " + item.name);
                    //}
                    //else
                    //{
                    //    LogA("2.2$$ not exist in allComponents name: " + item.name);
                    //}

                    item.Load();

                    isRefPakComponent = item.owner.id != rootItem.owner.id;
                    refPakId          = isRefPakComponent ? item.owner.id : "";
                    refPakName        = isRefPakComponent ? UIPackage.GetById(refPakId).name : "";

                    //资源和自定义动画
                    if (item.type == FairyGUI.PackageItemType.Image)
                    {
                        LogA("4$$ find elementType: Image");
                        var elementType = new ExportInfo();
                        elementType.ExportCategory  = ExportInfo.EExportCategory.resElement;
                        elementType.ExportName      = fieldName; //item.name;
                        elementType.ExportType      = typeof(FairyGUI.GImage);
                        elementType.ExportTypeName  = elementType.ExportType.FullName;
                        elementType.NodeIndex       = i;
                        elementType.DisplayListItem = item;
                        elementType.ID         = id;
                        elementType.CustomData = CustomData;
                        exportComponentInfo.ExportInfos.Add(elementType);
                    }
                    else if (item.type == FairyGUI.PackageItemType.MovieClip)
                    {
                        LogA("4$$ find elementType: MovieClip");
                        var elementType = new ExportInfo();
                        elementType.ExportCategory  = ExportInfo.EExportCategory.resElement;
                        elementType.ExportName      = fieldName;// item.name;
                        elementType.ExportType      = typeof(FairyGUI.GMovieClip);
                        elementType.ExportTypeName  = elementType.ExportType.FullName;
                        elementType.NodeIndex       = i;
                        elementType.DisplayListItem = item;
                        elementType.ID         = id;
                        elementType.CustomData = CustomData;
                        exportComponentInfo.ExportInfos.Add(elementType);
                    }
                    else if (item.type == FairyGUI.PackageItemType.Sound)
                    {
                    }
                    else if (item.type == FairyGUI.PackageItemType.Atlas)
                    {
                    }
                    else if (item.type == FairyGUI.PackageItemType.Font)
                    {
                    }
                    else if (item.type == FairyGUI.PackageItemType.Misc)
                    {
                    }
                    // custom elements 自定义控件元素
                    else if (item.type == FairyGUI.PackageItemType.Component)
                    {
                        string extention = item.objectType.ToString();//.componentData.GetAttribute("extention");
                        if (extention != "Component")
                        {
                            var TypeName = item.name;
                            Debug.Log("$$ fetch type:" + TypeName);
                            // 引用了包内自定义控件
                            if (customComponentType.ContainsKey(extention))
                            {
                                // 导出自定义控件类型
                                if (!exportCustomElementInfoMap.ContainsKey(TypeName) && !isRefPakComponent)
                                {
                                    var packageName             = pak.name;
                                    var exportCustomElementInfo = new ExportCustomElementInfo();
                                    exportCustomElementInfo.ExportExtentionType = customComponentType[extention];
                                    exportCustomElementInfo.ExportPackageName   = string.Join(".", new string[] {
                                        CodeGeneratorSetting.RootNameSpace,
                                        packageName,
                                    });
                                    exportCustomElementInfo.ExportTypeName = TypeName;
                                    exportCustomElementInfo.pakItem        = item;
                                    exportCustomElementInfo.ID             = item.id;
                                    exportCustomElementInfoMap[TypeName]   = exportCustomElementInfo;
                                    //exportComponentInfo.pakItem = item;
                                    //exportComponentInfo.ID = item.id;
                                    FillInfoRecursively(exportCustomElementInfo, exportInfoMap, exportCustomElementInfoMap, pak, allComponents);
                                }
                                LogA("6$$ find elementType:" + extention);

                                //为组件添加字段 组件里面添加自定义控件
                                var elementType = new ExportInfo();
                                elementType.ExportCategory = ExportInfo.EExportCategory.customElement;
                                elementType.ExportName     = fieldName;
                                elementType.ExportType     = customComponentType[extention];
                                elementType.isTypeInPak    = !isRefPakComponent;
                                string FullName = string.Join(".", new string[] { CodeGeneratorSetting.RootNameSpace, refPakName, TypeName });
                                if (isRefPakComponent)
                                {
                                    //跨包只使用基础类型
                                    FullName = customComponentType[extention].FullName;
                                }
                                elementType.ExportTypeName  = isRefPakComponent? FullName : string.Join(".", new string[] { CodeGeneratorSetting.RootNameSpace, pak.name, TypeName });
                                elementType.ExtentionType   = customComponentType[extention];
                                elementType.NodeIndex       = i;
                                elementType.DisplayListItem = item;
                                elementType.ID         = id;
                                elementType.CustomData = CustomData;
                                exportComponentInfo.ExportInfos.Add(elementType);
                            }
                            // 引用了包内自定义组件
                        }
                        else
                        {
                            var TypeName = item.name;
                            Debug.Log("$$ fetch type:" + TypeName);
                            // 添加新的导出信息
                            if (!exportInfoMap.ContainsKey(TypeName) && !isRefPakComponent)
                            {
                                LogA("8$$ find inline component:" + extention);
                                var componentType = new ExportComponentInfo();
                                var packageName   = pak.name;
                                componentType.ExportTypeName    = TypeName;
                                componentType.ExportPackageName = string.Join(".", new string[] {
                                    CodeGeneratorSetting.RootNameSpace,
                                    packageName,
                                    //componentType.ExportTypeName,
                                });
                                componentType.pakItem = item;
                                componentType.ID      = item.id;
                                exportInfoMap[componentType.ExportTypeName] = componentType;
                                //exportComponentInfo.ExportComponentInfos.Add(componentType);
                                FillInfoRecursively(componentType, exportInfoMap, exportCustomElementInfoMap, pak, allComponents);
                            }

                            // 为组件添加自定义组件成员或字段 组件里面有组件 内嵌
                            var componentTypeFiled = new ExportInfo();
                            componentTypeFiled.ExportCategory = ExportInfo.EExportCategory.customComponent;
                            componentTypeFiled.ExportName     = fieldName;
                            string FullName = string.Join(".", new string[] { CodeGeneratorSetting.RootNameSpace, refPakName, TypeName });
                            if (isRefPakComponent)
                            {
                                //跨包只使用基础类型
                                FullName = typeof(FairyGUI.GComponent).FullName;
                            }
                            componentTypeFiled.ExportTypeName  = isRefPakComponent? FullName: TypeName;
                            componentTypeFiled.DisplayListItem = item;
                            componentTypeFiled.isTypeInPak     = !isRefPakComponent;
                            componentTypeFiled.ExtentionType   = typeof(FairyGUI.GComponent);
                            componentTypeFiled.NodeIndex       = i;
                            componentTypeFiled.ID         = id;
                            componentTypeFiled.CustomData = CustomData;
                            exportComponentInfo.ExportInfos.Add(componentTypeFiled);
                        }
                    }
                }//end if(item != null)
            }
            piInst.Dispose();
        }