Exemple #1
0
        public override async Task <bool> AssetsOption_LoadResourceOverride(EditorCommon.Assets.AssetsPakage.LoadResourceData data)
        {
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            data.RNameMapper.ResObject = EngineNS.CEngine.Instance.SkeletonAssetManager.GetSkeleton(EngineNS.CEngine.Instance.RenderContext, data.RNameMapper.Name);
            return(true);
        }
        public override async Task <bool> AssetsOption_LoadResourceOverride(EditorCommon.Assets.AssetsPakage.LoadResourceData data)
        {
            var matIns = new EngineNS.Graphics.CGfxMaterialInstance();
            await matIns.PureLoadMaterialInstanceAsync(EngineNS.CEngine.Instance.RenderContext, data.RNameMapper.Name);

            data.RNameMapper.ResObject = matIns;
            return(true);
        }
        public override async Task <bool> AssetsOption_LoadResourceOverride(EditorCommon.Assets.AssetsPakage.LoadResourceData data)
        {
            var mesh = new EngineNS.Graphics.Mesh.CGfxMesh();
            await mesh.LoadMeshAsync(EngineNS.CEngine.Instance.RenderContext, data.RNameMapper.Name);

            data.RNameMapper.ResObject = mesh;
            return(true);
        }
        public override async Task <bool> AssetsOption_LoadResourceOverride(EditorCommon.Assets.AssetsPakage.LoadResourceData data)
        {
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            var dataSet = new EngineNS.Bricks.DataProvider.GDataSet();

            dataSet.LoadDataSet(data.ObjType, data.RNameMapper.Name, false);
            data.RNameMapper.ResObject = dataSet;
            return(true);
        }
Exemple #5
0
        public override async Task <bool> AssetsOption_LoadResourceOverride(EditorCommon.Assets.AssetsPakage.LoadResourceData data)
        {
            var uvAnim = new EngineNS.UISystem.UVAnim();

            if (false == await uvAnim.LoadUVAnimAsync(EngineNS.CEngine.Instance.RenderContext, data.RNameMapper.Name))
            {
                return(false);
            }
            data.RNameMapper.ResObject = uvAnim;
            return(true);
        }
Exemple #6
0
        async Task CollectionResource(List <Resources.ResourceInfo> resInfos, float totalProgress, Action <float, string> progressReport)
        {
            float delta = totalProgress / resInfos.Count;

            var collector     = new EngineNS.Bricks.SandBox.ObjectReferencesCollector();
            var collectorData = new EngineNS.Bricks.SandBox.ObjectReferencesCollector.CollectProcessData();

            for (int i = 0; i < resInfos.Count; i++)
            {
                Resources.ResourceInfo rInfo = resInfos[i];
                progressReport?.Invoke(mProgress, $"正在收集资源引用 {rInfo.ResourceName.Name}");
                var rName = rInfo.ResourceName;
                mResInfoDic.Add(rName, rInfo);
                //if (!resInfoDic.TryGetValue(rName, out rInfo))
                //{
                //    rInfo = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromResource(rName.Address);
                //    if (rInfo == null)
                //    {
                //        EngineNS.Profiler.Log.WriteLine(EngineNS.Profiler.ELogTag.Warning, "资源丢失", $"找不到资源{rName.Address}");
                //        continue;
                //    }
                //    resInfoDic.Add(rName, rInfo);
                //}

                var rnm = mNameManager.GetRNameIndex(rName);
                if (rnm != null)
                {
                    var loadData = new EditorCommon.Assets.AssetsPakage.LoadResourceData()
                    {
                        ObjType     = null,
                        RNameMapper = rnm,
                    };
                    await rInfo.AssetsOption_LoadResource(loadData);

                    rName.NameIndexInPakage = rnm.Index;

                    //收集res直接、间接用到的资源RName
                    if (rnm.ResObject != null)
                    {
                        await collector.CollectReferences(rnm.ResObject, OnVisitProperty, OnVisitMember, OnVisitContainer, collectorData);
                    }
                }

                mProgress += delta;
            }
        }
        public override async Task <bool> AssetsOption_LoadResourceOverride(EditorCommon.Assets.AssetsPakage.LoadResourceData data)
        {
            // material
            var assetsObj = new MatAssetsObject();

            assetsObj.Material = await EngineNS.CEngine.Instance.MaterialManager.GetMaterialAsync(EngineNS.CEngine.Instance.RenderContext, data.RNameMapper.Name);

            var nodesCtrl = new CodeGenerateSystem.Controls.NodesContainerControl();

            nodesCtrl.CSType = EngineNS.ECSType.Client;
            var xndHolder = await EngineNS.IO.XndHolder.LoadXND(data.RNameMapper.Name.Address + EngineNS.Graphics.CGfxMaterial.ShaderLinkExtension);

            if (xndHolder != null)
            {
                await nodesCtrl.Load(xndHolder.Node);

                xndHolder.Node?.TryReleaseHolder();
            }
            assetsObj.NodesCtrl        = nodesCtrl;
            data.RNameMapper.ResObject = assetsObj;

            return(true);
        }
        public override async Task <bool> AssetsOption_LoadResourceOverride(EditorCommon.Assets.AssetsPakage.LoadResourceData data)
        {
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            return(true);
        }
        public override async Task <bool> AssetsOption_LoadResourceOverride(EditorCommon.Assets.AssetsPakage.LoadResourceData data)
        {
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            throw new InvalidOperationException();
        }
Exemple #10
0
        public async Task <List <Resources.ResourceInfo> > UnPackAssets(string packageAbsFile, string targetAbsPath)
        {
            List <Resources.ResourceInfo> retList = new List <Resources.ResourceInfo>(20);

            EditorCommon.FileSystemWatcherProcess.Enable = false;

            targetAbsPath = targetAbsPath.Replace("\\", "/").TrimEnd('/') + "/";
            mNameManager.ClearMapper();
            EngineNS.CEngine.Instance.FileManager.ClearPackageRNameCache();

            // unzip
            var tempPath = EngineNS.CEngine.Instance.FileManager.Root + Guid.NewGuid().ToString() + "/";

            if (EngineNS.CEngine.Instance.FileManager.DirectoryExists(tempPath))
            {
                EngineNS.CEngine.Instance.FileManager.DeleteDirectory(tempPath, true);
            }
            EngineNS.CEngine.Instance.FileManager.CreateDirectory(tempPath);
            System.IO.File.SetAttributes(tempPath, System.IO.FileAttributes.Hidden);
            System.IO.Compression.ZipFile.ExtractToDirectory(packageAbsFile, tempPath);
            var srcContentTempPath       = (tempPath + "Content/").Replace("\\", "/").ToLower();
            var srcEditorContentTempPath = (tempPath + "EditContent/").Replace("\\", "/").ToLower();
            var srcEngineContentTempPath = (tempPath + "EngineContent/").Replace("\\", "/").ToLower();

            MessageBox.enMessageBoxResult chooseResult = MessageBox.enMessageBoxResult.Cancel;
            // EditorContent和EngineContent的对象直接复制
            if (EngineNS.CEngine.Instance.FileManager.DirectoryExists(srcEditorContentTempPath))
            {
                var files = EngineNS.CEngine.Instance.FileManager.GetFiles(srcEditorContentTempPath, "*", System.IO.SearchOption.AllDirectories);
                for (int i = 0; i < files.Count; i++)
                {
                    var file    = files[0].Replace("\\", "/").ToLower();
                    var tagFile = file.Replace(srcEditorContentTempPath, EngineNS.CEngine.Instance.FileManager.EditorContent);
                    switch (chooseResult)
                    {
                    case MessageBox.enMessageBoxResult.YesAll:
                        EngineNS.CEngine.Instance.FileManager.CopyFile(file, tagFile, true);
                        break;

                    case MessageBox.enMessageBoxResult.NoAll:
                        EngineNS.CEngine.Instance.FileManager.CopyFile(file, tagFile, false);
                        break;

                    default:
                        if (EngineNS.CEngine.Instance.FileManager.FileExists(tagFile))
                        {
                            chooseResult = EditorCommon.MessageBox.Show($"文件{tagFile}与包中文件重名,是否覆盖?", MessageBox.enMessageBoxButton.Yes_YesAll_No_NoAll);
                            switch (chooseResult)
                            {
                            case MessageBox.enMessageBoxResult.Yes:
                                EngineNS.CEngine.Instance.FileManager.CopyFile(file, tagFile, true);
                                break;
                            }
                        }
                        break;
                    }
                }
            }
            if (EngineNS.CEngine.Instance.FileManager.DirectoryExists(srcEngineContentTempPath))
            {
                var files = EngineNS.CEngine.Instance.FileManager.GetFiles(srcEngineContentTempPath, "*", System.IO.SearchOption.AllDirectories);
                for (int i = 0; i < files.Count; i++)
                {
                    var file    = files[0].Replace("\\", "/").ToLower();
                    var tagFile = file.Replace(srcEngineContentTempPath, EngineNS.CEngine.Instance.FileManager.EngineContent);
                    switch (chooseResult)
                    {
                    case MessageBox.enMessageBoxResult.YesAll:
                        EngineNS.CEngine.Instance.FileManager.CopyFile(file, tagFile, true);
                        break;

                    case MessageBox.enMessageBoxResult.NoAll:
                        if (!EngineNS.CEngine.Instance.FileManager.FileExists(tagFile))
                        {
                            EngineNS.CEngine.Instance.FileManager.CopyFile(file, tagFile, false);
                        }
                        break;

                    default:
                        if (EngineNS.CEngine.Instance.FileManager.FileExists(tagFile))
                        {
                            chooseResult = EditorCommon.MessageBox.Show($"文件{tagFile}与包中文件重名,是否覆盖?", MessageBox.enMessageBoxButton.Yes_YesAll_No_NoAll);
                            switch (chooseResult)
                            {
                            case MessageBox.enMessageBoxResult.Yes:
                                EngineNS.CEngine.Instance.FileManager.CopyFile(file, tagFile, true);
                                break;
                            }
                        }
                        break;
                    }
                }
            }
            // Content中放入目标目录
            if (EngineNS.CEngine.Instance.FileManager.DirectoryExists(srcContentTempPath))
            {
                // 读取RName表
                var xmlHolder     = EngineNS.IO.XmlHolder.LoadXML(tempPath + "RNames.xml");
                var rNameDataNode = xmlHolder.RootNode.FindNode("RNameData");
                Dictionary <int, RNameData>    rNameDataDic     = new Dictionary <int, RNameData>();
                Dictionary <string, RNameData> rNameDataPathDic = new Dictionary <string, RNameData>();
                if (rNameDataNode != null)
                {
                    var cNodes = rNameDataNode.GetNodes();
                    foreach (var cNode in cNodes)
                    {
                        var data   = new RNameData();
                        var idxAtt = cNode.FindAttrib("Index");
                        if (idxAtt != null)
                        {
                            data.Index = System.Convert.ToInt32(idxAtt.Value);
                        }
                        var nameAtt = cNode.FindAttrib("Name");
                        if (nameAtt != null)
                        {
                            data.Name = nameAtt.Value;
                        }
                        var rtAtt = cNode.FindAttrib("RNameType");
                        if (rtAtt != null)
                        {
                            data.RNameType = EngineNS.Rtti.RttiHelper.EnumTryParse <EngineNS.RName.enRNameType>(rtAtt.Value);
                        }
                        var pathAtt = cNode.FindAttrib("PackagePath");
                        if (pathAtt != null)
                        {
                            data.PackagePath = pathAtt.Value;
                        }
                        rNameDataDic.Add(data.Index, data);
                        rNameDataPathDic.Add(data.PackagePath, data);
                    }
                }

                // RName填充,将RName中路径填充为Package目录
                var rNameDataDicEnum = rNameDataDic.GetEnumerator();
                while (rNameDataDicEnum.MoveNext())
                {
                    var rName = EngineNS.RName.GetRName(rNameDataDicEnum.Current.Key);
                    rName.RNameType = EngineNS.RName.enRNameType.Package;
                    rName.Name      = tempPath + EngineNS.RName.GetRootFolderName(rNameDataDicEnum.Current.Value.RNameType) + rNameDataDicEnum.Current.Value.PackagePath;
                }

                // Shader目录直接拷贝
                if (EngineNS.CEngine.Instance.FileManager.DirectoryExists(srcContentTempPath + "shaders"))
                {
                    EngineNS.CEngine.Instance.FileManager.CopyDirectory(srcContentTempPath + "shaders", EngineNS.CEngine.Instance.FileManager.ProjectContent + "shaders");
                }

                var relPath = EngineNS.CEngine.Instance.FileManager._GetRelativePathFromAbsPath(targetAbsPath, EngineNS.CEngine.Instance.FileManager.ProjectContent);
                // 全部加载,
                var files = EngineNS.CEngine.Instance.FileManager.GetFiles(srcContentTempPath, "*.rinfo", System.IO.SearchOption.AllDirectories);

                List <PackageResData> mLoadedResInfoDatas = new List <PackageResData>(files.Count);
                for (int i = 0; i < files.Count; i++)
                {
                    var file    = files[i].Replace("\\", "/");
                    var resInfo = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromFile(file, null);

                    var rnm = mNameManager.GetRNameIndex(resInfo.ResourceName);
                    if (rnm == null)
                    {
                        continue;
                    }

                    var loadData = new EditorCommon.Assets.AssetsPakage.LoadResourceData()
                    {
                        ObjType     = null,
                        RNameMapper = rnm,
                    };
                    await resInfo.AssetsOption_LoadResource(loadData);

                    var pkResData = new PackageResData()
                    {
                        ResInfo = resInfo,
                        RNM     = rnm,
                    };
                    mLoadedResInfoDatas.Add(pkResData);
                }
                // 填充rname,将RName中路径填充为Content目录,这里需要保证在之前全部加载完成,否则可能导致加载到目标目录的文件,而目标目录的文件是有可能还没导入
                foreach (var cache in EngineNS.CEngine.Instance.FileManager.PackageRNameCache.Values)
                {
                    RNameData data;
                    if (rNameDataDic.TryGetValue(cache.NameIndexInPakage, out data))
                    {
                        cache.RNameType = data.RNameType;
                        if (cache.RNameType == EngineNS.RName.enRNameType.Game)
                        {
                            cache.Name = relPath + data.Name;
                        }
                        else
                        {
                            cache.Name = data.Name;
                        }
                    }
                }
                // 全部存入目标文件夹
                foreach (var resInfoData in mLoadedResInfoDatas)
                {
                    var       resInfo     = resInfoData.ResInfo;
                    var       tempTagPath = resInfo.ResourceName.Address.Replace(srcContentTempPath, "");
                    string    tagFile     = targetAbsPath + tempTagPath;
                    RNameData tempData;
                    if (rNameDataPathDic.TryGetValue(tempTagPath, out tempData))
                    {
                        tagFile = targetAbsPath + tempData.Name;
                    }
                    EngineNS.CEngine.Instance.FileManager.MergePackageRNameCacheToRNameManager();
                    var saveData = new SaveResourceData()
                    {
                        TargetAbsFileName = tagFile,
                        ResObject         = resInfoData.RNM.ResObject,
                        SrcAbsFileName    = resInfo.ResourceName.Address,
                    };
                    await resInfo.AssetsOption_SaveResource(saveData);

                    var tempResInfo = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromFile(tagFile + EditorCommon.Program.ResourceInfoExt, null);

                    await EngineNS.CEngine.Instance.GameEditorInstance.RefreshResourceInfoReferenceDictionary(tempResInfo);

                    retList.Add(tempResInfo);
                }
            }

            EngineNS.CEngine.Instance.FileManager.DeleteDirectory(tempPath, true);
            //EditorCommon.MessageBox.Show("导入完成");
            EditorCommon.FileSystemWatcherProcess.Enable = true;

            return(retList);
        }
 public override Task <bool> AssetsOption_LoadResourceOverride(EditorCommon.Assets.AssetsPakage.LoadResourceData data)
 {
     throw new InvalidOperationException();
 }
        public override async Task <bool> AssetsOption_LoadResourceOverride(EditorCommon.Assets.AssetsPakage.LoadResourceData data)
        {
            data.RNameMapper.ResObject = await EngineNS.CEngine.Instance.PrefabManager.GetPrefab(EngineNS.CEngine.Instance.RenderContext, data.RNameMapper.Name, true);

            return(true);
        }