// Event.
 private void onTechTreeSpawn(RDTechTree rdTechTree)
 {
     HETTNSettings.Log("Using tech tree path: {0}", HighLogic.CurrentGame.Parameters.Career.TechTreeUrl);
     Preload();
     HETTNSettings.Log2("Applying visual changes...");
     ChangeZoomScroll();
     ChangeViewable();
     HETTNSettings.Log2("Finished applying visual changes.");
 }
Example #2
0
        private void OnUpdateRnD(RDTechTree tree)
        {
            Debug.Log($"[RODynamicPartHider] TechTree updated");
            foreach (RDNode node in tree.controller.nodes)
            {
                // This filtering doesn't get persisted, but is done to avoid
                // confusion with other mods that interact with the tech tree
                RDTechFilters.Instance.FilterRDNode(node.tech);

                // Attach the actual filtering component that does the filtering
                node.gameObject.AddComponent <RDTechFixer>();
            }
        }
        // Event.
        private void onTechTreeDespawn(RDTechTree rdTechTree)
        {
            HETTNSettings.Log2("Despawning tech tree visual changes...");
            // Not sure if neccessary... or maybe do I need to delete tech line and arrow gameObjects as well??
            this.rdTechTree = rdTechTree;
            int count = this.rdTechTree.controller.nodes.Count;

            for (int i = 0; i < count; i++)
            {
                UnityEngine.Object.Destroy(this.rdTechTree.controller.nodes[count].gameObject);
            }
            this.rdTechTree.controller.nodes.Clear();
            this.rdTechTree = null;
            HETTNSettings.Log2("Finished despawning tech tree visual changes.");
        }
Example #4
0
        private void onTechTreeSpawn(RDTechTree rdTechTree)
        {
//            ProtoRDNode[] rdNodes = rdTechTree.GetTreeNodes();
            RDNode[] rdNodes = RDController.Instance.nodes.ToArray();
            for (int index = 0; index < rdNodes.Length; index++)
            {
                Debug.Log("FRED checking " + rdNodes[index].name);
                if (rdNodes[index].tech.state == RDTech.State.Available || rdNodes[index].name == "Advanced Aerodynamics")
                {
                    Debug.Log("FRED tech node " + rdNodes[index].name + " is researched");
                    rdNodes[index].SetButtonState(RDNode.State.RESEARCHED);
//                    rdNodes[index].UpdateGraphics();
                }
            }
            rdTechTree.RefreshUI();
        }
        // ---------------------------------------------------------
        // Preload the instances for RDNode and RDTech. Add listener
        // for Hide Unresearchable Nodes option. (Testing shows a
        // ".Remove" isn't necessary).
        // ---------------------------------------------------------
        #region PRELOAD
        public void Preload()
        {
            // Apply current settings.
            this.hettnSettings = new HETTNSettings();

            // Initilize and get current RDTechTree stuff so we can change visual settings.
            this.rdTechTree = new RDTechTree();
            this.rdTechTree = AssetBase.RnDTechTree;
            //this.rdTechTree.controller.actionButton.onClickState.RemoveAllListeners();
            this.rdTechTree.controller = RDController.Instance;
            this.rdTechTree.controller.actionButton.onClickState.AddListener(new UnityAction <string>(this.ActionButtonClick));
            foreach (RDNode node in this.rdTechTree.controller.nodes)
            {
                node.tech.Start();
                node.Start();
                node.UpdateGraphics();
            }
        }
        private void processNewNodes(ConfigNode tree)
        {
            Debug.Log("processing all NEW_NODE items");
            //RDController rdControl = GameObject.FindObjectOfType<RDController>();
            List <RDNode> newRDNodes = new List <RDNode>();

            try
            {
                foreach (ConfigNode cfgNodeNew in tree.GetNodes("NEW_NODE"))
                {
                    //only create RDNodes that are not yet in the Techtree
                    string newName = cfgNodeNew.GetValue("gameObjectName");

                    //if (!Array.Exists<RDNode>(AssetBase.RnDTechTree.GetTreeNodes(), x => x.gameObject.name == newName))
                    if (!GameObject.FindObjectsOfType(typeof(RDNode)).Cast <RDNode>().Any(rdn => rdn.gameObject.name == newName))
                    {
                        RDNode newNode = createNode();

                        if (newNode.tech == null)
                        {
                            Debug.Log("newNode.tech is null after createNode");
                            newNode.tech = new RDTech();
                        }



                        if (newNode.gameObject == null)
                        {
                            Debug.Log("newNode.gameObject is still null after Setup");
                        }


                        //Debug.Log("calling rdNode.Warmup()");
                        //newNode.Warmup(newTech);
                        //Debug.Log("NEWNODE: after Setup(), startNode has " + findStartNode().children.Count() + " children");


                        Debug.Log("created node and tech, now setting basic tech parameters");
                        //setup all the basic parameters that are not handled in updatenode
                        newNode.treeNode           = true;
                        newNode.gameObject.name    = newName;
                        newNode.name               = newName.Substring(newName.IndexOf("_") + 1);
                        newNode.tech.techID        = newNode.name;
                        newNode.tech.hideIfNoParts = false;



                        Debug.Log("updating node with cfgFile-parameters");
                        updateNode(newNode, cfgNodeNew);
                        Debug.Log("created new RDNode " + newNode.gameObject.name + " with RDTech.title=" + newNode.tech.title + " techId=" + newNode.tech.techID);
                        //Debug.Log("NEWNODE: after updateNode(), startNode has " + findStartNode().children.Count() + " children");

                        //Debug.Log("NEWNODE: calling RegisterNode(), AssetBase.TechTree has  " + AssetBase.RnDTechTree.GetTreeNodes().Count() + " entries");
                        //newNode.controller.RegisterNode(newNode);
                        //Debug.Log("NEWNODE: after RegisterNode(), AssetBase.TechTree has  " + AssetBase.RnDTechTree.GetTreeNodes().Count() + " entries");
                        //newNode.SetButtonState(RDNode.State.RESEARCHABLE);

                        //newNode.SetButtonState(RDNode.State.RESEARCHABLE);
                        Debug.Log("calling newnode.setup");
                        newNode.Setup(); //This sets the anchor offsets
                        //Debug.Log("Invoking rdController.registerNode");
                        typeof(RDNode).GetMethod("InitializeArrows", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(newNode, null);

                        newRDNodes.Add(newNode);

                        //addedNewNodes.Add(newName);
                    }//endif tech not yet added
                    else
                    {
                        RDNode newNode = GameObject.FindObjectsOfType(typeof(RDNode)).Cast <RDNode>().FirstOrDefault(rdn => rdn.gameObject.name == newName);
                        newNode.Setup();
                        newRDNodes.Add(newNode);
                    }
                }//endof all newnodes
                nodesWithConfigEntries.AddRange(newRDNodes);

                if (newRDNodes.Any())
                {
                    Debug.Log("Invoking Warmup");
                    RDTechTree rd_tree       = AssetBase.RnDTechTree;
                    MethodInfo rd_tree_minfo = typeof(RDTechTree).GetMethod("Warmup", BindingFlags.NonPublic | BindingFlags.Instance); //.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance).Where(mtd => mtd.Name.Contains("warmup")).FirstOrDefault();
                    rd_tree_minfo.Invoke(rd_tree, null);
                    Debug.Log("Warmup Complete");
                }

                //List<RDNode> rdnodes = AssetBase.RnDTechTree.GetTreeNodes().ToList();
                //List<RDTech> rdtechs = AssetBase.RnDTechTree.GetTreeTechs().ToList();
                //rdnodes.AddRange(newRDNodes);
                //rdtechs.AddRange(newRDNodes.Select(rdn => rdn.tech));
                //FieldInfo rdnodes_info = typeof(RDTechTree).GetFields(BindingFlags.NonPublic | BindingFlags.Static).Where(fld => fld.FieldType.FullName.Contains("RDNode")).FirstOrDefault();
                //FieldInfo rdtechs_info = typeof(RDTechTree).GetFields(BindingFlags.NonPublic | BindingFlags.Static).Where(fld => fld.FieldType.FullName.Contains("RDTech")).FirstOrDefault();
                //rdnodes_info.SetValue(null, rdnodes.ToArray());
                //rdtechs_info.SetValue(null, rdtechs.ToArray());
            }
            catch (Exception ex)
            {
                Debug.LogError("Exception in NEWNODE processing - " + ex.Message + " at " + ex.StackTrace);
            }
        } //end loadTree()
 private void onTechTreeDespawn(RDTechTree rdTechTree)
 {
     Debug.Log("onTechTreeDespawn");
 }
Example #8
0
 public void onTechTreeSpawn(RDTechTree techTree)
 {
     this.techTree = techTree;
     updateVisibility();
 }
Example #9
0
 public void onTechTreeDespawn(RDTechTree techTree)
 {
     this.techTree = null;
 }
Example #10
0
 public TechTreeWrapper(RDTechTree tree)
 {
     this.tree = tree;
     // Pre-compute useful traversal information
     visit(node => {
         allNodes.Add(node.name, node);
         foreach(RDNode.Parent parent in node.parents)
         {
             addChild(parent.parent.node.name, node.name);
         }
     });
 }