Ejemplo n.º 1
0
        public static void SaveToModDirectory()
        {
            var path = ModConfiguration.streamingAssetsPath + "/" + ModConfiguration.current.modName;

            for (int i = 0; i < ModConfiguration.current.modData.Length; i++)
            {
                List <dynamic> cat = (List <dynamic>)ModConfiguration.current.modData[i];
                if (!Directory.Exists(path + "/" + Enum.GetName(typeof(Catalog.Category), i)))
                {
                    Directory.CreateDirectory(path);
                }
                if (cat.Count > 0)
                {
                    DirectoryInfo directoryInfo;
                    var           catPath = path + "/" + Enum.GetName(typeof(Catalog.Category), i);
                    if (!Directory.Exists(catPath))
                    {
                        directoryInfo = Directory.CreateDirectory(catPath);
                    }
                    foreach (var fileObj in cat)
                    {
                        var id       = fileObj.GetType().GetField("id").GetValue(fileObj);
                        var filePath = path + "/" + Enum.GetName(typeof(Catalog.Category), i) + "/" + Enum.GetName(typeof(Catalog.Category), i) + "_" + id + ".json";

                        Type    externalType = Type.GetType(fileObj.type);
                        var     instantiatedExternalObject = Activator.CreateInstance(externalType);
                        var     internalType   = fileObj.GetType(); //TypeHelper.GenerateMissingType(externalType); // Converts to internal type
                        dynamic internalObject = ModConfiguration.ConvertDynamic(fileObj, internalType);

                        // Foreach internalField find the externalField corresponding to it and add the values
                        // from the internal object to the external object.
                        foreach (var internalField in internalType.GetFields())
                        {
                            var commonFieldExternal = externalType.GetFields().FirstOrDefault(x => x.Name == internalField.Name);
                            if (commonFieldExternal == null)
                            {
                                continue;
                            }
                            var internalObjectValue = internalField.GetValue(internalObject);
                            // TODO: Check if list, if list then ... do stuff?
                            commonFieldExternal.SetValue(instantiatedExternalObject, internalObjectValue);
                        }

                        var jsonNetSerializerSettings = GetDefaultJsonSettings();
                        File.WriteAllText(filePath, JsonConvert.SerializeObject(instantiatedExternalObject, jsonNetSerializerSettings));
                    }
                }
            }
            foreach (var field in typeof(Mod).GetProperties())
            {
                if (!Attribute.IsDefined(field, typeof(SerializableAttribute)))
                {
                    continue;
                }
            }
        }
Ejemplo n.º 2
0
        public void CreateData(dynamic data, Type type, string newName, int category)
        {
            dynamic d = Activator.CreateInstance(type);

            foreach (var field in type.GetFields())
            {
                field.SetValue(d, field.GetValue(ModConfiguration.ConvertDynamic(data, type)));
            }
            type.GetField("id").SetValue(d, newName);

            modData[category].Add(d);
        }