private void ExecuteExpressions(IEnumerable <ExpVal> expressions)
 {
     foreach (ExpVal expVal in expressions)
     {
         BaseParser parser = BaseParser.NewParser(expVal.type);
         parser.ExecuteAndStoreExpression(expVal.key, expVal.val, dataNode);
     }
 }
示例#2
0
        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);
                            }
                        }
                    }
                }
            }
        }