/// <summary> /// Saves a config item to the defined classes /// </summary> /// <param name="configItem">The parse item which holds the info to set the property</param> private void SaveConfigItem(ConfigParseItem configItem) { if (configItem.Property == null) { return; } if (configItem.NewValue == null) { configItem.NewValue = configItem.ConfigDefault; } //TODO: Replace this with a customizable function to support more types object convertedValue = Convert.ChangeType(configItem.NewValue, configItem.Property.PropertyType); configItem.Property.SetValue(null, convertedValue, null); }
/// <summary> /// Parses all config classes for file conversion /// </summary> /// <param name="assembly">The assembly to parse from</param> private Dictionary <string, Dictionary <string, Dictionary <string, ConfigParseItem> > > ParseConfig(Assembly assembly = null) { Dictionary <string, Dictionary <string, Dictionary <string, ConfigParseItem> > > parseDict = new Dictionary <string, Dictionary <string, Dictionary <string, ConfigParseItem> > >(); foreach (Type type in GenericHelpers.GetTypesWithAttribute(typeof(ConfigGroup), assembly)) { if (!type.IsAbstract && !type.IsSealed) { throw new ForgeCritical(Language.ForgeCriticalInvalidConfigGroupClassType + type.Name); } ConfigGroup config = type.GetCustomAttributes(typeof(ConfigGroup), true).FirstOrDefault() as ConfigGroup; foreach (PropertyInfo propertyInfo in type.GetProperties()) { //Turn all config items into ParseItems foreach (ConfigItem configItem in propertyInfo.GetCustomAttributes(typeof(ConfigItem), true)) { ConfigParseItem parseItem = new ConfigParseItem { ConfigDefault = configItem.DefaultValue, ConfigName = configItem.Name, Property = propertyInfo, }; if (parseItem.ConfigName == null) { parseItem.ConfigName = parseItem.Property.Name; } if (config != null && parseDict.ContainsKey(config.FileName)) { if (parseDict[config.FileName].ContainsKey(config.GroupName)) { parseDict[config.FileName][config.GroupName].Add(parseItem.ConfigName, parseItem); } else { parseDict[config.FileName].Add(config.GroupName, new Dictionary <string, ConfigParseItem> { { parseItem.ConfigName, parseItem } }); } } else { if (config != null) { parseDict.Add( config.FileName, new Dictionary <string, Dictionary <string, ConfigParseItem> > { { config.GroupName, new Dictionary <string, ConfigParseItem> { { parseItem.ConfigName, parseItem } } } } ); } } } } } return(parseDict); }