using System; using System.Diagnostics; using System.IO; namespace ResBuilder { class Program { const string luaFileRoot = @"UIEdit\res\ui_edit\lua"; const string defLuaJitExePath = @"luajit\luajit.exe"; const string uiConvertBinExe = @"UIEdit\2binnp.bat"; const string uiRoot = @"UIEdit\res"; const string uiXmlFileRootRelative = @"ui_edit\xmds_ui"; const string uiResFileRootRelative = @"ui_edit\res"; const string editorDataRoot = @"../data"; static void Main(string[] args) { var root = "./";//Tools.FindUpDirectory("GameEditors", 10); if (string.IsNullOrEmpty(root)) { Console.WriteLine("error:找不到GameEditors目录!"); Console.ReadKey(); return; } var outPath = Path.Combine(root, "resBuilder/out/bin"); var tmpPath = Path.Combine(root, "resBuilder/tmp"); if (Directory.Exists(outPath)) { Directory.Delete(outPath, true); } Directory.CreateDirectory(outPath); try { foreach (var argv in args) { Program.SetConfig(argv.Trim()); } // lua if (IsDoLua) { var luaSrcRoot = Path.Combine(root, luaFileRoot); var luaProcessedRoot = Path.Combine(outPath, "scr"); var luaJitExePath = Path.Combine(root, defLuaJitExePath); Console.WriteLine("start -> process lua..."); var luaProc = new LuaProcessor(luaSrcRoot, luaProcessedRoot, tmpPath, luaJitExePath); luaProc.Execute(); Console.WriteLine(" end -> process lua..."); if (IsPackLuaBin) { Console.WriteLine("start -> pack lua..."); var luaBinPacker = new LuaBinPacker(luaProcessedRoot, outPath); luaBinPacker.Pack(); Directory.Delete(luaProcessedRoot, true); Console.WriteLine(" end -> pack lua..."); } } // gamedata if (IsDoGameData) { Console.WriteLine("start -> pack editor ..."); var editPacker = new EditorBinPacker( Path.Combine(root, editorDataRoot), outPath); editPacker.Pack(); Console.WriteLine(" end -> pack editor data ..."); } // ui convert bin if (IsUIConvertBin) { Console.WriteLine("start -> ui convert bin ..."); StartProcess(Path.Combine(root, uiConvertBinExe)); Console.WriteLine(" end -> ui convert bin ..."); } // ui xml if (IsPackUIXml ) { Console.WriteLine("start -> pack ui xml..."); var uiXmlPacker = new UIXmlPacker( Path.Combine(root, uiRoot, uiXmlFileRootRelative), outPath, true); uiXmlPacker.Pack(); Console.WriteLine(" end -> pack ui xml..."); } // ui res if (IsDoUIRes) { var uiResOutPath = Path.Combine(root, "resBuilder/out"); Console.WriteLine("start -> process ui res..."); var urProc = new UIResProcessor(Path.Combine(root , uiRoot), uiResOutPath , uiResFileRootRelative); urProc.Execute(); Console.WriteLine(" end -> process ui res..."); if (IsPackUiRes) { //Console.WriteLine("start -> pack ui res..."); //var uiResPacker = new UIResPacker( // Path.Combine(root, uiResFileRoot), // uiResOutPath); //uiResPacker.Pack(); //Console.WriteLine(" end -> pack ui res..."); } } } catch (Exception e) { var color = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); Console.ForegroundColor = color; } if (IsPauseOnFinish) { Console.WriteLine("press any key to exit!"); Console.ReadKey(); } } public static bool IsPauseOnFinish = true; public static bool IsDoLua = false; public static bool IsJitLuaBytes = false; public static bool IsZipLuaBytes = false; public static bool IsPackLuaBin = false; public static bool IsDoGameData = true; public static bool IsPackUIXml = false; public static bool IsUIConvertBin = false; public static bool IsDoUIRes = false; public static bool IsPackUiRes = false; static void SetConfig(string arg) { if (arg.Equals("-!lua", StringComparison.OrdinalIgnoreCase)) { IsDoLua = false; } else if (arg.Equals("-luajit", StringComparison.OrdinalIgnoreCase)) { IsJitLuaBytes = true; } else if (arg.Equals("-luazip", StringComparison.OrdinalIgnoreCase)) { IsZipLuaBytes = true; } else if (arg.Equals("-luapack", StringComparison.OrdinalIgnoreCase)) { IsPackLuaBin = true; } else if (arg.Equals("-!gamedata", StringComparison.OrdinalIgnoreCase)) { IsDoGameData = false; } else if (arg.Equals("-uixmlpack", StringComparison.OrdinalIgnoreCase)) { IsPackUIXml = true; } else if (arg.Equals("-!uiconvertbin", StringComparison.OrdinalIgnoreCase)) { IsUIConvertBin = false; } else if (arg.Equals("-!uires", StringComparison.OrdinalIgnoreCase)) { IsDoUIRes = false; } else if (arg.Equals("-uirespack", StringComparison.OrdinalIgnoreCase)) { IsPackUiRes = true; } else if (arg.Equals("-np", StringComparison.OrdinalIgnoreCase)) { IsPauseOnFinish = false; } } public static void StartProcess(string luajitPath, string args = null) { var start = new ProcessStartInfo(luajitPath); start.WorkingDirectory = Path.GetDirectoryName(luajitPath); start.CreateNoWindow = false; start.UseShellExecute = false; start.RedirectStandardInput = false; start.RedirectStandardOutput = false; if (args != null) { start.Arguments = args; } var pro = Process.Start(start); pro.WaitForExit(); } } }