private void ButtonLoadSingleMod_MouseClick(object sender, MouseEventArgs e) { //create and setup an open file dialog OpenFileDialog ofd = new OpenFileDialog(); ofd.Multiselect = false; DialogResult rep = ofd.ShowDialog(); if (rep == DialogResult.OK) { string FilePath = ofd.FileName; try { //load the mod object oMod NewMod = new oMod(FilePath); //mods load faster when the tab container does have to refresh while the process. this.TabContainer.Visible = false; Crafts.AddMod(NewMod); this.TabContainer.Visible = true; this.Editer.RefreshImage(); } catch { MessageBox.Show("An error occurred"); } } }
//load, in the correct order, every mods (identified by the file extension) found inside a folder. private void LoadModsInFolder(string FolderPath) { //generate a list of every extensions associated to a fomod file. //System.IO.Path.GetExtension return the . and the text file path after that dot. for this reason, everything put into this list begins with a . List <string> extensions = new List <string>(); extensions.Add(".fomod"); for (int i = 1; i <= 9; i++) { extensions.Add(".fomod" + i.ToString()); extensions.Add(".fomod" + i.ToString().PadLeft(2, "0".ToCharArray()[0])); } for (int i = 10; i <= 99; i++) { extensions.Add(".fomod" + i.ToString().PadLeft(2, "0".ToCharArray()[0])); } //get every file in this path List <string> EveryFilePath = System.IO.Directory.GetFiles(FolderPath).ToList(); ////filter for fomod files. //this list contain, in the appropriate loading order, every mod file's path to load. List <string> EveryModPath = new List <string>(); //because extension array is our first loop, the mod files will be added according to mod load order foreach (string ext in extensions) { //we search every file with this extension int index = EveryFilePath.Count - 1; while (index >= 0) { //the actual file path string FilePath = EveryFilePath[index]; try { //get this file's extension string FileExt = System.IO.Path.GetExtension(FilePath); //check if this file's extension is the extension we are actually looking for. if (FileExt == ext) { //because this file's extension is the extension we are actually looking for, we add it to the EveryModPath list EveryModPath.Add(FilePath); //we remove this file from the list, because we know we won't have to analyse it anymore. EveryFilePath.RemoveAt(index); } } catch { } //next iteration index--; } //if there's no file left in the EveryFilePath list, we can stop because there's nothing left. if (EveryFilePath.Count <= 0) { break; } } ////create the mod objects for every file List <oMod> listMods = new List <oMod>(); //we create a mod for every file foreach (string ModFilePath in EveryModPath) { try { //generate the mod for this file oMod newmod = new oMod(ModFilePath); //add the mod to the list of mod to load listMods.Add(newmod); } catch { MessageBox.Show("An error occurred when loading " + ModFilePath); } } ////load the mods //mods load faster when the tab container does have to refresh while the process. this.TabContainer.Visible = false; Crafts.AddMod(listMods); this.TabContainer.Visible = true; this.Editer.RefreshImage(); }