Example #1
0
 public SQMTreeNode(String text,NodeData newdata,String key = "") : base(text)
 {
     if (newdata != null)
         data = newdata;
     if (key != String.Empty)
         atrkey = key;
 }
Example #2
0
 private static SQMTreeNode ProcessChild(NodeData data,SQMTreeNode rootnode)
 {
     SQMTreeNode node = new SQMTreeNode(data.ToString(), data);
     foreach (var atr in data.Atributes.Keys)
     {
         var value = data.Atributes[atr];
         if (value.GetType().IsGenericType)
         {
             value = value[0];
         }
         SQMTreeNode childnode = new SQMTreeNode(atr, data, atr);
         childnode.Text = childnode.ToString();
         childnode.Tag = node;
         node.Nodes.Add(childnode);
     }
     foreach (var child in data.Children)
     {
         SQMTreeNode childnode = ProcessChild(child, node);
         node.Nodes.Add(childnode);
     }
     return node;
 }
Example #3
0
        private void ProcessClass(string startLine,NodeData parent)
        {
            string name = startLine.Substring(startLine.IndexOf(' ') + 1);
            ClassType type = ClassType.Unknown;
            if (name.Contains("Vehicles") && parent != null && parent.type == ClassType.Group)
            {
                type = ClassType.Vehicles;
            }
            else if (name.Contains("Item") && parent != null && parent.type == ClassType.Vehicles)
            {
                type = ClassType.Unit;
            }
            else if (name.Contains("Item") && parent != null && parent.type == ClassType.MainGroup)
            {
                type = ClassType.Group;
            }
            else if (name == "Groups")
            {
                type = ClassType.MainGroup;
            }
            else if (name.Contains("Mission"))
            {
                type = ClassType.Mission;
            }
            NodeData data = new NodeData() { ClassName = name, type = type };
            ReportProgress();

            if (parent != null)
            {
                data.Parent = parent;
                parent.Children.Add(data);
            }
            else
                Children.Add(data);
            if (startLine.Contains(";"))
            {
                _currentLine++;
                return;
            }
            _currentLine++;
            while(true)
            {
                String line = _lines[_currentLine];
                var match = _classRegex.Match(line);
                if (match.Success)
                {
                    ProcessClass(line, data);
                }
                else if (_atrriRegex.IsMatch(line))
                {
                    if (line.Contains("[]="))
                    {
                        ProcessArray(line, data);
                    }
                    else
                    {
                        ProcessAtribute(line, data);
                    }
                }
                else if (Regex.IsMatch(line, "(.*)};"))
                {
                    break;
                }
                _currentLine++;
            }
        }
Example #4
0
        private void ProcessArray(string startLine, NodeData data)
        {
            String[] split = startLine.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
            String key = split[0];
            key = key.Trim();
            key = key.Trim(new char[] { '\t', '\"', ';' });
            // multiline array
            if (split.Count() <= 1)
            {
                List<String> list = new List<string>();
                while (true)
                {
                    _currentLine++;
                    String line = _lines[_currentLine];
                    if (Regex.IsMatch(line, "(.*)};"))
                    {
                        break;
                    }
                    else if(!Regex.IsMatch(line, "(.*){"))
                    {
                        line = line.Trim();
                        line = line.Trim(new char[] { ',', '\t', '\"', ';' });
                        list.Add(line);
                    }
                }
                data.Atributes.Add(key, list);
            }
            else
            {
                String value = split[1];
                value = value.Trim(new char[] { '\t', '\"', ';' ,'{','}'});
                String[] values = value.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);

                if (values.Count() >= 3)
                {
                    double x = 0;
                    double y = 0;
                    double z = 0;
                    double.TryParse(values[0], System.Globalization.NumberStyles.Any, CultureInfo.InvariantCulture, out x);
                    double.TryParse(values[1], System.Globalization.NumberStyles.Any, CultureInfo.InvariantCulture, out y);
                    double.TryParse(values[2], System.Globalization.NumberStyles.Any, CultureInfo.InvariantCulture, out z);
                    Vector3 vec = new Vector3() { x = x, y = y, z = z };
                    data.Atributes.Add(key, vec);
                }
            }
        }
Example #5
0
        private void ProcessAtribute(string line, NodeData data)
        {
            String key = line.Substring(0, line.IndexOf('='));
            key = key.Trim();
            key = key.Trim(new char[] {'\t','\"',';'});

            String value = line.Substring(line.IndexOf('=') + 1, line.LastIndexOf(';')-line.IndexOf('='));
            value = value.Trim();
            value = value.Trim(new char[] {'\t',';'});
            if (value[0] == '\"')
            {
                value = value.Substring(value.IndexOf('\"')+1, value.LastIndexOf('\"')-1);
            }
            double number = 0f;
            if (double.TryParse(value, System.Globalization.NumberStyles.Any, CultureInfo.InvariantCulture, out number))
            {
                data.Atributes.Add(key, number);
            }
            else
            {
                data.Atributes.Add(key, value);
            }
        }