Example #1
0
        public void WriteBin(string FilePath)
        {
            // Write to a memory file, then ask the XAssetFile to convert it
            using (var Memory = new MemoryStream())
            {
                // Create
                this.WriteExport(Memory);

                // Reset
                Memory.Position = 0;

                // Write it
                using (var XAsset = new XAssetFile(Memory, InFormat.Export))
                    XAsset.WriteBin(FilePath);
            }
        }
Example #2
0
        private static void ConversionWatcher()
        {
            // Loop until end
            while (WatcherMode)
            {
                // Result
                string ToConvert = string.Empty;

                // Get an item
                lock (FilesToConvert)
                {
                    // Check
                    if (FilesToConvert.Count > 0)
                    {
                        // Grab it
                        ToConvert = FilesToConvert[0].ToLower();
                        // Remove
                        FilesToConvert.RemoveAt(0);
                    }
                }

                // Prepare to run
                if (!string.IsNullOrEmpty(ToConvert))
                {
                    // Make sure it isn't already there (The result file)
                    var ResultFile = (InputMode == InFormat.Export) ? ToConvert.Replace(".xanim_export", ".xanim_bin").Replace(".xmodel_export", ".xmodel_bin") : ToConvert.ToLower().Replace(".xanim_bin", ".xanim_export").Replace(".xmodel_bin", ".xmodel_export");
                    // Check it
                    if (!File.Exists(ResultFile))
                    {
                        // Wait until it can be read, (Read/Write access)
                        try
                        {
                            // Get read access
                            WaitForFile(ToConvert);
                            // Convert it
                            Console.WriteLine("  - Converting \"" + Path.GetFileName(ToConvert) + "\"");

                            // Process the file
                            using (XAssetFile Converter = new XAssetFile(ToConvert))
                            {
                                // Save it to opposite type
                                switch (InputMode)
                                {
                                case InFormat.Bin:
                                    Converter.WriteExport(ResultFile);
                                    break;

                                case InFormat.Export:
                                    Converter.WriteBin(ResultFile);
                                    break;
                                }
                            }
                        }
                        catch
                        {
                            // Move on, we failed
                        }
                    }
                }
                else
                {
                    // Wait
                    System.Threading.Thread.Sleep(100);
                }
            }
        }
Example #3
0
        static void Main(string[] args)
        {
            // Title
            Console.Title = "ExportX";
            // Header
            Console.WriteLine("-- ExportX (DTZxPorter) --" + Environment.NewLine);
            // Handle arguments as follows:
            // If all args are files, and it each contains a bin or export, convert to opposite format, in same dir
            // Else, send to command parser,
            // If no args, print usage
            bool NeedsArgParse = (args.Length > 0) ? false : true;

            // Check for them
            foreach (string arg in args)
            {
                // Check it
                if (!arg.StartsWith("-") && !arg.Contains("\"") && File.Exists(arg))
                {
                    // Not needed yet
                    NeedsArgParse = false;
                }
                else
                {
                    // We need to parse args
                    NeedsArgParse = true;
                    // Stop
                    break;
                }
            }

            // Check for multi-drag-drop
            if (!NeedsArgParse)
            {
                // We detected multiple drag and drop, loop and convert
                Parallel.ForEach <string>(args, (FilePath) =>
                {
                    // Check for bin / export
                    string Compare = FilePath.ToLower();
                    // Check type
                    if (Compare.EndsWith(".xmodel_bin") || Compare.EndsWith(".xanim_bin"))
                    {
                        // Log it
                        Console.WriteLine(":  Converting \"" + Path.GetFileName(FilePath) + "\"");
                        // Convert it
                        using (XAssetFile file = new XAssetFile(FilePath))
                        {
                            // Write to export
                            file.WriteExport(Path.Combine(Path.GetDirectoryName(FilePath.ToLower()), Path.GetFileName(FilePath.ToLower()).Replace(".xanim_bin", ".xanim_export").Replace(".xmodel_bin", ".xmodel_export")));
                        }
                    }
                    else if (Compare.EndsWith(".xmodel_export") || Compare.EndsWith(".xanim_export"))
                    {
                        // Log it
                        Console.WriteLine(":  Converting \"" + Path.GetFileName(FilePath) + "\"");
                        // Convert it
                        using (XAssetFile file = new XAssetFile(FilePath))
                        {
                            // Write to bin
                            file.WriteBin(Path.Combine(Path.GetDirectoryName(FilePath.ToLower()), Path.GetFileName(FilePath.ToLower()).Replace(".xanim_export", ".xanim_bin").Replace(".xmodel_export", ".xmodel_bin")));
                        }
                    }
                });

                // Done
                Console.Write(":  Finished converting...");
                Console.ReadKey();
            }
            else
            {
                // We must parse the flags because we had one that wasn't a file
                var options = new CommandLineOptions();
                // Commands
                if (CommandLine.Parser.Default.ParseArguments(args, options))
                {
                    // Check for *, if so, search current dir
                    if (options.InputFile == "*")
                    {
                        // Set to this
                        options.InputFile = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
                    }
                    // Check for watcher
                    if (options.Watcher)
                    {
                        // Watcher only mode
                        if (Directory.Exists(options.InputFile))
                        {
                            // Setup filters
                            switch (options.Mode.ToLower())
                            {
                            case "bin":
                                WatcherManager.RunWatcher(options.InputFile, ".xmodel_export|.xanim_export", InFormat.Export);
                                break;

                            case "export":
                                WatcherManager.RunWatcher(options.InputFile, ".xmodel_bin|.xanim_bin", InFormat.Bin);
                                break;
                            }
                        }
                        else
                        {
                            // Failed
                        }
                    }
                    else
                    {
                        // Check whether or not we got a file or directory
                        var info = File.GetAttributes(options.InputFile);
                        // Check
                        if (info.HasFlag(FileAttributes.Directory))
                        {
                            // Search directory for files based on the mode
                            if (Directory.Exists(options.InputFile))
                            {
                                // Search for files based on mode in dir
                                List <string> FilesToProcess = new List <string>();
                                // Search for files opposite of the mode
                                if (options.Mode.ToLower() == "bin")
                                {
                                    // Get exports
                                    FilesToProcess.AddRange(Directory.GetFiles(options.InputFile, "*.xmodel_export", SearchOption.AllDirectories));
                                    FilesToProcess.AddRange(Directory.GetFiles(options.InputFile, "*.xanim_export", SearchOption.AllDirectories));
                                    // Log count
                                    Console.WriteLine(":  Converting " + FilesToProcess.Count + " files to bins");
                                }
                                else if (options.Mode.ToLower() == "export")
                                {
                                    // Get bins
                                    FilesToProcess.AddRange(Directory.GetFiles(options.InputFile, "*.xmodel_bin", SearchOption.AllDirectories));
                                    FilesToProcess.AddRange(Directory.GetFiles(options.InputFile, "*.xanim_bin", SearchOption.AllDirectories));
                                    // Log count
                                    Console.WriteLine(":  Converting " + FilesToProcess.Count + " files to exports");
                                }
                                // Check output directory
                                if (!string.IsNullOrEmpty(options.OutputFile) && !Directory.Exists(options.OutputFile))
                                {
                                    // Make it
                                    Directory.CreateDirectory(options.OutputFile);
                                }
                                // Loop in parallel to convert them
                                Parallel.ForEach <string>(FilesToProcess, (ToConv) =>
                                {
                                    // Process it
                                    var ExportPath = string.Empty;
                                    // Check
                                    if (options.Mode.ToLower() == "export")
                                    {
                                        ExportPath = (string.IsNullOrEmpty(options.OutputFile)) ? ToConv.ToLower().Replace(".xanim_bin", ".xanim_export").Replace(".xmodel_bin", ".xmodel_export") : Path.Combine(options.OutputFile, Path.GetFileName(ToConv.ToLower().Replace(".xanim_bin", ".xanim_export").Replace(".xmodel_bin", ".xmodel_export")));
                                    }
                                    else
                                    {
                                        ExportPath = (string.IsNullOrEmpty(options.OutputFile)) ? ToConv.ToLower().Replace(".xanim_export", ".xanim_bin").Replace(".xmodel_export", ".xmodel_bin") : Path.Combine(options.OutputFile, Path.GetFileName(ToConv.ToLower().Replace(".xanim_export", ".xanim_bin").Replace(".xmodel_export", ".xmodel_bin")));
                                    }
                                    // Process and export
                                    using (XAssetFile Converter = new XAssetFile(ToConv))
                                    {
                                        // Save it to opposite type
                                        switch (Converter.Format)
                                        {
                                        case InFormat.Bin:
                                            Converter.WriteExport(ExportPath);
                                            break;

                                        case InFormat.Export:
                                            Converter.WriteBin(ExportPath);
                                            break;
                                        }
                                    }
                                });
                                // Finished
                                Console.WriteLine(":  Finished converting...");
                            }
                        }
                        else
                        {
                            // Process single file
                            if (File.Exists(options.InputFile))
                            {
                                // Process input
                                using (XAssetFile Converter = new XAssetFile(options.InputFile))
                                {
                                    // Check what we have
                                    if (options.Mode.ToLower() == "bin" && Converter.Format == InFormat.Export)
                                    {
                                        // Log
                                        Console.WriteLine(":  Converting \"" + Path.GetFileNameWithoutExtension(options.InputFile) + "\"");
                                        // Save to bin
                                        var ExportPath = (string.IsNullOrEmpty(options.OutputFile)) ? options.InputFile.ToLower().Replace(".xanim_export", ".xanim_bin").Replace(".xmodel_export", ".xmodel_bin") : options.OutputFile;
                                        // Save
                                        Converter.WriteBin(ExportPath);
                                        // Done
                                        Console.WriteLine(":  Finished converting...");
                                    }
                                    else if (options.Mode.ToLower() == "export" && Converter.Format == InFormat.Bin)
                                    {
                                        // Log
                                        Console.WriteLine(":  Converting \"" + Path.GetFileNameWithoutExtension(options.InputFile) + "\"");
                                        // Save to export
                                        var ExportPath = (string.IsNullOrEmpty(options.OutputFile)) ? options.InputFile.ToLower().Replace(".xanim_bin", ".xanim_export").Replace(".xmodel_bin", ".xmodel_export") : options.OutputFile;
                                        // Save
                                        Converter.WriteExport(ExportPath);
                                        // Done
                                        Console.WriteLine(":  Finished converting...");
                                    }
                                    else
                                    {
                                        // Format match
                                        Console.WriteLine(":  Input and output formats match.");
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }