コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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;
            }
        }