示例#1
0
        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
 }