Exemple #1
0
 public static ReturnCode Build(
     OwlcatModificationManifest manifest,
     Modification.SettingsData settings,
     string sourceFolder,
     string targetFolder,
     params IContextObject[] contextObjects)
 {
     try
     {
         return(BuildInternal(manifest, settings, sourceFolder, targetFolder, contextObjects));
     }
     catch (Exception e)
     {
         EditorUtility.DisplayDialog("Error!", $"{e.Message}\n\n{e.StackTrace}", "Close");
         return(ReturnCode.Exception);
     }
 }
Exemple #2
0
        public DefaultModificationParameters(
            OwlcatModificationManifest manifest, Modification.SettingsData settings, string sourcePath)
        {
            Manifest   = manifest;
            Settings   = settings;
            SourcePath = sourcePath;
            if (string.IsNullOrEmpty(SourcePath))
            {
                throw new Exception("Can't detect RootPath for modification");
            }

            GeneratedPath    = Path.Combine(SourcePath, BuilderConsts.Generated);
            ScriptsPath      = Path.Combine(SourcePath, BuilderConsts.Scripts);
            ContentPath      = Path.Combine(SourcePath, BuilderConsts.Content);
            BlueprintsPath   = Path.Combine(SourcePath, BuilderConsts.Blueprints);
            LocalizationPath = Path.Combine(SourcePath, BuilderConsts.Localization);

            string regexSearch       = new string(Path.GetInvalidFileNameChars());
            var    invalidCharsRegex = new Regex($"[{Regex.Escape(regexSearch) + "\\s"}]");

            TargetFolderName = invalidCharsRegex.Replace(Manifest.UniqueName, "");
        }
Exemple #3
0
        private static ReturnCode BuildInternal(
            OwlcatModificationManifest manifest,
            Modification.SettingsData settings,
            string sourceFolder,
            string targetFolder,
            params IContextObject[] contextObjects)
        {
            if (!Path.IsPathRooted(targetFolder))
            {
                targetFolder = Path.Combine(Path.Combine(Application.dataPath, ".."), targetFolder);
            }

            string intermediateBuildFolder = Path.Combine(targetFolder, BuilderConsts.Intermediate);

            if (Directory.Exists(targetFolder))
            {
                Directory.Delete(targetFolder, true);
            }

            Directory.CreateDirectory(intermediateBuildFolder);

            string logFilepath             = Path.Combine(targetFolder, "build.log");
            var    defaultBuildTarget      = EditorUserBuildSettings.activeBuildTarget;
            var    defaultBuildTargetGroup = BuildTargetGroup.Standalone;
            var    defaultBuildOptions     = EditorUserBuildSettings.development
                                ? ScriptCompilationOptions.DevelopmentBuild
                                : ScriptCompilationOptions.None;

            UglySBPHacks.ThreadingManager_WaitForOutstandingTasks();
            AssetDatabase.SaveAssets();

            var buildContext    = new BuildContext(contextObjects);
            var buildParameters = buildContext.EnsureContextObject <IBundleBuildParameters>(
                () => new BundleBuildParameters(defaultBuildTarget, defaultBuildTargetGroup, intermediateBuildFolder)
            {
                BundleCompression = BuildCompression.LZ4,
                ScriptOptions     = defaultBuildOptions,
                UseCache          = false,
            });

            contextObjects = (contextObjects ?? new IContextObject[0]).Concat(new IContextObject[]
            {
                buildParameters,
                buildContext.EnsureContextObject <IBundleLayoutManager>(() => new DefaultBundleLayoutManager()),
                buildContext.EnsureContextObject <IModificationRuntimeSettings>(() => new DefaultModificationRuntimeSettings()),
                buildContext.EnsureContextObject(() => new BuildInterfacesWrapper()),
                buildContext.EnsureContextObject <IBuildLogger>(() => new BuildLoggerFile(logFilepath)),
                buildContext.EnsureContextObject <IProgressTracker>(() => new ProgressLoggingTracker()),
                buildContext.EnsureContextObject <IDependencyData>(() => new BuildDependencyData()),
                buildContext.EnsureContextObject <IBundleWriteData>(() => new BundleWriteData()),
                buildContext.EnsureContextObject <IBundleBuildResults>(() => new BundleBuildResults()),
                buildContext.EnsureContextObject <IDeterministicIdentifiers>(() => new Unity5PackedIdentifiers()),
                buildContext.EnsureContextObject <IBundleBuildContent>(()
                                                                       => new BundleBuildContent(Enumerable.Empty <AssetBundleBuild>())),
                buildContext.EnsureContextObject <IBuildCache>(
                    () => new BuildCache(buildParameters.CacheServerHost, buildParameters.CacheServerPort)),
                buildContext.EnsureContextObject <IModificationParameters>(
                    () => new DefaultModificationParameters(manifest, settings, sourceFolder)),
            }).ToArray();

            var tasksList = GetTasks().ToArray();

            try
            {
                return(RunTasks(tasksList, buildContext));
            }
            finally
            {
                Dispose(contextObjects, tasksList);
            }
        }