public static void ProcessQuasarModTypes(ObservableCollection <InternalModType> V1InternalModTypes) { ObservableCollection <QuasarModType> QuasarModTypes = new ObservableCollection <QuasarModType>(); foreach (InternalModType imt in V1InternalModTypes) { QuasarModType qmt = new QuasarModType() { ID = imt.ID, Name = imt.Name, GameElementFamilyID = imt.Association, GroupName = imt.TypeGroup, IgnoreGameElementFamily = imt.IgnoreableGameDataAssociation, NoGameElement = imt.NoGameData, IsExternal = imt.OutsideFolder, ExternalFolderPath = imt.OutsideFolderPath, SlotCount = imt.Slots, QuasarModTypeFileDefinitions = new ObservableCollection <QuasarModTypeFileDefinition>() }; foreach (InternalModTypeFile bf in imt.Files) { QuasarModTypeFileDefinition fileDefinition = new QuasarModTypeFileDefinition() { ID = bf.ID, SearchPath = bf.SourcePath, SearchFileName = bf.SourceFile, QuasarModTypeBuilderDefinitions = new ObservableCollection <QuasarModTypeBuilderDefinition>() }; foreach (BuilderFile f in bf.Files) { fileDefinition.QuasarModTypeBuilderDefinitions.Add(new QuasarModTypeBuilderDefinition() { ModLoaderID = f.BuilderID, OutputFileName = f.File, OutputPath = f.Path }); } qmt.QuasarModTypeFileDefinitions.Add(fileDefinition); } QuasarModTypes.Add(qmt); } JSonHelper.SaveQuasarModTypes(QuasarModTypes); }
/// <summary> /// Slots Content Items automatically in a Workspace /// </summary> /// <param name="ContentItems"></param> /// <param name="Workspace"></param> /// <param name="QuasarModTypes"></param> /// <returns></returns> public static Workspace AutomaticSlot(List <ContentItem> ContentItems, Workspace Workspace, ObservableCollection <QuasarModType> QuasarModTypes) { foreach (ContentItem ci in ContentItems) { if (ci.GameElementID != -1) { QuasarModType imt = QuasarModTypes.Single(i => i.ID == ci.QuasarModTypeID); if (imt.IsExternal) { int Slot = 0; bool foundSlot = false; while (!foundSlot) { if (!Workspace.Associations.Any(a => a.QuasarModTypeID == imt.ID && a.SlotNumber == Slot)) { Workspace.Associations.Add(new Association() { ContentItemGuid = ci.Guid, GameElementID = ci.GameElementID, QuasarModTypeID = ci.QuasarModTypeID, SlotNumber = Slot }); foundSlot = true; } Slot++; } } else { Association associations = Workspace.Associations.SingleOrDefault(ass => ass.GameElementID == ci.GameElementID && ass.QuasarModTypeID == ci.QuasarModTypeID && ass.SlotNumber == ci.SlotNumber); if (associations != null) { Workspace.Associations.Remove(associations); } Workspace.Associations.Add(new Association() { ContentItemGuid = ci.Guid, GameElementID = ci.GameElementID, QuasarModTypeID = ci.QuasarModTypeID, SlotNumber = ci.SlotNumber }); } } } return(Workspace); }
/// <summary> /// Outputs a list of Mod Files that can be built /// </summary> /// <param name="qmt"></param> /// <param name="Family"></param> /// <param name="ci"></param> /// <param name="Slot"></param> /// <param name="ModLoader"></param> /// <param name="li"></param> /// <param name="game"></param> /// <returns></returns> public static ObservableCollection <ModFile> GetModFiles(QuasarModType qmt, GameElementFamily Family, ContentItem ci, int Slot, int ModLoader, LibraryItem li, Game game) { string DefaultDir = Properties.Settings.Default.DefaultDir; ObservableCollection <ModFile> PreparedModFiles = new ObservableCollection <ModFile>(); foreach (ScanFile sf in ci.ScanFiles) { QuasarModTypeFileDefinition FileDefinition = qmt.QuasarModTypeFileDefinitions.Single(def => def.ID == sf.QuasarModTypeFileDefinitionID); GameElement ge = Family.GameElements.Single(e => e.ID == sf.GameElementID); string ModFolder = Properties.Settings.Default.DefaultDir + @"\Library\Mods\" + li.Guid + @"\"; ModFile mf = new ModFile() { SourceFilePath = ModFolder + sf.SourcePath, DestinationFilePath = ProcessOutput(ModFolder + sf.SourcePath, FileDefinition, ge, Slot, ModLoader, li, ModFolder), LibraryItemGuid = ci.LibraryItemGuid }; PreparedModFiles.Add(mf); } return(PreparedModFiles); }
/// <summary> /// Matches all scan files to a game entry /// </summary> /// <param name="FilesToMatch"></param> /// <param name="FileDefinition"></param> /// <param name="qmt"></param> /// <param name="game"></param> /// <param name="ModFolder"></param> /// <returns></returns> public static ObservableCollection <ScanFile> MatchFiles(ObservableCollection <ScanFile> FilesToMatch, QuasarModTypeFileDefinition FileDefinition, QuasarModType qmt, Game game, string ModFolder) { Regex FileRegex = new Regex(PrepareRegex(FileDefinition.SearchFileName)); Regex FolderRegex = new Regex(PrepareRegex(FileDefinition.SearchPath)); foreach (ScanFile FileToMatch in FilesToMatch) { Match fileMatch = FileRegex.Match(FileToMatch.SourcePath.Replace('\\', '/')); Match folderMatch = FolderRegex.Match(FileToMatch.SourcePath.Replace('\\', '/')); if (folderMatch.Success || fileMatch.Success) { //Match Data string FolderSlot = ""; string FileSlot = ""; GameElement RecognisedFolderGameData = null; GameElement RecognisedFileGameData = null; GameElementFamily Family = game.GameElementFamilies.Single(f => f.ID == qmt.GameElementFamilyID); //Match Data Processing if (folderMatch.Success) { Group GameData = folderMatch.Groups["GameData"]; string FolderGameData = GameData.Value; RecognisedFolderGameData = Family.GameElements.SingleOrDefault(ge => (ge.GameFolderName == FolderGameData.ToLower()) || (ge.GameFolderName.Contains(";") ? ge.GameFolderName.Split(';').Contains(FolderGameData.ToLower()) : false)); Group Slot = folderMatch.Groups["Slot"]; FolderSlot = Slot.Value; } if (fileMatch.Success) { Group GameData = fileMatch.Groups["GameData"]; string FileGameData = GameData.Value; RecognisedFileGameData = Family.GameElements.SingleOrDefault(ge => (ge.GameFolderName == FileGameData.ToLower()) || (ge.GameFolderName.Contains(";") ? ge.GameFolderName.Split(';').Contains(FileGameData.ToLower()) : false)); Group Slot = fileMatch.Groups["Slot"]; FileSlot = Slot.Value; } //Match Validation if ((RecognisedFileGameData != null || RecognisedFolderGameData != null) && (FileDefinition.SearchPath == "" || folderMatch.Success) && fileMatch.Success) { FileToMatch.QuasarModTypeID = qmt.ID; FileToMatch.QuasarModTypeFileDefinitionID = FileDefinition.ID; FileToMatch.GameElementID = RecognisedFolderGameData != null ? RecognisedFolderGameData.ID : RecognisedFileGameData.ID; FileToMatch.Slot = FolderSlot != "" ? FolderSlot : FileSlot != "" ? FileSlot : "00"; //Processing paths FileToMatch.SourcePath = FileToMatch.SourcePath.Replace('/', '\\').Replace(ModFolder, ""); if (folderMatch.Value == "") { FileToMatch.OriginPath = FileToMatch.SourcePath; } else { FileToMatch.OriginPath = FileToMatch.SourcePath.Replace("\\" + folderMatch.Value.Replace('/', '\\'), ""); } FileToMatch.OriginPath = FileToMatch.OriginPath.Replace(fileMatch.Value, "|"); FileToMatch.OriginPath = FileToMatch.OriginPath.Split('|')[0]; FileToMatch.Scanned = true; } } } return(FilesToMatch); }
public ContentListItem(ContentItem ContentItem, LibraryItem LibraryItem, QuasarModType qmt, List <GameElement> GameElements, int colorID) { CLIVM = new ContentListItemViewModel(ContentItem, LibraryItem, qmt, GameElements, colorID); InitializeComponent(); DataContext = CLIVM; }