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); } }
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, ""); }
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); } }