コード例 #1
0
        public void Pack(string sourcePath, string destinationPath)
        {
            var isFile = File.Exists(sourcePath);
            var unpackedFiles = isFile ? new[] { sourcePath } : Directory.GetFiles(sourcePath, "*.xnb.js", SearchOption.AllDirectories);
            var tempDir = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), "Gnomoria.ContentExtractor", Guid.NewGuid().ToString())).FullName;

            foreach (var file in unpackedFiles)
            {
                logger.Info("Creating intermediate file for {0}", Path.GetFileNameWithoutExtension(file));
                var doc = JsonConvert.DeserializeXmlNode(File.ReadAllText(file));
                var assetPath = (isFile ? Path.GetFileName(file) : file.Substring(sourcePath.Length)).Split('.')[0] + ".xml";
                Directory.CreateDirectory(Path.GetDirectoryName(Path.Combine(tempDir, assetPath)));
                doc.Save(Path.Combine(tempDir, assetPath));
            }

            logger.Info("Packing files");
            var filesToBePacked = Directory.GetFiles(tempDir, "*.xml", SearchOption.AllDirectories);
            var libPath = Path.Combine(tempDir, "gnomorialib.dll");
            var preppedLibrary = false;
            
            try
            {
                var startInfo = new ProcessStartInfo()
                {
                    FileName = "lib\\de4dot",
                    Arguments = "gnomorialib.dll -o {0} --keep-names ef".FormatWith(libPath),
                    RedirectStandardOutput = true,
                    CreateNoWindow = true,
                    UseShellExecute = false,
                    WorkingDirectory = "lib"
                };

                using (var process = new Process { StartInfo = startInfo })
                {
                    process.Start();
                    process.StandardOutput.ReadToEnd();

                    preppedLibrary = process.ExitCode == 0;
                }
            }
            catch (Exception e)
            {
                logger.Debug(e);
            }

            if (!preppedLibrary)
            {
                logger.Error("Couldn't prep library");
                Cleanup(tempDir);
                return;
            }

            var project = new ContentProject(destinationPath, tempDir);
            project.AddReference("gnomorialib", libPath);

            foreach (var file in filesToBePacked)
                project.AddItem(file, "XmlImporter", Path.GetFileName(file), Path.GetFileNameWithoutExtension(file));

            if (!project.Build())
                logger.Error("Error while packing data. See log for details");

            Cleanup(tempDir);
        }
コード例 #2
0
        private void PackSkinImages(string[] images, string imagesDir, string destination, string tempDir)
        {
            var project = new ContentProject(destination, tempDir);
            project.AddReference("Microsoft.Xna.Framework.Content.Pipeline.TextureImporter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=MSIL");

            foreach (var file in images)
                project.AddItem(file, "TextureImporter", Path.GetFileName(file), Path.GetFileNameWithoutExtension(file), "TextureProcessor");

            if (!project.Build())
                logger.Error("Error while packing images. See log for details");
        }