static void Main(string[] args) { bool ConsoleMode = args.Length > 1; if (ConsoleMode) { AllocConsole(); var inputFile = args[0]; var outputFile = args[1]; var tool = new TEXTool(); tool.OpenFile(inputFile, new FileStream(inputFile, FileMode.Open, FileAccess.Read)); tool.FileOpened += (sender, ev) => { tool.SaveFile(outputFile); }; } else { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); MainForm form = new MainForm(); // Open With.. if (args.Length > 0) form.Tool.OpenFile(args[0], new FileStream(args[0], FileMode.Open, FileAccess.Read)); Application.Run(form); } }
public MainForm() { Tool = new TEXTool(); Tool.FileOpened += new FileOpenedEventHandler(TEXTool_FileOpened); Tool.FileRawImage += new FileRawImageEventHandler(tool_FileRawImage); Tool.OnProgressUpdate += tool_OnProgressUpdate; InitializeComponent(); FillZoomLevelComboBox(); versionToolStripLabel.Text = string.Format("Version: {0}", Assembly.GetEntryAssembly().GetName().Version); foreach (PropertyInfo prop in typeof(Color).GetProperties()) { if (prop.PropertyType.FullName == "System.Drawing.Color") { atlasElementBorderColors.ComboBox.Items.Add(prop.Name); } } atlasElementBorderColors.ComboBox.SelectedItem = "Black"; atlasElementsListToolStripComboBox.ComboBox.DisplayMember = "Name"; }
/// <summary> /// Mod构造事件 /// </summary> /// <param name="modinfoLuaPath">mod的modinfo.lua文件路径</param> public Mod(string modinfoLuaPath) { #region Mod除了设置的各种信息 // 路径 ModinfoLuaPath = modinfoLuaPath; //文件夹名字 var directoryInfo = new DirectoryInfo(Path.GetDirectoryName(modinfoLuaPath) ?? throw new InvalidOperationException()); ModDirName = directoryInfo.Name; // 读取modinfo文件 var modInfoLuaTable = LuaHelper.ReadLua(modinfoLuaPath, Encoding.UTF8, false); // 读取图片 try { var filename = new DirectoryInfo(Path.GetFileName(modinfoLuaPath) ?? throw new InvalidOperationException()); PicturePath = modInfoLuaTable["icon"]?.ToString() ?? ""; if (!string.IsNullOrEmpty(PicturePath)) { PicturePath = modinfoLuaPath.Replace(filename.ToString(), "") + PicturePath; Debug.WriteLine("图片路径:" + PicturePath); Picture = new TEXTool().OpenFile(PicturePath); Debug.WriteLine("图片:" + Picture); } } catch (Exception e) { Debug.WriteLine("读取图片错误,错误消息:" + e.Message); } // 读取其他元信息 Name = modInfoLuaTable["name"]?.ToString() ?? ""; Description = modInfoLuaTable["description"]?.ToString() ?? ""; Author = modInfoLuaTable["author"]?.ToString() ?? ""; Version = modInfoLuaTable["version"]?.ToString() ?? ""; // mod类型[客户端|服务端|所有人] if (modInfoLuaTable["client_only_mod"] == null || modInfoLuaTable["client_only_mod"].ToString().Trim().ToLower() == "false") { if (modInfoLuaTable["all_clients_require_mod"] == null) { ModType = ModType.AllClient; } else { ModType = modInfoLuaTable["all_clients_require_mod"].ToString().Trim().ToLower() == "true" ? ModType.AllClient : ModType.Server; } } else { ModType = ModType.Client; } #endregion #region mod的设置信息 if (ModType != ModType.Client) { // mod的设置 configuration_options ConfigurationOptions = new Dictionary <string, ModSetting>(); // 如果没有设置,返回 if (modInfoLuaTable["configuration_options"] == null) { return; } var configurationOptionsLuaTable = (LuaTable)modInfoLuaTable["configuration_options"]; // lua下标从1开始 for (var i = 1; i <= configurationOptionsLuaTable.Length; i++) { // 获取name的值[name设置的是唯一标志符],如果name值为空,干脆不储存,直接到下一个循环 var nameLuaTable = ((LuaTable)configurationOptionsLuaTable[i])["name"]; if (string.IsNullOrEmpty(nameLuaTable?.ToString().Trim())) { continue; } var modSettingName = nameLuaTable.ToString(); // Label的值 var label = ((LuaTable)configurationOptionsLuaTable[i])["label"]; var modSettingLabel = string.IsNullOrEmpty(label?.ToString().Trim()) ? "" : label.ToString(); // Hover的值 var hover = ((LuaTable)configurationOptionsLuaTable[i])["hover"]; var modSettingHover = string.IsNullOrEmpty(hover?.ToString().Trim()) ? "" : hover.ToString(); // Options,每个设置的选项 List <Option> modSettingOptionList = null; var options = ((LuaTable)configurationOptionsLuaTable[i])["options"]; if (options != null) { modSettingOptionList = new List <Option>(); var optionsLuaTable = (LuaTable)options; // lua从1开始 for (var j = 1; j <= optionsLuaTable.Length; j++) { var optionsHover = ((LuaTable)optionsLuaTable[j])["hover"]; var option = new Option { Description = ((LuaTable)optionsLuaTable[j])["description"].ToString(), Data = ((LuaTable)optionsLuaTable[j])["data"].ToString() }; if (!string.IsNullOrEmpty(optionsHover?.ToString().Trim())) { option.Hover = optionsHover.ToString(); } // 其实这个data值是有数据类型的,bool,int,string.但是这里全部都是string了,在保存到文件的时候要判断类型保存 modSettingOptionList.Add(option); } } else { continue; } // Default的值 var modSettingDefault = ""; var modSettingCurrent = ""; var defaultValue = ((LuaTable)configurationOptionsLuaTable[i])["default"]; if (!string.IsNullOrEmpty(defaultValue?.ToString().Trim())) { modSettingDefault = defaultValue.ToString(); modSettingCurrent = defaultValue.ToString(); } // 判断default是否存在于data中,有的作者瞎写。。 只能判断下 var isDefaultInData = false; foreach (var option in modSettingOptionList) { if (modSettingDefault == option.Data) { isDefaultInData = true; } } // 标记(listOptions[0]没有判断是否为空) 如果不存在,赋值第一个data的值 if (!isDefaultInData) { modSettingDefault = modSettingOptionList[0].Data; modSettingCurrent = modSettingOptionList[0].Data; } // 赋值到mod设置中 var modSetting = new ModSetting { Name = modSettingName, Label = modSettingLabel, Hover = modSettingHover, Options = modSettingOptionList, Default = modSettingDefault, Current = modSettingCurrent }; // 添加到总的 configuration_options ConfigurationOptions[modSettingName] = modSetting; } } #endregion //#region 读取modoverrides,赋值到current值中,用current覆盖default //ReadModoverrides(thisModConfig); //#endregion }