public abstract Dictionary<string, FileOutput> Package( BuildContext buildContext, string projectId, Dictionary<string, Executable[]> finalCode, List<string> filesToCopyOver, ICollection<StructDefinition> structDefinitions, string fileCopySourceRoot, SpriteSheetBuilder spriteSheet);
public void Compile( BuildContext buildContext, string inputFolder, string baseOutputFolder, string nullableReadableByteCodeOutputPath) { Parser.IsTranslateMode_STATIC_HACK = false; this.VerifyProjectId(buildContext.ProjectID); inputFolder = inputFolder.Replace('/', '\\'); if (inputFolder.EndsWith("\\")) inputFolder = inputFolder.Substring(0, inputFolder.Length - 1); List<string> filesToCopyOver = new List<string>(); this.GetRelativePaths(inputFolder, null, filesToCopyOver); SpriteSheetBuilder spriteSheetBuilder = new SpriteSheetBuilder(buildContext); if (buildContext.SpriteSheetIds != null) { foreach (string spriteSheetId in buildContext.SpriteSheetIds) { foreach (string fileMatcher in buildContext.SpriteSheetPrefixesById[spriteSheetId]) { spriteSheetBuilder.AddPrefix(spriteSheetId, fileMatcher); } } } List<string> spriteSheetOpsStringArgs = new List<string>(); List<int[]> spriteSheetOpsIntArgs = new List<int[]>(); Dictionary<string, FileOutput> spriteSheetFiles = new Dictionary<string,FileOutput>(); HashSet<string> filesAccountedForInSpriteSheet = new HashSet<string>(); spriteSheetBuilder.Generate(this.GeneratedFilesFolder, filesToCopyOver, spriteSheetOpsStringArgs, spriteSheetOpsIntArgs, spriteSheetFiles, filesAccountedForInSpriteSheet); ByteBuffer byteCodeBuffer = GenerateByteCode(buildContext, inputFolder, spriteSheetOpsStringArgs, spriteSheetOpsIntArgs); if (nullableReadableByteCodeOutputPath != null) { this.GenerateReadableByteCode(nullableReadableByteCodeOutputPath, byteCodeBuffer); } string byteCode = ByteCodeEncoder.Encode(byteCodeBuffer); this.Context.ByteCodeString = byteCode; Parser.IsTranslateMode_STATIC_HACK = true; Dictionary<string, Executable[]> executablesByFile = this.InterpreterCompiler.Compile(); Parser.IsTranslateMode_STATIC_HACK = false; StructDefinition[] structs = this.InterpreterCompiler.GetStructDefinitions(); HashSet<string> filesToCopyOverTemporary = new HashSet<string>(filesToCopyOver); foreach (string fileInSpriteSheet in filesAccountedForInSpriteSheet) { filesToCopyOverTemporary.Remove(fileInSpriteSheet.Replace('/', '\\')); } filesToCopyOver.Clear(); filesToCopyOver.AddRange(filesToCopyOverTemporary); Dictionary<string, FileOutput> files = this.Package( buildContext, buildContext.ProjectID, executablesByFile, filesToCopyOver, structs, inputFolder, spriteSheetBuilder); foreach (string file in spriteSheetFiles.Keys) { if (files.ContainsKey(file)) { throw new InvalidOperationException("Autogenerated sprite sheet files are overwriting existing files."); } files[file] = spriteSheetFiles[file]; } string outputFolder = baseOutputFolder; Util.EnsureFolderExists(outputFolder); this.DeleteExistingContents(outputFolder); this.GenerateFiles(buildContext, files, outputFolder, inputFolder); }