// 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."); }
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."); }
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"); }
public void onTechTreeSpawn(RDTechTree techTree) { this.techTree = techTree; updateVisibility(); }
public void onTechTreeDespawn(RDTechTree techTree) { this.techTree = null; }
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); } }); }