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); }
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 static object ProcessFile( IManifestEntry manifestEntry, DirectoryInfo di, string filename, string fileData, string hostDirectory, IReferenceFinderService referenceFinderService) { var fi = new FileInfo(filename); if (fi.Extension == ".json") { // Handle json object definition... IObjectDefinition objectDefinition = null; dynamic jsonData = JsonConvert.DeserializeObject(fileData); var description = ObjectDefinitionDescription.CreateDefault(jsonData.Description); if (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); } switch (hostDirectory.ToLower()) { case "itemcollections": var itemCollection = new ItemCollectionObjectDefinition( ObjectType.ItemCollectionDef, fileData, fi.FullName); itemCollection.AddMetaData(); return(itemCollection); break; 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, fi.Name); break; } return(resourceDefinition); // this.Resources.Add(resourceDefinition); // TBD: Add Note here -- throw new InvalidProgramException(); break; } }