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);
            }
        }
 /**
  * Method for remove a part in node and add the par in partcatalog.
  * Status: OK
  */
 public void RemovePartFromNode(PartViewModel part, TechNodeViewModel node)
 {
     node.RemovePart(part);
     PartCollection.Add(part);
 }
 /**
  * Method for remove a part in node and add the par in partcatalog.
  * Status: OK
  */
 public void RemovePartFromNode(PartViewModel part, TechNodeViewModel node)
 {
     node.RemovePart(part);
     PartCollection.Add(part);
 }
 /**
  * Method for add a part in node and remove the par in partcatalog.
  * Status: OK
  */
 public void AddPartToNode(PartViewModel part, TechNodeViewModel node)
 {
     node.AddPart(part);
     PartCollection.Remove(part);
 }
Пример #5
0
 public TechNodeViewModel AddNode(Point pos)
 {
     var node = new TechNode(GenerateNodeName()) { Pos = pos };
     var nodeViewModel = new TechNodeViewModel { TechNode = node };
     TechTree.Add(nodeViewModel);
     return nodeViewModel;
 }
 /**
  * Method for add a part in node and remove the par in partcatalog.
  * Status: OK
  */
 public void AddPartToNode(PartViewModel part, TechNodeViewModel node)
 {
     node.AddPart(part);
     PartCollection.Remove(part);
 }
Пример #7
0
 public void DeleteNode(TechNodeViewModel node)
 {
     WorkspaceViewModel.SelectedNode = null;
     TechTree.Remove(node);
     UnlinkParent(node);
     var parts = new PartViewModel[node.Parts.Count];
     node.Parts.CopyTo(parts, 0);
     foreach (var part in parts)
     {
         PartCollectionViewModel.RemovePartFromNode(part, node);
     }
     LinkNodes();
 }
Пример #8
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";
        }
Пример #9
0
 public void RemoveParent(TechNodeViewModel parent)
 {
     Parents.Remove(parent);
     TechNode.Parents.Remove(parent.TechNode);
 }
Пример #10
0
 public void AddParent(TechNodeViewModel parent)
 {
     Parents.Add(parent);
     TechNode.Parents.Add(parent.TechNode);
 }
Пример #11
0
 public abstract TreeSaver SaveParts(TechNodeViewModel node);
 public abstract TreeSaver SaveParts(TechNodeViewModel node);
Пример #13
0
 public override TreeSaver SaveParts(TechNodeViewModel node)
 {
     foreach (var part in node.Parts)
     {
         _partsBuffer.Add("@PART[" + part.PartName + "]:FINAL");
         _partsBuffer.Add("{");
         IndentationLevel++;
         _partsBuffer.Add("@TechRequired = " + node.TechId);
         IndentationLevel--;
         _partsBuffer.Add("}");
     }
     return this;
 }
Пример #14
0
 public void AddParent(TechNodeViewModel parent)
 {
     Parents.Add(parent);
     TechNode.Parents.Add(parent.TechNode);
 }
Пример #15
0
 //TODO: Remove this terrible terrible method and replace with proper
 //MVVM model-viewmodel dependencies.
 public void UnlinkParent(TechNodeViewModel parentToRemove)
 {
     foreach (var node in TechTree)
     {
         if (node.Parents.Contains(parentToRemove))
         {
             node.RemoveParent(parentToRemove);
         }
     }
 }
Пример #16
0
 public void RemoveParent(TechNodeViewModel parent)
 {
     Parents.Remove(parent);
     TechNode.Parents.Remove(parent.TechNode);
 }
Пример #17
0
 public override TreeSaver SaveParts(TechNodeViewModel node)
 {
     foreach (var part in node.Parts)
     {
         AddLine("part = " + part.PartName);
     }
     return this;
 }