public IManifestEntry ProcessManifestEntry(
            IManifest manifest,
            ObjectType entryType,
            string path,
            dynamic jsonObject,
            IReferenceFinderService referenceFinderService)
        {
            var manifestEntry = new ManifestEntry(manifest, entryType, path, jsonObject, referenceFinderService);
            var di            = new DirectoryInfo(Path.Combine(manifest.Mod.SourceDirectoryPath, manifestEntry.Path));

            if (!di.Exists)
            {
                return(manifestEntry);
            }

            di.GetFiles("*.*").ToList().ForEach(
                fi =>
            {
                var identifier       = fi.Name.Substring(0, fi.Name.Length - fi.Extension.Length);
                var objectDefinition = ObjectDefinitionFactory.ObjectDefinitionFactorySingleton.Get(
                    entryType,
                    new ObjectDefinitionDescription(identifier, identifier, jsonObject),
                    (JObject)jsonObject,
                    fi.FullName,
                    referenceFinderService);
                manifestEntry.Objects.Add(objectDefinition);
            });
            return(manifestEntry);
        }
 public ReferenceFinderDashboardController()
 {
     _ReferenceFinderDocumentTypesService = new ReferenceFinderDocumentTypesService(ApplicationContext.Current.Services);;
     _ReferenceFinderMediaService         = new ReferenceFinderMediaService(UmbracoContext.Current);
     _ReferenceFinderContentService       = new ReferenceFinderContentService(UmbracoContext.Current);
     _ReferenceFinderService = new ReferenceFinderService(_ReferenceFinderContentService, _ReferenceFinderMediaService);
 }
        public IManifestEntry ProcessManifestEntry(
            IManifest manifest,
            ObjectType entryType,
            string path,
            dynamic jsonObject,
            IReferenceFinderService referenceFinderService)
        {
            var manifestEntry = new ManifestEntry(manifest, entryType, path, jsonObject, referenceFinderService);

            var assetBundleDirectory = Path.Combine(manifest.Mod.SourceDirectoryPath, path);
            var di = new DirectoryInfo(assetBundleDirectory);

            if (!di.Exists)
            {
                throw new InvalidProgramException($"Expected asset bundle directory at [{di.FullName}].");
            }

            di.GetFiles("*.").ToList().ForEach(
                fi =>
            {
                var objectDefinition = ObjectDefinitionFactory.ObjectDefinitionFactorySingleton.Get(
                    entryType,
                    new ObjectDefinitionDescription(fi.Name, fi.Name, jsonObject),
                    (JObject)jsonObject,
                    fi.FullName,
                    referenceFinderService);
                manifestEntry.Objects.Add(objectDefinition);
            });
            return(manifestEntry);
        }
 public VehicleChassisObjectDefinition(
     ObjectType objectType,
     IObjectDefinitionDescription objectDescription,
     dynamic jsonObject,
     string filePath,
     IReferenceFinderService referenceFinderService)
     : base(objectType, objectDescription, (JObject)jsonObject, filePath, referenceFinderService)
 {
 }
 public HardpointDataObjectDefinition(
     ObjectType objectType,
     IObjectDefinitionDescription objectDescription,
     dynamic jsonObject,
     string filePath,
     IReferenceFinderService referenceFinderService)
     : base(objectType, objectDescription, (JObject)jsonObject, filePath, referenceFinderService)
 {
 }
Esempio n. 6
0
 public SimGameConstantsObjectDefinition(
     ObjectType objectType,
     IObjectDefinitionDescription objectDescription,
     dynamic jsonObject,
     string filePath,
     IReferenceFinderService referenceFinderService)
     : base(objectType, objectDescription, (JObject)jsonObject, filePath, referenceFinderService)
 {
     this.AddMetaData();
 }
 public LanceSlotDefinition(
     ObjectType objectType,
     IObjectDefinitionDescription objectDescription,
     dynamic jsonObject,
     string filePath,
     long lanceSlotNumber,
     IReferenceFinderService referenceFinderService)
     : base(objectType, objectDescription, jsonObject as JObject, filePath, referenceFinderService)
 {
     this.LanceSlotNumber = lanceSlotNumber;
 }
Esempio n. 8
0
 public LanceDefObjectDefinition(
     ObjectType objectType,
     IObjectDefinitionDescription objectDescription,
     dynamic jsonObject,
     string filePath,
     IReferenceFinderService referenceFinderService,
     IFactionService factionService)
     : base(objectType, objectDescription, (JObject)jsonObject, filePath, referenceFinderService)
 {
     this.factionService = factionService;
 }
 public ModService(
     IMessageService messageService,
     IManifestEntryProcessorFactory manifestEntryProcessorFactory,
     ILogger logger,
     IReferenceFinderService referenceFinderService)
 {
     this.messageService = messageService;
     this.manifestEntryProcessorFactory = manifestEntryProcessorFactory;
     this.logger = logger;
     this.referenceFinderService = referenceFinderService;
     this.ModCollection          = new ModCollection("Unknown Mod Collection", string.Empty);
 }
Esempio n. 10
0
        public ManifestNode(IManifest modManifest, MtmTreeViewItem parent, IReferenceFinderService referenceFinderService)
            : base(parent, modManifest, referenceFinderService)
        {
            this.Manifest = modManifest;
            var groupedManifestEntries =
                this.Manifest.Entries.GroupBy(entry => entry.EntryType).OrderBy(entries => entries.Key);

            foreach (var groupedManifestEntry in groupedManifestEntries)
            {
                this.Children.Add(new ManifestEntryNode(this, groupedManifestEntry.Select(entry => entry).ToList(), groupedManifestEntry.Key, referenceFinderService));
            }
        }
Esempio n. 11
0
 public ManifestEntryNode(
     IMtmTreeViewItem parent,
     List <IManifestEntry> manifestEntries,
     List <HashSet <IObjectDefinition> > objectLists,
     IReferenceFinderService referenceFinderService)
     : base(parent, manifestEntries, referenceFinderService)
 {
     this.ManifestEntries = manifestEntries;
     objectLists.ForEach(
         list => list.OrderBy(definition => definition.Name).ToList().ForEach(
             definition => this.Children.Add(new ObjectDefinitionNode(this, definition, referenceFinderService))));
 }
Esempio n. 12
0
        public IObjectDefinition ProcessObjectDefinition(
            IManifestEntry manifestEntry,
            DirectoryInfo di,
            FileInfo fi,
            IReferenceFinderService referenceFinderService,
            ObjectType?objectTypeOverride = null)
        {
            var csvText        = File.ReadAllText(fi.FullName);
            var itemCollection = new ItemCollectionObjectDefinition(ObjectType.ItemCollectionDef, csvText, fi.FullName);

            itemCollection.AddMetaData();
            return(itemCollection);
        }
Esempio n. 13
0
        public ModNode(IMod mod, MtmTreeViewItem parent, IReferenceFinderService referenceFinderService)
            : base(parent, mod, referenceFinderService)
        {
            this.Mod = mod;
            if (this.Mod.Manifest != null)
            {
                this.Manifest = new ManifestNode(mod.Manifest, this, referenceFinderService);
                this.Children.Add(this.Manifest);
            }

            this.Mod.ResourceFiles.ToList()
            .ForEach(definition => this.Children.Add(new ResourceNode(this, definition, referenceFinderService)));
        }
        public MtmTreeViewItem(IMtmTreeViewItem parent, object o, IReferenceFinderService referenceFinderService)
        {
            this.Parent = parent;
            this.Object = o;
            this.ReferenceFinderService = referenceFinderService;
            if (this.Object is IReferenceableObject referenceableObject)
            {
                DictRefsToTreeViewItems.Add(referenceableObject, this);
            }

            if (parent != null)
            {
                this.PropertyChanged += this.Parent.IncestPropertyChanged;
            }
        }
Esempio n. 15
0
 public ManifestEntry(
     IManifest manifest,
     ObjectType entryType,
     string path,
     dynamic jsonObject,
     IReferenceFinderService referenceFinderService)
     : base((JObject)jsonObject, ObjectType.ManifestEntry)
 {
     this.referenceFinderService = referenceFinderService;
     this.Manifest  = manifest;
     this.EntryType = entryType;
     this.Path      = path;
     this.Objects   = new HashSet <IObjectDefinition>();
     this.Resources = new HashSet <IResourceDefinition>();
 }
Esempio n. 16
0
 public ObjectDefinition(
     ObjectType objectType,
     IObjectDefinitionDescription objectDescription,
     dynamic jsonObject,
     string filePath,
     IReferenceFinderService referenceFinderService)
     : base(objectType, filePath, (JObject)jsonObject)
 {
     this.ReferenceFinderService = referenceFinderService;
     this.ObjectDescription      = objectDescription;
     this.MetaData = new Dictionary <string, dynamic>();
     this.Tags     = new Dictionary <string, List <string> >();
     this.DependencyRelationships = referenceFinderService.GetDependencyRelationships(this.ObjectType);
     this.DependentRelationships  = referenceFinderService.GetDependentRelationships(this.ObjectType);
 }
 public LanceSlotDefinition(
     ObjectType objectType,
     IObjectDefinitionDescription objectDescription,
     dynamic jsonObject,
     string filePath,
     long lanceSlotNumber,
     IReferenceFinderService referenceFinderService,
     LanceDefObjectDefinition lanceDefObjectDefinition,
     IFactionService factionService)
     : base(objectType, objectDescription, jsonObject as JObject, filePath, referenceFinderService)
 {
     this.LanceSlotNumber          = lanceSlotNumber;
     this.LanceDefObjectDefinition = lanceDefObjectDefinition;
     this.factionService           = factionService;
     this.factionService.GetFactions().ForEach(faction => this.factionUnitDictionary.Add(faction, 0));
 }
        public IObjectDefinition ProcessObjectDefinition(
            IManifestEntry manifestEntry,
            DirectoryInfo di,
            FileInfo fi,
            IReferenceFinderService referenceFinderService,
            ObjectType?objectTypeOverride = null)
        {
            dynamic json = JsonConvert.DeserializeObject(File.ReadAllText(fi.FullName));

            return(ObjectDefinitionFactory.ObjectDefinitionFactorySingleton.Get(
                       manifestEntry.EntryType,
                       ProcessObjectDescription(json),
                       json,
                       fi.FullName,
                       referenceFinderService));
        }
        public IManifestEntry ProcessManifestEntry(
            IManifest manifest,
            ObjectType entryType,
            string path,
            dynamic jsonObject,
            IReferenceFinderService referenceFinderService)
        {
            var manifestEntry = new ManifestEntry(manifest, entryType, path, jsonObject, referenceFinderService);

            var di = new DirectoryInfo(Path.Combine(manifest.Mod.SourceDirectoryPath, manifestEntry.Path));

            try
            {
                var files = di.EnumerateFiles();

                if (entryType == ObjectType.CCDefaults && files.Count() > 1)
                {
                    throw new InvalidProgramException(
                              $"Encountered more than ONE CC settings files for a CC Manifest Entry at [{di.FullName}]");
                }

                files.ToList().ForEach(
                    file =>
                {
                    dynamic ccSettingsData = JsonConvert.DeserializeObject(File.ReadAllText(file.FullName));
                    foreach (var ccSetting in ccSettingsData.Settings)
                    {
                        var objectDefinition = ObjectDefinitionFactory.ObjectDefinitionFactorySingleton.Get(
                            entryType,
                            null,
                            ccSetting,
                            file.FullName,
                            referenceFinderService);
                        manifestEntry.Objects.Add(objectDefinition);
                    }
                });
            }
            catch (Exception ex)
            {
                this.logger.Error($"An exception occurred trying to process manifestEntry.", ex);
            }

            return(manifestEntry);
        }
        public IManifestEntry ProcessManifestEntry(
            IManifest manifest,
            ObjectType entryType,
            string path,
            dynamic jsonObject,
            IReferenceFinderService referenceFinderService)
        {
            var manifestEntry = new ManifestEntry(manifest, entryType, path, jsonObject, referenceFinderService);

            var objectDefinition = ObjectDefinitionFactory.ObjectDefinitionFactorySingleton.Get(
                entryType,
                new ObjectDefinitionDescription(null, null, null, null, (JObject)jsonObject),
                (JObject)jsonObject,
                path,
                referenceFinderService);

            manifestEntry.Objects.Add(objectDefinition);
            return(manifestEntry);
        }
        public IObjectDefinition ProcessObjectDefinition(
            IManifestEntry manifestEntry,
            DirectoryInfo di,
            FileInfo fi,
            IReferenceFinderService referenceFinderService,
            ObjectType?objectTypeOverride = null)
        {
            if (fi.Extension != ".json")
            {
                Debug.WriteLine($"File {fi.FullName} is not a JSON file.");
                return(null);
            }

            dynamic json = JsonConvert.DeserializeObject(File.ReadAllText(fi.FullName));

            return(ObjectDefinitionFactory.ObjectDefinitionFactorySingleton.Get(
                       objectTypeOverride ?? manifestEntry.EntryType,
                       ProcessObjectDescription(json.Description),
                       json,
                       fi.FullName,
                       referenceFinderService));
        }
        public IManifestEntry ProcessManifestEntry(
            IManifest manifest,
            ObjectType entryType,
            string path,
            dynamic jsonObject,
            IReferenceFinderService referenceFinderService)
        {
            var manifestEntry = new ManifestEntry(manifest, entryType, path, jsonObject, referenceFinderService);

            var objectDefinitionProcessor =
                ObjectDefinitionProcessorFactory.ObjectDefinitionProcessorFactorySingleton.Get(entryType);

            var targetDirectory = Path.Combine(manifest.Mod.SourceDirectoryPath, manifestEntry.Path);

            if (!Directory.Exists(targetDirectory))
            {
                Debug.WriteLine($"Folder does not exist {targetDirectory}");
                return(manifestEntry);
            }

            var di = new DirectoryInfo(targetDirectory);

            di.GetFiles("*.*", SearchOption.AllDirectories).ToList().ForEach(
                fi =>
            {
                var objectDefinition = objectDefinitionProcessor.ProcessObjectDefinition(
                    manifestEntry,
                    di,
                    fi,
                    referenceFinderService);
                if (objectDefinition != null)
                {
                    manifestEntry.Objects.Add(objectDefinition);
                }
            });

            return(manifestEntry);
        }
Esempio n. 23
0
 public ModCopyModel(
     IModService modService,
     ILogger logger,
     IMtmMainModel mainModel,
     IReferenceFinderService referenceFinderService,
     IMessageService messageService)
 {
     this.modService                  = modService;
     this.logger                      = logger;
     this.ReferenceFinderService      = referenceFinderService;
     this.MessageService              = messageService;
     this.MainModel                   = mainModel;
     this.modService.PropertyChanged += this.ModServiceOnPropertyChanged;
     ResetSelectionsCommand           = new ResetSelectionsCommand(this);
     SelectMechsFromDataFileCommand   = new SelectMechsFromDataFileCommand(this);
     BuildCustomCollectionCommand     = new BuildCustomCollectionCommand(this);
     ValidateLanceDefinitionsCommand  = new ValidateLanceDefinitionsCommand(this);
     SelectVeesFromDataFileCommand    = new SelectVeesFromDataFileCommand(this);
     ViewObjectSummaryWindow          = new DelegatePluginCommand(
         () =>
     {
         if (ObjectSummaryWindow == null)
         {
             ObjectSummaryWindow         = new ObjectSummaryWindow(this);
             ObjectSummaryWindow.Topmost = true;
             ObjectSummaryWindow.Show();
         }
         else
         {
             ObjectSummaryWindow.Activate();
         }
     },
         () => true,
         this,
         @"Show Object Summary Window");
 }
Esempio n. 24
0
        public IManifestEntry ProcessManifestEntry(
            IManifest manifest,
            ObjectType entryType,
            string path,
            dynamic jsonObject,
            IReferenceFinderService referenceFinderService)
        {
            var manifestEntry = new ManifestEntry(manifest, entryType, path, jsonObject, referenceFinderService);

            var di    = new DirectoryInfo(Path.Combine(manifest.Mod.SourceDirectoryPath, manifestEntry.Path));
            var files = di.EnumerateFiles();

            if (files.Count() > 1)
            {
                throw new InvalidProgramException(
                          $"Encountered more than ONE CC settings files for a CC Manifest Entry at [{di.FullName}]");
            }

            var file = files.First();

            dynamic ccSettingsData = JsonConvert.DeserializeObject(File.ReadAllText(file.FullName));

            foreach (var ccSetting in ccSettingsData.Settings)
            {
                var objectDefinition =
                    ObjectDefinitionFactory.ObjectDefinitionFactorySingleton.Get(
                        entryType,
                        null,
                        ccSetting,
                        file.FullName,
                        referenceFinderService);
                manifestEntry.Objects.Add(objectDefinition);
            }

            return(manifestEntry);
        }
Esempio n. 25
0
 public LanceDefNode(IMtmTreeViewItem parent, LanceDefObjectDefinition objectDefinition, IReferenceFinderService referenceFinderService)
     : base(parent, objectDefinition, referenceFinderService)
 {
     objectDefinition.LanceSlots.ForEach(
         definition =>
     {
         var slot = new LanceSlotModel(definition, this, LanceDefNode.factionService);
         this.LanceSlots.Add(slot);
         slot.PropertyChanged += (sender, args) =>
         {
             if (sender is LanceSlotModel && args.PropertyName == nameof(LanceSlotModel.ObjectStatus))
             {
                 this.OnPropertyChanged(nameof(this.ObjectStatus));
             }
         };
     });
 }
Esempio n. 26
0
        public ModCollectionNode(
            IModCollection modCollection,
            MtmTreeViewItem parent,
            IReferenceFinderService referenceFinderService,
            bool preProcessRelationships = false)
            : base(parent, modCollection, referenceFinderService)
        {
            this.ModCollection = modCollection;
            this.ModCollection.Mods.OrderBy(mod => mod.Name).ToList().ForEach(
                mod =>
            {
                var modNode = new ModNode(mod, this, referenceFinderService);
                this.Children.Add(modNode);
                modNode.PropertyChanged += (sender, args) =>
                {
                    this.OnPropertyChanged(nameof(this.TotalMods));
                    this.OnPropertyChanged(nameof(this.TotalModSize));
                    this.OnPropertyChanged(nameof(this.TotalModObjectCount));
                    this.OnPropertyChanged(nameof(this.TotalMechCount));
                    this.OnPropertyChanged(nameof(this.TotalVehicleCount));
                    this.OnPropertyChanged(nameof(this.TotalTurretCount));
                    this.OnPropertyChanged(nameof(this.TotalWeaponCount));
                    this.OnPropertyChanged(nameof(this.TotalUpgradeCount));
                    this.OnPropertyChanged(nameof(this.TotalCoolingCount));
                };
            });

            // Hook up interdependent properties
            // When Pilots/Units are selected, notify lances
            // TODO: Formalize this into a modeled relationship so we can refactor properly
            // and reuse the concept.
            var lanceDependencyProperties = new List <ObjectType>
            {
                ObjectType.MechDef,
                ObjectType.TurretDef,
                ObjectType.VehicleDef,
                ObjectType.PilotDef
            };
            var sourceObjects = this.AllChildren.Where(
                item => item.Object is IObjectDefinition obj && lanceDependencyProperties.Contains(obj.ObjectType));
            var targetObjects = this.AllChildren.Where(item => item is LanceDefNode obj).Cast <LanceDefNode>()
                                .SelectMany(node => node.LanceSlots);

            targetObjects.AsParallel().ForAll(
                // targetObjects.ToList().ForEach(
                target =>
            {
                target.LoadEligibleUnitsAndPilots();
                sourceObjects.AsParallel().ForAll(
                    source =>
                {
                    var propertyName = nameof(LanceSlotModel.SelectedEligibleUnits);
                    if (((IObjectDefinition)source.Object).ObjectType == ObjectType.PilotDef)
                    {
                        propertyName = nameof(LanceSlotModel.SelectedEligiblePilots);
                    }

                    source.PropertyChanged += (sender, args) =>
                    {
                        if (args.PropertyName == nameof(IMtmTreeViewItem.IsChecked))
                        {
                            target.OnPropertyChanged(propertyName);
                            target.OnPropertyChanged(nameof(LanceSlotModel.ObjectStatus));
                        }
                    };
                });
            });

            this.IsExpanded = true;
        }
Esempio n. 27
0
 public ResourceNode(IMtmTreeViewItem parent, IResourceDefinition resourceDefinition, IReferenceFinderService referenceFinderService)
     : base(parent, resourceDefinition, referenceFinderService)
 {
 }
        public IObjectDefinition ProcessObjectDefinition(IManifestEntry manifestEntry, DirectoryInfo di, FileInfo fi, IReferenceFinderService referenceFinderService, ObjectType?objectTypeOverride = null)
        {
            if (fi.Extension != ".json")
            {
                Debug.WriteLine($"File {fi.FullName} is not a JSON file.");
                return(null);
            }

            // add missing commas, this only fixes if there is a newline
            var     rgx         = new Regex(@"(\]|\}|""|[A-Za-z0-9])\s*\n\s*(\[|\{|"")", RegexOptions.Singleline);
            var     commasAdded = rgx.Replace(File.ReadAllText(fi.FullName), "$1,\n$2");
            dynamic json        = JsonConvert.DeserializeObject(commasAdded);

            if (manifestEntry.EntryType == ObjectType.AdvancedJSONMerge)
            {
                var targetIds = new List <string>();
                if (json.TargetID != null)
                {
                    targetIds.Add(json.TargetID.ToString());
                }
                else
                {
                    foreach (var id in json.TargetIDs)
                    {
                        targetIds.Add(id.ToString());
                    }
                }

                foreach (var targetId in targetIds)
                {
                    if (referenceFinderService.ReferenceableObjectProvider.GetReferenceableObjects().FirstOrDefault(o => o is ObjectDefinition objectDefinition && (objectDefinition.Id == targetId)) is ObjectDefinition parsedObject)
                    {
                        foreach (var instruction in json.Instructions)
                        {
                            var path   = instruction.JSONPath.ToString();
                            var action = instruction.Action.ToString();
                            var value  = string.Empty;
                            if (action != "Remove")
                            {
                                value = instruction.Value.ToString();
                            }

                            IEnumerable <JToken> tokens = ((JObject)parsedObject.JsonObject).SelectTokens(path);
                            tokens.ToList().ForEach(token => token = value);
                        }

                        parsedObject.MetaData.Clear();
                        parsedObject.Tags.Clear();
                        parsedObject.AddMetaData();
                    }
                    else
                    {
                        // Schedule a post completion update...
                        var i = 666;
                    }
                }
        public static object ProcessFile(
            IManifestEntry manifestEntry,
            DirectoryInfo di,
            string filename,
            string fileData,
            string hostDirectory,
            IReferenceFinderService referenceFinderService,
            ILogger logger)
        {
            var fi = new FileInfo(filename);

            if (fi.Extension == ".json")
            {
                var commasAdded = StreamingAssetProcessor.Regex.Replace(fileData, "$1,\n$2");

                // Handle json object definition...
                IObjectDefinition objectDefinition = null;
                dynamic           jsonData         = JsonConvert.DeserializeObject(
                    commasAdded,
                    new JsonSerializerSettings
                {
                    Error = (sender, args) =>
                    {
                        logger.Warn($"Error deserializing [{fi.FullName}]", args.ErrorContext.Error);
                        args.ErrorContext.Handled = true;
                    }
                });

                if (jsonData == null)
                {
                    return(null);
                }

                var description = ObjectDefinitionDescription.CreateDefault(jsonData.Description);

                var directoryMarkers = new List <string>()
                {
                    "conversationbuckets", "contracts", "events"
                };

                directoryMarkers.ForEach(
                    s =>
                {
                    if (di.FullName.Split('\\').Any(part => part.ToLower() == s.ToLower()))
                    {
                        hostDirectory = s;
                    }
                });

                if (manifestEntry.Manifest.Mod.IsBattleTech && streamingAssetsDirectoryToObjectTypes.ContainsKey(hostDirectory.ToLower()))
                {
                    var objectType = streamingAssetsDirectoryToObjectTypes[hostDirectory.ToLower()];
                    var objectDefinitionProcessor =
                        ObjectDefinitionProcessorFactory.ObjectDefinitionProcessorFactorySingleton.Get(objectType);

                    return(objectDefinitionProcessor.ProcessObjectDefinition(
                               manifestEntry,
                               di,
                               fi,
                               referenceFinderService,
                               objectType));
                }

                // infer the object type from the current sub-directory.
                switch (hostDirectory.ToLower())
                {
                case "abilities":
                case "constants":
                case "milestones":
                case "events":
                case "cast":
                case "behaviorvariables":
                case "buildings":
                case "hardpoints":
                case "factions":
                case "lifepathnode":
                case "campaign":
                    objectDefinition = new ObjectDefinition(
                        ObjectType.StreamingAssetsData,
                        description,
                        jsonData,
                        fi.FullName,
                        referenceFinderService);
                    break;

                case "pilot":
                    objectDefinition = new PilotObjectDefinition(
                        ObjectType.PilotDef,
                        description,
                        jsonData,
                        fi.FullName,
                        referenceFinderService);
                    break;

                case "simgameconstants":
                    objectDefinition = new SimGameConstantsObjectDefinition(
                        ObjectType.SimGameConstants,
                        ObjectDefinitionDescription.CreateDefault(jsonData.Description),
                        jsonData,
                        fi.FullName,
                        referenceFinderService);
                    break;

                    /*throw new InvalidProgramException(
                     *                              $"Unknown streaming assets folder type detected [{hostDirectory}]");*/
                }

                return(objectDefinition);
            }

            if (di.FullName.ToLower().Contains("emblems"))
            {
                hostDirectory = "emblems";
            }
            else if (di.FullName.ToLower().Contains("sprites"))
            {
                hostDirectory = "sprites";
            }
            else if (di.FullName.ToLower().Contains("conversationBuckets"))
            {
                hostDirectory = "conversationBuckets";
            }

            var identifier = fi.Name.Substring(0, fi.Name.Length - fi.Extension.Length);

            switch (hostDirectory.ToLower())
            {
            case "assetbundles":
                var assetBundleDefinition = ObjectDefinitionFactory.ObjectDefinitionFactorySingleton.Get(
                    ObjectType.AssetBundle,
                    new ObjectDefinitionDescription(fi.Name, fi.Name, null),
                    null,
                    fi.FullName,
                    referenceFinderService);
                return(assetBundleDefinition);

            case "mechportraits":
                var objectDefinition = ObjectDefinitionFactory.ObjectDefinitionFactorySingleton.Get(
                    ObjectType.Sprite,
                    new ObjectDefinitionDescription(identifier, identifier, null),
                    null,
                    fi.FullName,
                    referenceFinderService);
                return(objectDefinition);

            case "itemcollections":
                var itemCollection = new ItemCollectionObjectDefinition(
                    ObjectType.ItemCollectionDef,
                    fileData,
                    fi.FullName);
                itemCollection.AddMetaData();
                return(itemCollection);

            case "emblems":
                var texIdentifier            = fi.Name.Substring(0, fi.Name.Length - fi.Extension.Length);
                var resourceObjectDefinition = ObjectDefinitionFactory.ObjectDefinitionFactorySingleton.Get(
                    ObjectType.Texture2D,
                    new ObjectDefinitionDescription(texIdentifier, texIdentifier, null),
                    null,
                    fi.FullName,
                    referenceFinderService);
                return(resourceObjectDefinition);

            case "sprites":
                var spriteIdentifier = fi.Name.Substring(0, fi.Name.Length - fi.Extension.Length);
                var spriteObject     = ObjectDefinitionFactory.ObjectDefinitionFactorySingleton.Get(
                    ObjectType.Sprite,
                    new ObjectDefinitionDescription(spriteIdentifier, spriteIdentifier, null),
                    null,
                    fi.FullName,
                    referenceFinderService);
                return(spriteObject);

            default:
                if (manifestEntry.Manifest.Mod.IsBattleTech)
                {
                    return(null);
                }

                IResourceDefinition resourceDefinition;

                // Handle resource file style definition...
                switch (fi.Name)
                {
                default:
                    resourceDefinition = new ResourceDefinition(
                        ObjectType.UnhandledResource,
                        fi.FullName,
                        fi.Name,
                        identifier);
                    resourceDefinition.AddMetaData();
                    break;
                }

                return(resourceDefinition);
            }
        }
        public IObjectDefinition Get(
            ObjectType entryType,
            IObjectDefinitionDescription objectDescription,
            dynamic jsonObject,
            string filePath,
            IReferenceFinderService referenceFinderService)
        {
            IObjectDefinition objectDefinition;

            switch (entryType)
            {
            case ObjectType.Texture2D:
            case ObjectType.Sprite:
                objectDefinition = new ResourceObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.AssetBundle:
                objectDefinition = new AssetBundleObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.Prefab:
                objectDefinition = new PrefabObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.AmmunitionBoxDef:
                objectDefinition = new AmmunitionBoxObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.AmmunitionDef:
                objectDefinition = new AmmunitionObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.CCDefaults:
                objectDefinition = new CcDefaultsObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.CCCategories:
                objectDefinition = new CcCategoryObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.ChassisDef:
                objectDefinition = new ChassisObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.MechDef:
                objectDefinition = new MechObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.PilotDef:
                objectDefinition = new PilotObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.SimGameEventDef:
                objectDefinition = new SimGameEventObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.StreamingAssetsData:
                objectDefinition = new SimGameConstantsObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.TurretChassisDef:
                objectDefinition = new TurretChassisObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.TurretDef:
                objectDefinition = new TurretObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.UpgradeDef:
                objectDefinition = new UpgradeObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.VehicleChassisDef:
                objectDefinition = new VehicleChassisObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.VehicleDef:
                objectDefinition = new VehicleObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.WeaponDef:
                objectDefinition = new WeaponObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.ContractOverride:
                objectDefinition = new ContractObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.FactionDef:
                objectDefinition = new FactionObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.CastDef:
                objectDefinition = new CastObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.ConversationContent:
                objectDefinition = new DialogObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);

                // objectDefinition = new ConversationObjectDefinition(entryType, objectDescription, (JObject)jsonObject, filePath);
                break;

            case ObjectType.DialogBucketDef:
                objectDefinition = new ConversationObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);

                // objectDefinition = new DialogObjectDefinition(entryType, objectDescription, (JObject)jsonObject, filePath);
                break;

            case ObjectType.FlashpointDef:
                objectDefinition = new FlashpointObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.HeraldryDef:
                objectDefinition = new HeraldryObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.SimGameMilestoneSet:
                objectDefinition = new MilestoneSetObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.HardpointDataDef:
                objectDefinition = new HardpointDataObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.ShopDef:
                objectDefinition = new ShopDefObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            case ObjectType.LanceDef:
                objectDefinition = new LanceDefObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService,
                    factionService);
                break;

            case ObjectType.TraitDef:
            case ObjectType.AbilityDef:
            case ObjectType.MovementCapabilitiesDef:
            case ObjectType.ApplicationConstants:
            case ObjectType.CCTagRestrictions:
            case ObjectType.SimGameConversations:
            case ObjectType.HeatSinkDef:
            case ObjectType.JumpJetDef:
            case ObjectType.BaseDescriptionDef:
            case ObjectType.StarSystemDef:
            case ObjectType.MEBonusDescriptions:
            case ObjectType.MECriticalEffects:
            case ObjectType.ShipModuleUpgrade:
            case ObjectType.PathingCapabilitiesDef:
            case ObjectType.DesignMaskDef:
            case ObjectType.BackgroundDef:
            case ObjectType.SimGameMilestoneDef:
            case ObjectType.DebugSettings:
            case ObjectType.SimGameStatDescDef:
            case ObjectType.GameTip:
            case ObjectType.SoundBank:
            case ObjectType.SimGameConstants:
                objectDefinition = new ObjectDefinition(
                    entryType,
                    objectDescription,
                    (JObject)jsonObject,
                    filePath,
                    referenceFinderService);
                break;

            default:
                throw new InvalidProgramException();

                // objectDefinition = new ObjectDefinition(entryType, objectDescription, (JObject)jsonObject, filePath);
                // break;
            }

            objectDefinition.AddMetaData();
            return(objectDefinition);
        }