コード例 #1
0
        public void CapsulePropertiesAreParsedCorrectly()
        {
            var properties = _cfg.First().Values;
            var tech       = properties["TechRequired"];
            var cost       = properties["cost"];

            Assert.AreEqual("commandModules", tech, $"Part tech is {tech}");
            Assert.AreEqual("4400", cost, $"Part cost is {cost}");
        }
コード例 #2
0
        public void BracketPositions()
        {
            var node = _kerbalConfig.First();

            Console.Write(node);
            Console.WriteLine();

            Assert.AreEqual(4, node.Values.Count);
            Assert.AreEqual(4, node.Children.Count);
            Assert.IsTrue(
                node.Values.ContainsKey("name"),
                "Expected key \"name\" wasn't found."
                );

            var childOne   = node.Children[0];
            var childTwo   = node.Children[1];
            var childThree = node.Children[2];
            var childFour  = node.Children[3];

            Console.Write(childOne);
            Console.WriteLine();

            Assert.AreEqual(3, childOne.Values.Count);
            Assert.IsTrue(
                childOne.Values.ContainsKey("name"),
                "Expected key \"name\" wasn't found."
                );

            Console.Write(childTwo);
            Console.WriteLine();

            Assert.AreEqual(2, childTwo.Values.Count);
            Assert.IsTrue(
                childTwo.Values.ContainsKey("amount"),
                "Expected key \"amount\" wasn't found."
                );

            Console.Write(childThree);
            Console.WriteLine();

            Assert.AreEqual(1, childThree.Values.Count);
            Assert.IsTrue(
                childThree.Values.ContainsKey("name"),
                "Expected key \"name\" wasn't found."
                );

            Console.Write(childFour);
            Console.WriteLine();

            Assert.AreEqual(0, childFour.Values.Count);
        }
コード例 #3
0
        public override void LoadTree(KerbalConfig config, TechTreeViewModel treeData)
        {
            var nameNodeHashtable = new Dictionary <string, TechNodeViewModel>();
            var techNodes         = config.First(child => child.Name == "TechTree").Children.Where(node => node.Name == "RDNode").ToArray();

            foreach (KerbalNode node in techNodes.Where(kerbalNode => kerbalNode.Values.ContainsKey("nodeName")))
            {
                var v  = node.Values;
                var id = v["id"].First();
                TechNodeViewModel techNodeViewModel;
                if (nameNodeHashtable.ContainsKey(id))
                {
                    techNodeViewModel = nameNodeHashtable[id];
                }
                else
                {
                    techNodeViewModel = new TechNodeViewModel();
                    nameNodeHashtable.Add(id, techNodeViewModel);
                }
                techNodeViewModel.TechNode = this.PopulateFromSource(node);

                // Find parent
                foreach (KerbalNode parentNode in node.Children.Where(child => child.Name == "Parent"))
                {
                    var parentKeyValuePairs = parentNode.Values.Where(pair => pair.Key == "parentID");
                    var parents             = new List <string>();
                    foreach (var parentKeyValuePair in parentKeyValuePairs)
                    {
                        parents.Add(parentKeyValuePair.Value.First());
                    }
                    foreach (var parent in parents.Where(parent => !nameNodeHashtable.ContainsKey(parent)))
                    {
                        nameNodeHashtable.Add(parent, new TechNodeViewModel());
                    }
                    foreach (var parent in parents.Where(parent => !String.IsNullOrEmpty(parent) && nameNodeHashtable.ContainsKey(parent)))
                    {
                        techNodeViewModel.Parents.Add(nameNodeHashtable[parent]);
                    }
                }
                treeData.TechTree.Add(techNodeViewModel);
            }
        }
コード例 #4
0
        public override void LoadTree(KerbalConfig config, TechTreeViewModel treeData)
        {
            var nameNodeHashtable = new Dictionary<string, TechNodeViewModel>();
            var techNodes = config.First(child => child.Name == "TechTree").Children.Where(node => node.Name == "RDNode").ToArray();

            foreach (KerbalNode node in techNodes.Where(kerbalNode => kerbalNode.Values.ContainsKey("nodepart")))
            {
                var v = node.Values;
                var id = v["id"].First();
                TechNodeViewModel techNodeViewModel;
                if (nameNodeHashtable.ContainsKey(id))
                {
                    techNodeViewModel = nameNodeHashtable[id];
                }
                else
                {
                    techNodeViewModel = new TechNodeViewModel();
                    nameNodeHashtable.Add(id, techNodeViewModel);
                }
                techNodeViewModel.TechNode = this.PopulateFromSource(node);

                // Find parent
                foreach (KerbalNode parentNode in node.Children.Where(child => child.Name == "Parent"))
                {
                    var parentKeyValuePairs = parentNode.Values.Where(pair => pair.Key == "parentID");
                    var parents = new List<string>();
                    foreach (var parentKeyValuePair in parentKeyValuePairs)
                    {
                        parents.Add(parentKeyValuePair.Value.First());
                    }
                    foreach (var parent in parents.Where(parent => !nameNodeHashtable.ContainsKey(parent)))
                    {
                        nameNodeHashtable.Add(parent, new TechNodeViewModel());
                    }
                    foreach (var parent in parents.Where(parent => !String.IsNullOrEmpty(parent) && nameNodeHashtable.ContainsKey(parent)))
                    {
                        techNodeViewModel.Parents.Add(nameNodeHashtable[parent]);
                    }
                }
                treeData.TechTree.Add(techNodeViewModel);
            }
        }
コード例 #5
0
ファイル: BasicTests.cs プロジェクト: mrlyceist/kerbal-parser
        public void SimpleParse()
        {
            var node = _kerbalConfig.First();

            Assert.AreEqual(24, node.Values.Count);
            Assert.AreEqual(2, node.Children.Count);

            var childOne = node.Children[0];
            var childTwo = node.Children[1];

            Console.Write(childOne);
            Console.WriteLine();

            Assert.AreEqual(3, childOne.Values.Count);

            Console.Write(childTwo);
            Console.WriteLine();

            Assert.AreEqual(2, childTwo.Values.Count);
        }
コード例 #6
0
        public void LoadTree(string path, TreeType treeType = TreeType.TechMananger)
        {
            ResetTree();

            var nameNodeHashtable = new Dictionary <string, TechNodeViewModel>();

            if (_treeData == null)
            {
                return;
            }

            _config = ParseTree(path);

            switch (treeType)
            {
            case TreeType.TechMananger:
                var techNodes =
                    _config.
                    First(
                        child =>
                        child.Name == "TECHNOLOGY_TREE_DEFINITION").
                    Children.Where(node => node.Name == "NODE").
                    ToArray();

                foreach (var node in
                         techNodes.Where(
                             kerbalNode =>
                             kerbalNode.Values.ContainsKey("name")))
                {
                    var v    = node.Values;
                    var name = v["name"].First();
                    TechNodeViewModel techNodeViewModel;

                    if (nameNodeHashtable.ContainsKey(name))
                    {
                        techNodeViewModel = nameNodeHashtable[name];
                    }
                    else
                    {
                        techNodeViewModel = new TechNodeViewModel();
                        nameNodeHashtable.Add(name, techNodeViewModel);
                    }

                    techNodeViewModel.TechNode.PopulateFromSource(node);

                    if (v.ContainsKey("parents"))
                    {
                        var parentsString = v["parents"].First();
                        var parents       = parentsString.Split(',');

                        foreach (var parent
                                 in parents.
                                 Where(
                                     parent =>
                                     !nameNodeHashtable.ContainsKey(parent)))
                        {
                            nameNodeHashtable.Add(parent, new TechNodeViewModel());
                        }

                        foreach (var parent
                                 in parents
                                 .Where(
                                     parent => !String.IsNullOrEmpty(parent) &&
                                     nameNodeHashtable.
                                     ContainsKey(parent)))
                        {
                            techNodeViewModel.Parents.Add(nameNodeHashtable[parent]);
                        }
                    }

                    _treeData.TechTree.Add(techNodeViewModel);
                }
                break;

            case TreeType.ATC:
                var atcNodes =
                    _config.First(child => child.Name == "TECH_TREE").
                    Children.Where(node => node.Name == "TECH_NODE").
                    ToArray();

                foreach (var node in
                         atcNodes.Where(
                             kerbalNode =>
                             kerbalNode.Values.ContainsKey("name")))
                {
                    var v    = node.Values;
                    var name = v["name"].First();
                    TechNodeViewModel techNodeViewModel;

                    if (nameNodeHashtable.ContainsKey(name))
                    {
                        techNodeViewModel = nameNodeHashtable[name];
                    }
                    else
                    {
                        techNodeViewModel = new TechNodeViewModel();
                        nameNodeHashtable.Add(name, techNodeViewModel);
                    }

                    techNodeViewModel.TechNode.PopulateFromSource(node, TreeType.ATC);

                    foreach (var parentNode in node.Children.Where(child => child.Name == "PARENT_NODE"))
                    {
                        var parentKeyValuePairs = parentNode.Values.Where(pair => pair.Key == "name");
                        var parents             = new List <string>();
                        foreach (var parentKeyValuePair in parentKeyValuePairs)
                        {
                            parents.Add(parentKeyValuePair.Value.First());
                        }

                        foreach (var parent
                                 in parents.
                                 Where(
                                     parent =>
                                     !nameNodeHashtable.ContainsKey(parent)))
                        {
                            nameNodeHashtable.Add(parent, new TechNodeViewModel());
                        }

                        foreach (var parent
                                 in parents
                                 .Where(
                                     parent => !String.IsNullOrEmpty(parent) &&
                                     nameNodeHashtable.
                                     ContainsKey(parent)))
                        {
                            techNodeViewModel.Parents.Add(nameNodeHashtable[parent]);
                        }
                    }

                    _treeData.TechTree.Add(techNodeViewModel);
                }
                break;
            }

            _treeData.LinkNodes();
            _treeData.WorkspaceViewModel.StatusBarText = "Tree Loaded";
        }
コード例 #7
0
        public void LoadTree(string path, TreeType treeType = TreeType.TechMananger)
        {
            ResetTree();

            var nameNodeHashtable = new Dictionary<string, TechNodeViewModel>();

            if (_treeData == null)
            {
                return;
            }

            _config = ParseTree(path);

            switch (treeType)
            {
                case TreeType.TechMananger:
                    var techNodes =
                        _config.
                            First(
                                  child =>
                                  child.Name == "TECHNOLOGY_TREE_DEFINITION").
                            Children.Where(node => node.Name == "NODE").
                            ToArray();

                    foreach (var node in
                        techNodes.Where(
                                        kerbalNode =>
                                        kerbalNode.Values.ContainsKey("name")))
                    {
                        var v = node.Values;
                        var name = v["name"].First();
                        TechNodeViewModel techNodeViewModel;

                        if (nameNodeHashtable.ContainsKey(name))
                        {
                            techNodeViewModel = nameNodeHashtable[name];
                        }
                        else
                        {
                            techNodeViewModel = new TechNodeViewModel();
                            nameNodeHashtable.Add(name, techNodeViewModel);
                        }

                        techNodeViewModel.TechNode.PopulateFromSource(node);

                        if (v.ContainsKey("parents"))
                        {
                            var parentsString = v["parents"].First();
                            var parents = parentsString.Split(',');

                            foreach (var parent
                                in parents.
                                    Where(
                                          parent =>
                                          !nameNodeHashtable.ContainsKey(parent)))
                            {
                                nameNodeHashtable.Add(parent, new TechNodeViewModel());
                            }

                            foreach (var parent
                                in parents
                                    .Where(
                                           parent => !String.IsNullOrEmpty(parent) &&
                                                     nameNodeHashtable.
                                                         ContainsKey(parent)))
                            {
                                techNodeViewModel.Parents.Add(nameNodeHashtable[parent]);
                            }
                        }

                        _treeData.TechTree.Add(techNodeViewModel);
                    }
                    break;

                case TreeType.ATC:
                    var atcNodes =
                        _config.First(child => child.Name == "TECH_TREE").
                                Children.Where(node => node.Name == "TECH_NODE").
                                ToArray();

                    foreach (var node in
                        atcNodes.Where(
                                       kerbalNode =>
                                       kerbalNode.Values.ContainsKey("name")))
                    {
                        var v = node.Values;
                        var name = v["name"].First();
                        TechNodeViewModel techNodeViewModel;

                        if (nameNodeHashtable.ContainsKey(name))
                        {
                            techNodeViewModel = nameNodeHashtable[name];
                        }
                        else
                        {
                            techNodeViewModel = new TechNodeViewModel();
                            nameNodeHashtable.Add(name, techNodeViewModel);
                        }

                        techNodeViewModel.TechNode.PopulateFromSource(node, TreeType.ATC);

                        foreach (var parentNode in node.Children.Where(child => child.Name == "PARENT_NODE"))
                        {
                            var parentKeyValuePairs = parentNode.Values.Where(pair => pair.Key == "name");
                            var parents = new List<string>();
                            foreach (var parentKeyValuePair in parentKeyValuePairs)
                            {
                                parents.Add(parentKeyValuePair.Value.First());
                            }

                            foreach (var parent
                                in parents.
                                    Where(
                                          parent =>
                                          !nameNodeHashtable.ContainsKey(parent)))
                            {
                                nameNodeHashtable.Add(parent, new TechNodeViewModel());
                            }

                            foreach (var parent
                                in parents
                                    .Where(
                                           parent => !String.IsNullOrEmpty(parent) &&
                                                     nameNodeHashtable.
                                                         ContainsKey(parent)))
                            {
                                techNodeViewModel.Parents.Add(nameNodeHashtable[parent]);
                            }
                        }

                        _treeData.TechTree.Add(techNodeViewModel);
                    }
                    break;
            }

            _treeData.LinkNodes();
            _treeData.WorkspaceViewModel.StatusBarText = "Tree Loaded";
        }