public void Draw(PackageManifest manifest)
        {
            manifest.author.name  = EditorGUILayout.TextField("Author organization: ", manifest.author.name);
            manifest.author.email = EditorGUILayout.TextField("Author email: ", manifest.author.email);
            manifest.author.url   = EditorGUILayout.TextField("Author website: ", manifest.author.url);

            string selectedLicense = licenseList[licenseIndex];

            if (selectedLicense != manifest.license)
            {
                licenseIndex = Array.FindIndex(licenseList, x => x == manifest.license);
            }

            licenseIndex = EditorGUILayout.Popup("License: ", licenseIndex, licenseList);

            manifest.repository.url = EditorGUILayout.TextField("GIT repository: ", manifest.repository.url);

            EditorGUILayout.LabelField("Publication configuration");
            manifest.publishConfig.registry = registrySelector.SelectRegistry("\t", manifest.publishConfig.registry);



            // Set fields in manifest
            manifest.license = licenseList[licenseIndex];
        }
コード例 #2
0
        private static void OpenPackage()
        {
            PackageManifest manifest = HalodiPackageCreatorController.GetPackageManifest(Selection.activeObject, false);

            if (manifest != null)
            {
                EditorUtility.RevealInFinder(Path.Combine(manifest.info.assetPath, Paths.PackageManifest));
            }
        }
コード例 #3
0
        private static void PublishPackageMenu()
        {
            PackageManifest manifest = HalodiPackageCreatorController.GetPackageManifest(Selection.activeObject, true);

            if (manifest != null)
            {
                PublicationView.PublishPackages(manifest.info);
            }
        }
コード例 #4
0
        internal static void EmptySamplesDirectory(PackageManifest manifest)
        {
            DirectoryInfo SamplesDirectory = new DirectoryInfo(Path.Combine(HalodiPackageCreatorController.GetPackageDirectory(manifest), Paths.PackageSamplesFolder));

            if (SamplesDirectory.Exists)
            {
                SamplesDirectory.Delete(true);
            }
        }
コード例 #5
0
        private static void EmbedPackageMenu()
        {
            PackageManifest manifest = HalodiPackageCreatorController.GetPackageManifest(Selection.activeObject, false);

            if (manifest != null)
            {
                EmbedPackage(manifest);
            }
        }
コード例 #6
0
 private static string CreateLicense(PackageManifest manifest)
 {
     StringBuilder builder = new StringBuilder();
     builder.AppendLine("# License");
     builder.AppendLine();
     builder.Append("Copyright (C) "); builder.AppendLine(DateTime.Now.ToString("yyyy")); 
     builder.AppendLine();
     builder.Append(manifest.displayName); builder.AppendLine(" can not be copied and/or distributed without the express permission of the author(s).");
     return builder.ToString();
 }
コード例 #7
0
        internal static void CopySamples(PackageManifest manifest)
        {
            string AssetSampleDirectory = HalodiPackageCreatorController.GetAssetsSampleDirectory(manifest);

            if (Directory.Exists(AssetSampleDirectory))
            {
                EmptySamplesDirectory(manifest);
                string SamplesDirectory = Path.Combine(HalodiPackageCreatorController.GetPackageDirectory(manifest), Paths.PackageSamplesFolder);
                AssetDatabaseUtilities.CopyDirectory(HalodiPackageCreatorController.GetAssetsSampleDirectory(manifest), SamplesDirectory, true);
            }
        }
コード例 #8
0
        public PublicationPackageView(PackageManifest package)
        {
            this.publish          = false;
            this.package          = package;
            this.RegistrySelector = new RegistrySelector();

            if (package.publishConfig != null && !string.IsNullOrEmpty(package.publishConfig.registry))
            {
                this.registry = package.publishConfig.registry;
            }
        }
コード例 #9
0
        private static string CreateReadme(PackageManifest manifest)
        {
            StringBuilder builder = new StringBuilder();
            builder.Append("# "); builder.AppendLine(manifest.displayName);

            builder.AppendLine();

            builder.AppendLine(manifest.description);

            return builder.ToString();
        }
コード例 #10
0
 internal static void EmbedPackage(PackageManifest package)
 {
     if (package.IsEmbedded)
     {
         Debug.LogWarning("Cannot embed already embedded package");
     }
     else
     {
         EmbedPackageView embedView = EditorWindow.GetWindow <EmbedPackageView>(true, "Embed package", true);
         embedView.manifest = package;
     }
 }
コード例 #11
0
        private static bool PublishPackageMenuValidation()
        {
            PackageManifest manifest = HalodiPackageCreatorController.GetPackageManifest(Selection.activeObject, true);

            if (manifest != null)
            {
                return(manifest.info.source == UnityEditor.PackageManager.PackageSource.Embedded);
            }
            else
            {
                return(false);
            }
        }
コード例 #12
0
        private static string CreateChangelog(PackageManifest manifest)
        {
            StringBuilder builder = new StringBuilder();
            builder.AppendLine("# ChangeLog"); 
            builder.AppendLine();
            builder.AppendLine();


            builder.Append("## "); builder.Append(manifest.version); builder.Append(" - "); builder.AppendLine(DateTime.Now.ToString("yyyy-MM-dd")); 
            builder.Append("- Package created");

            return builder.ToString();
        }
 private static void EmbedPackageProgress(System.Diagnostics.Process process, PackageManifest manifest)
 {
     if (process.HasExited)
     {
         EditorUtility.ClearProgressBar();
         Debug.Log("Git clone finished with exit code " + process.ExitCode);
         process.Dispose();
     }
     else
     {
         EditorUtility.DisplayProgressBar("Cloning " + manifest.name, "Cloning " + manifest.name, 0.5f);
         EditorApplication.delayCall += () => EmbedPackageProgress(process, manifest);
     }
 }
コード例 #14
0
        internal static void Publish(PackageManifest manifest, string registry)
        {
            try
            {
                CopySamples(manifest);

                manifest.OnAfterDeserialize();
                string PackageFolder = Path.Combine(AssetDatabaseUtilities.GetRelativeToProjectRoot(Paths.PackagesFolder), manifest.package_name);

                NPMPublish.Publish(PackageFolder, registry);
            }
            finally
            {
                EmptySamplesDirectory(manifest);
            }
        }
        internal void Store(PackageManifest manifest)
        {
            JObject manifestJSON = JObject.Parse(HalodiPackageCreatorController.GetPackageManifestObject(manifest).text);

            JObject author = new JObject(
                new JProperty("name", manifest.author.name),
                new JProperty("email", manifest.author.email),
                new JProperty("url", manifest.author.url));

            manifestJSON["author"] = author;


            manifestJSON["license"] = manifest.license;

            JObject publicationConfig = new JObject(
                new JProperty("registry", manifest.publishConfig.registry)
                );

            manifestJSON["publishConfig"] = publicationConfig;


            if (string.IsNullOrWhiteSpace(manifest.repository.url))
            {
                manifest.repository.type = "";
            }
            else
            {
                manifest.repository.type = "git";
            }

            JObject repo = new JObject(
                new JProperty("type", manifest.repository.type),
                new JProperty("url", manifest.repository.url)
                );

            manifestJSON["repository"] = repo;



            AssetDatabaseUtilities.CreateTextFile(manifestJSON.ToString(), HalodiPackageCreatorController.GetPackageDirectory(manifest), Paths.PackageManifest);
            AssetDatabaseUtilities.UpdateAssetDatabase();
        }
コード例 #16
0
        internal static void CreatePackage(PackageManifest manifest)
        {
            manifest.OnBeforeSerialize();

            try
            {
                AssetDatabase.StartAssetEditing();
                string PackageFolderName = manifest.package_name;
                string packageFolder     = AssetDatabaseUtilities.CreateFolder(AssetDatabaseUtilities.GetRelativeToProjectRoot(Paths.PackagesFolder), PackageFolderName);


                AssemblyDefinition runtime = AssetDatabaseUtilities.CreateAssemblyFolder(packageFolder, Paths.RuntimeFolder, manifest.name, false, false, null);
                AssemblyDefinition editor  = AssetDatabaseUtilities.CreateAssemblyFolder(packageFolder, Paths.EditorFolder, manifest.name, false, true, new List <string> {
                    runtime.name
                });

                string testFolder = AssetDatabaseUtilities.CreateFolder(packageFolder, Paths.TestFolder);


                AssemblyDefinition runtimeTests = AssetDatabaseUtilities.CreateAssemblyFolder(testFolder, Paths.RuntimeFolder, manifest.name, true, false, new List <string> {
                    runtime.name
                });
                AssetDatabaseUtilities.CreateAssemblyFolder(testFolder, Paths.EditorFolder, manifest.name, true, true, new List <string> {
                    runtime.name, editor.name
                });


                AssetDatabaseUtilities.CreateJSONFile(manifest, packageFolder, Paths.PackageManifest);
                AssetDatabaseUtilities.CreateTextFile(CreateReadme(manifest), packageFolder, Paths.Readme);
                AssetDatabaseUtilities.CreateTextFile(CreateLicense(manifest), packageFolder, Paths.License);
                AssetDatabaseUtilities.CreateTextFile(CreateChangelog(manifest), packageFolder, Paths.Changelog);
            }
            finally
            {
                AssetDatabase.StopAssetEditing();
                AssetDatabaseUtilities.UpdateAssetDatabase();
            }
        }
コード例 #17
0
        internal static void AddSample(PackageManifest manifest, PackageManifest.Sample sample)
        {
            string assetDirectory   = GetAssetDirectory(manifest);
            string samplesDirectory = GetAssetsSampleDirectory(manifest);

            if (!sample.path.StartsWith(Paths.PackageSamplesFolder + "/"))
            {
                throw new System.Exception("Invalid sample directory");
            }


            Directory.CreateDirectory(samplesDirectory);

            string sampleFolderName = sample.path.Substring(Paths.PackageSamplesFolder.Length + 1);
            string sampleFolder     = Path.Combine(samplesDirectory, sampleFolderName);

            Directory.CreateDirectory(sampleFolder);
            CreateGitKeep.Create(sampleFolder);



            JObject manifestJSON = JObject.Parse(GetPackageManifestObject(manifest).text);

            var samplesJSON = (JArray)manifestJSON["samples"];


            JObject next = new JObject(
                new JProperty("displayName", sample.displayName),
                new JProperty("description", sample.description),
                new JProperty("path", sample.path));

            samplesJSON.Add(next);


            AssetDatabaseUtilities.CreateTextFile(manifestJSON.ToString(), GetPackageDirectory(manifest), Paths.PackageManifest);
            AssetDatabaseUtilities.UpdateAssetDatabase();
        }
        internal static void EmbedPackageFromGit(PackageManifest manifest)
        {
            string targetDirectory = Path.Combine(AssetDatabaseUtilities.GetRelativeToProjectRoot(Paths.PackagesFolder), manifest.package_name);

            if (File.Exists(targetDirectory))
            {
                Debug.LogWarning("Package directory " + targetDirectory + " already exists");
                return;
            }

            string gitCommand = "clone \"" + manifest.repository.url + "\"" + " " + "\"" + targetDirectory + "\"";

            try
            {
                System.Diagnostics.Process process = new System.Diagnostics.Process();
                process.StartInfo.UseShellExecute        = false;
                process.StartInfo.FileName               = "git";
                process.StartInfo.Arguments              = gitCommand;
                process.StartInfo.RedirectStandardOutput = true;
                process.StartInfo.RedirectStandardError  = true;

                process.OutputDataReceived += StdOut;
                process.ErrorDataReceived  += StdErr;


                process.Start();
                process.BeginOutputReadLine();
                process.BeginErrorReadLine();

                EditorApplication.delayCall += () => EmbedPackageProgress(process, manifest);
            }
            catch (Exception e)
            {
                Debug.Log("Cannot find git executable: " + e.Message);
            }
        }
コード例 #19
0
        internal static void EditPackage(PackageManifest package)
        {
            HalodiEditPackageView editView = EditorWindow.GetWindow <HalodiEditPackageView>(true, "Edit package", true);

            editView.manifest = package;
        }
コード例 #20
0
 private void SelectPackage(PackageManifest package)
 {
     UnityEngine.Object instance = HalodiPackageCreatorController.GetPackageManifestObject(package);
     Selection.activeObject = instance;
     CloseWindow();
 }
コード例 #21
0
 private void EditPackage(PackageManifest package)
 {
     HalodiEditPackageView.EditPackage(package);
     SelectPackage(package);
 }
コード例 #22
0
 private void AddSample(PackageManifest package)
 {
     HalodiAddSampleView.AddSample(package);
     CloseWindow();
 }
コード例 #23
0
 internal static string GetAssetsSampleDirectory(PackageManifest manifest)
 {
     return(Path.Combine(GetAssetDirectory(manifest), Paths.AssetsSamplesFolder));
 }
コード例 #24
0
 internal static string GetPackageDirectory(PackageManifest manifest)
 {
     return(manifest.filesystem_location);
 }
コード例 #25
0
        public static void AddSample(PackageManifest package)
        {
            HalodiAddSampleView addSampleView = EditorWindow.GetWindow <HalodiAddSampleView>(true, "Add sample", true);

            addSampleView.manifest = package;
        }
コード例 #26
0
 void OnDisable()
 {
     manifest = null;
 }
コード例 #27
0
 private void Pack(PackageManifest package)
 {
     PublicationController.Pack(package);
 }
コード例 #28
0
 void OnEnable()
 {
     extendedUI = new ExtendedPackagePropertiesUI();
     manifest   = new PackageManifest();
 }
コード例 #29
0
 void OnEnable()
 {
     manifest         = new PackageManifest();
     registrySelector = new RegistrySelector();
     licenseList      = SPDXLicenseList.Load().ToStringArray();
 }
コード例 #30
0
        private static bool OpenPackageValidation()
        {
            PackageManifest manifest = HalodiPackageCreatorController.GetPackageManifest(Selection.activeObject, false);

            return(manifest != null);
        }