示例#1
0
        public static void Execute(CorrigoService service, AssetTree toUpdate)
        {
            if (toUpdate == null || service == null)
            {
                return;
            }

            toUpdate.Distance = 1;

            Console.WriteLine();
            Console.WriteLine($"Updating AssetTree with id={toUpdate.Id.ToString()}");

            var resultUpdate = service.Execute(new UpdateCommand
            {
                Entity      = toUpdate,
                PropertySet = new PropertySet {
                    Properties = new[] { "Distance" }
                }
            });

            if (resultUpdate == null)
            {
                Console.WriteLine("Update of AssetTree failed");
                return;
            }

            if (resultUpdate.ErrorInfo != null && !string.IsNullOrEmpty(resultUpdate.ErrorInfo.Description))
            {
                Console.WriteLine(resultUpdate.ErrorInfo.Description);
                Console.WriteLine("Update of AssetTree failed");
                return;
            }

            Console.WriteLine("AssetTree is updated");
        }
示例#2
0
        public static void CRUDExample(CorrigoService service)
        {
            if (service == null)
            {
                return;
            }


            AssetTree assetTree = Create.Execute(service); // AssetTree is Readonly - NonCreatable, NonDeletable, NonUpdatable

            var assetTrees = Read.RetrieveMultiple(service);

            Read.RetrieveByQuery(service);

            if (assetTrees != null && assetTrees.Length > 0)
            {
                AssetTree lastAsset = (AssetTree)assetTrees[assetTrees.Length - 1];

                assetTree = Read.Retrieve(service, lastAsset.ChildId, lastAsset.ParentId);

                Update.Execute(service, ((AssetTree)assetTrees[assetTrees.Length - 1])); // AssetTree is Readonly - NonCreatable, NonDeletable, NonUpdatable

                Delete.Execute(service, assetTrees[assetTrees.Length - 1].Id);           // AssetTree is Readonly - NonCreatable, NonDeletable, NonUpdatable
            }
        }
        private void ReplaceMaterials(GameObject go, string path)
        {
            var meshRenderers = go.GetComponentsInChildren <MeshRenderer>();

            foreach (var meshRenderer in meshRenderers)
            {
                var materials = meshRenderer.materials;
                if (materials == null)
                {
                    continue;
                }
                for (var index = 0; index < materials.Length; index++)
                {
                    var material     = materials[index];
                    var materialName = material.name.Replace(" (Instance)", "");

                    Sideloader.LogDebug($"Material: {string.Join(":", new[] {path, materialName})}");
                    var materialMod = AssetTree.Find(path, materialName).FirstOrDefault();
                    if (materialMod != null)
                    {
                        materials[index] = materialMod.Mod.LoadMaterial(materialMod.FullPath);
                    }
                }

                meshRenderer.materials = materials;
            }
        }
示例#4
0
        public static void Restore(CorrigoService service, AssetTree toRestore)
        {
            if (toRestore == null || service == null)
            {
                return;
            }
            Console.WriteLine();
            Console.WriteLine($"Restoring AssetTree with id={toRestore.Id.ToString()}");

            var restoreResult = service.Execute(new RestoreCommand
            {
                EntitySpecifier = new EntitySpecifier {
                    Id = toRestore.Id, EntityType = EntityType.AssetTree
                }
            });

            if (restoreResult == null)
            {
                Console.WriteLine("Update of AssetTree failed");
                return;
            }

            if (restoreResult.ErrorInfo != null && !string.IsNullOrEmpty(restoreResult.ErrorInfo.Description))
            {
                Console.WriteLine(restoreResult.ErrorInfo.Description);
                Console.WriteLine("Restore of AssetTree failed");
                return;
            }

            Console.WriteLine("AssetTree is restored");
        }
 public virtual void Initialize(IEnumerable <Mod> mods)
 {
     AssetTree = new AssetTree(TargetPathLength);
     foreach (var mod in mods)
     {
         RegisterTreeAssets(mod);
     }
 }
示例#6
0
        public static AssetTree Execute(CorrigoService service)
        {
            Console.WriteLine();
            Debug.Print("Creating AssetTree");
            Console.WriteLine("Creating AssetTree");

            var toCreate = new AssetTree
            {
                //ParentId =1,
                //ChildId = 1,
                //Child = new Location { Id = 1},
                //Distance = 2
            };

            var resultData = service.Execute(new CreateCommand
            {
                Entity = toCreate
            });

            if (resultData == null)
            {
                Debug.Print("Creation of new AssetTree failed");
                Console.WriteLine("Creation of new AssetTree failed");
                Console.WriteLine();
                return(null);
            }


            var commandResponse = resultData as OperationCommandResponse;

            int?id = (commandResponse != null && commandResponse.EntitySpecifier != null) ? commandResponse.EntitySpecifier.Id : null;

            if (id.HasValue && resultData.ErrorInfo == null)
            {
                toCreate.Id = id.Value;
                Debug.Print($"Created new AssetTree with Id={id.ToString()}");
                Console.WriteLine($"Created new AssetTree with Id={id.ToString()}");
                Console.WriteLine();
                return(toCreate);
            }


            Debug.Print("Creation of new AssetTree failed");
            Console.WriteLine("Creation of new AssetTree failed");
            Console.WriteLine();
            if (resultData.ErrorInfo != null && !string.IsNullOrEmpty(resultData.ErrorInfo.Description))
            {
                Debug.Print(resultData.ErrorInfo.Description);
                Console.WriteLine(resultData.ErrorInfo.Description);
            }


            return(null);
        }
示例#7
0
        private void Init(string path)
        {
            _assetTree    = new AssetTree();
            _assetTreeGUI = new AssetTreeIMGUI(_assetTree.Root);


            EditorUtility.DisplayProgressBar("AbsoluteExport is exporting", "Reading AssetDatabase", 100);

            var tmp = AssetDatabase.FindAssets("");

            foreach (var asset in tmp)
            {
                _assetTree.AddAsset(asset);
            }

            EditorUtility.DisplayProgressBar("AbsoluteExport is exporting", "Collecting assets", 100);
            //Step one: getting hidden Project Settings and other stuff

            //_commonAssets = Directory.GetFiles("ProjectSettings", "*.asset").ToList();

            _mainFilePath = path;
            _packageName  = Path.GetFileNameWithoutExtension(_mainFilePath);

            //Step two: getting assets and dependencies

            _assets = new List <string> {
            };
            _assets.AddRange(CollectDependencies());
            EditorUtility.ClearProgressBar();

            //Step tree: process cginc (due to SHADERCOMPILE bug)

            EditorUtility.DisplayProgressBar("AbsoluteExport is exporting", "Searching for used cginc files", 100);
            var shaders     = Utils.GetShaders(_assets);
            var shadersCode = shaders.Select(Utils.LoadAssetAsText).ToList();

            var finder = new ShaderFinder(shadersCode);

            _assets.AddRange(finder.Process());
            EditorUtility.ClearProgressBar();

            var staticFinder = new StaticFinder(Utils.GetScripts(_assets));

            staticFinder.Process();

            ProcessAssetTreeBranch(_assetTree.Root);
            _assetTree.ConfigurePackages();
        }
示例#8
0
        private void ReplaceMeshes(GameObject go, string path)
        {
            // TODO: Eventually, might need to handle SkinnedMeshRenderers, but for now it seems H3 doesn't use those for guns
            var meshFilters = go.GetComponentsInChildren <MeshFilter>();

            foreach (var meshFilter in meshFilters)
            {
                var filterName = meshFilter.name;
                var meshName   = meshFilter.mesh.name.Replace(" Instance", "");
                Sideloader.Logger.LogDebug($"Mesh: {string.Join(":", new[] {path, filterName, meshName})}");
                var replacement = AssetTree.Find(path, filterName, meshName).FirstOrDefault();
                if (replacement != null)
                {
                    meshFilter.mesh = replacement.Mod.LoadMesh(replacement.FullPath);
                }
            }
        }
示例#9
0
        private void ReplaceTextures(GameObject go, string path)
        {
            var meshRenderers = go.GetComponentsInChildren <MeshRenderer>();

            foreach (var meshRenderer in meshRenderers)
            {
                var materials = meshRenderer.materials;
                if (materials == null)
                {
                    continue;
                }
                foreach (var material in materials)
                {
                    var materialName = material.name.Replace(" (Instance)", "");

                    if (material.mainTexture == null)
                    {
                        continue;
                    }
                    var textureName = material.mainTexture.name;
                    Sideloader.Logger.LogDebug($"Texture: {string.Join(":", new[] {path, materialName, textureName})}");
                    var nodes = AssetTree.Find(path, materialName, textureName);
                    if (nodes.Length == 0)
                    {
                        continue;
                    }
                    // TODO: Remove duplicates to prevent duplicate loading
                    foreach (var modNode in nodes)
                    {
                        var tex = modNode.Mod.LoadTexture(modNode.FullPath);
                        if (modNode.Path == null)
                        {
                            material.mainTexture = tex;
                        }
                        else
                        {
                            material.SetTexture(modNode.Path, tex);
                        }
                    }
                }

                meshRenderer.materials = materials;
            }
        }
示例#10
0
        private void ReplaceItemSpawnerIcon(ItemSpawnerID itemSpawnerId, string path)
        {
            if (!itemSpawnerId.Sprite)
            {
                return;
            }
            Sideloader.LogDebug(
                $"ItemSpawnerID Icon: {string.Join(":", new[] {path, itemSpawnerId.Sprite.name, itemSpawnerId.Sprite.texture.name})}");
            var mod = AssetTree.Find(path, itemSpawnerId.Sprite.name, itemSpawnerId.Sprite.texture.name)
                      .FirstOrDefault();

            if (mod == null)
            {
                return;
            }
            var tex    = mod.Mod.LoadTexture(mod.FullPath);
            var sprite = Sprite.Create(tex, itemSpawnerId.Sprite.rect, itemSpawnerId.Sprite.pivot,
                                       itemSpawnerId.Sprite.pixelsPerUnit, 0, SpriteMeshType.Tight, itemSpawnerId.Sprite.border);

            itemSpawnerId.Sprite = sprite;
        }
示例#11
0
        protected override void Init()
        {
            PackageMakerState.InitState();

            var hashSet = new HashSet <string>();

            if (mPackageVersion.IncludeFileOrFolders.Count == 0 && mPackageVersion.InstallPath.EndsWith("/"))
            {
                hashSet.Add(mPackageVersion.InstallPath.Remove(mPackageVersion.InstallPath.Length - 1));
            }

            foreach (var packageIncludeFileOrFolder in mPackageVersion.IncludeFileOrFolders)
            {
                hashSet.Add(packageIncludeFileOrFolder);
            }

            _assetTree    = new AssetTree();
            _assetTreeGUI = new AssetTreeIMGUI(_assetTree.Root);

            var guids = AssetDatabase.FindAssets(string.Empty);
            int i = 0, l = guids.Length;

            for (; i < l; ++i)
            {
                _assetTree.AddAsset(guids[i], hashSet);
            }

            RootLayout = new VerticalLayout("box");

            var editorView    = EasyIMGUI.Vertical().Parent(RootLayout);
            var uploadingView = new VerticalLayout().Parent(RootLayout);

            // 当前版本号
            var versionLine = EasyIMGUI.Horizontal().Parent(editorView);

            EasyIMGUI.Label().Text("当前版本号").Width(100).Parent(versionLine);
            EasyIMGUI.Label().Text(mPackageVersion.Version).Width(100).Parent(versionLine);

            // 发布版本号
            var publishedVersionLine = new HorizontalLayout().Parent(editorView);

            EasyIMGUI.Label().Text("发布版本号")
            .Width(100)
            .Parent(publishedVersionLine);

            EasyIMGUI.TextField()
            .Text(mPublishVersion)
            .Width(100)
            .Parent(publishedVersionLine)
            .Content.Bind(v => mPublishVersion = v);

            // 类型
            var typeLine = EasyIMGUI.Horizontal().Parent(editorView);

            EasyIMGUI.Label().Text("类型").Width(100).Parent(typeLine);

            var packageType = new EnumPopupView(mPackageVersion.Type).Parent(typeLine);

            var accessRightLine = EasyIMGUI.Horizontal().Parent(editorView);

            EasyIMGUI.Label().Text("权限").Width(100).Parent(accessRightLine);
            var accessRight = new EnumPopupView(mPackageVersion.AccessRight).Parent(accessRightLine);

            EasyIMGUI.Label().Text("发布说明:").Width(150).Parent(editorView);

            var releaseNote = EasyIMGUI.TextArea().Width(245)
                              .Parent(editorView);

            // 文件选择部分
            EasyIMGUI.Label().Text("插件目录: " + mPackageVersion.InstallPath)
            .Parent(editorView);

            EasyIMGUI.Custom().OnGUI(() =>
            {
                _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);

                _assetTreeGUI.DrawTreeLayout();

                EditorGUILayout.EndScrollView();
            }).Parent(editorView);


            PackageMakerState.InEditorView.BindWithInitialValue(value => { editorView.Visible = value; })
            .AddTo(mDisposableList);

            if (User.Logined)
            {
                EasyIMGUI.Button()
                .Text("发布")
                .OnClick(() =>
                {
                    var includedPaths = new List <string>();
                    _assetTree.Root.Traverse(data =>
                    {
                        if (data != null && data.isSelected)
                        {
                            includedPaths.Add(data.fullPath);
                            return(false);
                        }

                        return(true);
                    });

                    mPackageVersion.IncludeFileOrFolders = includedPaths;
                    mPackageVersion.Readme.content       = releaseNote.Content.Value;
                    mPackageVersion.AccessRight          = (PackageAccessRight)accessRight.ValueProperty.Value;
                    mPackageVersion.Type    = (PackageType)packageType.ValueProperty.Value;
                    mPackageVersion.Version = mPublishVersion;
                    mControllerNode.SendCommand(new PublishPackageCommand(mPackageVersion));
                }).Parent(editorView);
            }

            var notice = new LabelViewWithRect("", 100, 200, 200, 200).Parent(uploadingView);

            PackageMakerState.NoticeMessage
            .BindWithInitialValue(value => { notice.Content.Value = value; }).AddTo(mDisposableList);

            PackageMakerState.InUploadingView.BindWithInitialValue(value => { uploadingView.Visible = value; })
            .AddTo(mDisposableList);
        }
示例#12
0
 public AssetPairsInfo(Asset[] assets, string[] pairs, AssetTree tree)
 {
     Assets = assets;
     Pairs  = pairs;
     Tree   = tree;
 }
示例#13
0
 public AssetPairsInfo()
 {
     Tree   = new AssetTree();
     Assets = Tree.Assets.ToArray();
     Pairs  = new string[0];
 }
示例#14
0
        public static AssetTree Retrieve(CorrigoService service, int childId, int parentId)
        {
            Console.WriteLine();
            Console.WriteLine($"Retrieve AssetTree with ChildId={childId} ParentId={parentId}");
            CorrigoEntity result = null;

            try
            {
                result = service.Retrieve(
                    new AssetTreeEntitySpecifier
                {
                    ChildId  = childId,
                    ParentId = parentId
                },
                    //new PropertySet
                    //{
                    //    Properties = new string[]
                    //    {
                    //        "Id",
                    //        "ParentId",
                    //        "ChildId",
                    //        "Child.*",
                    //        //"Child.Address.*",
                    //        "Distance"
                    //    }
                    //}
                    new AllProperties()
                    );
            }
            catch (Exception e)
            {
                if (!string.IsNullOrEmpty(e.Message))
                {
                    Console.WriteLine(e.Message);
                }
            }

            if (result == null)
            {
                Console.WriteLine("Retrieve failed");
                return(null);
            }

            AssetTree toReturn = result as AssetTree;

            if (toReturn == null)
            {
                Console.WriteLine("Retrieve failed");
                return(null);
            }

            int padRightNumber = 55;

            Console.WriteLine(string.Concat("AssetTree.Id=".PadRight(padRightNumber), toReturn.Id.ToString()));
            Console.WriteLine(string.Concat("AssetTree.ParentId=".PadRight(padRightNumber), toReturn.ParentId.ToString()));

            if (toReturn.Child != null)
            {
                Console.WriteLine(string.Concat("AssetTree.Child.Name=".PadRight(padRightNumber), toReturn.Child.Name ?? ""));

                if (toReturn.Child.Address != null)
                {
                    Console.WriteLine(string.Concat("AssetTree.Child.Address.Country=".PadRight(padRightNumber), toReturn.Child.Address.Country ?? ""));
                    Console.WriteLine(string.Concat("AssetTree.Child.Address.City=".PadRight(padRightNumber), toReturn.Child.Address.City ?? ""));
                    Console.WriteLine(string.Concat("AssetTree.Child.Address.Street=".PadRight(padRightNumber), toReturn.Child.Address.Street ?? ""));
                }
            }

            Console.WriteLine();

            return(toReturn);
        }