public override void OnLoad(ConfigNode node) { try { base.OnLoad(node); ConfigNode dataNode = node.GetNode("DATA"); if (dataNode != null) { // Handle individual values foreach (ConfigNode.Value pair in dataNode.values) { string typeName = pair.value.Remove(pair.value.IndexOf(":")); string value = pair.value.Substring(typeName.Length + 1); Type type = ConfigNodeUtil.ParseTypeValue(typeName); if (type == typeof(string)) { data[pair.name] = value; } else if (type.Name == "List`1") { BaseParser parser = BaseParser.NewParser(type); if (parser == null) { throw new Exception("Couldn't read list of values of type '" + type.GetGenericArguments().First().Name + "'."); } data[pair.name] = parser.ParseExpressionGeneric("", value, null); } else { // Get the ParseValue method MethodInfo parseValueMethod = typeof(ConfigNodeUtil).GetMethods().Where(m => m.Name == "ParseSingleValue").Single(); parseValueMethod = parseValueMethod.MakeGenericMethod(new Type[] { type }); // Invoke the ParseValue method data[pair.name] = parseValueMethod.Invoke(null, new object[] { pair.name, value, false }); } } // Handle config nodes foreach (ConfigNode childNode in dataNode.GetNodes()) { configNodes[childNode.name] = childNode; } } } catch (Exception e) { LoggingUtil.LogError(this, "Error loading PersistentDataStore from persistance file!"); LoggingUtil.LogException(e); ExceptionLogWindow.DisplayFatalException(ExceptionLogWindow.ExceptionSituation.SCENARIO_MODULE_LOAD, e, "PersistentDataStore"); } }
protected override void OnLoad(ConfigNode configNode) { foreach (string node in map.Keys.Union(new string[] { "PARAMETER_COMPLETED" })) { foreach (ConfigNode child in ConfigNodeUtil.GetChildNodes(configNode, node)) { string parameter = ConfigNodeUtil.ParseValue <string>(child, "parameter", ""); Type type = ConfigNodeUtil.ParseValue <Type>(child, "type", typeof(double)); foreach (ConfigNode.Value pair in child.values) { if (pair.name != "parameter" && pair.name != "type" && !string.IsNullOrEmpty(pair.value)) { ExpVal expVal = new ExpVal(type, pair.name, pair.value); if (factory != null) { ConfigNodeUtil.ParseValue <string>(child, pair.name, x => expVal.val = x, factory, s => { // Parse the expression to validate BaseParser parser = BaseParser.NewParser(expVal.type); parser.ParseExpressionGeneric(pair.name, s, dataNode); return(true); }); } else { // Parse the expression to validate BaseParser parser = BaseParser.NewParser(expVal.type); parser.ParseExpressionGeneric(pair.name, expVal.val, dataNode); } // Store it for later if (child.name == "PARAMETER_COMPLETED") { if (!onParameterComplete.ContainsKey(parameter)) { onParameterComplete[parameter] = new List <ExpVal>(); } onParameterComplete[parameter].Add(expVal); } else { map[node].Add(expVal); } } } } } }