Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
 public ContentListItem(ContentItem ContentItem, LibraryItem LibraryItem, QuasarModType qmt, List <GameElement> GameElements, int colorID)
 {
     CLIVM = new ContentListItemViewModel(ContentItem, LibraryItem, qmt, GameElements, colorID);
     InitializeComponent();
     DataContext = CLIVM;
 }