void SearchPCNode(HostNode2 h, int[] searchArray, PCNodeTracker pcNode) { for (int i = 0; i < 4; i++) { // switch search/filter modes. if (searchArray[i] != -1) { if (h.OctetInterface[i] != searchArray[i]) { h.AssignedGameObject.SetActive(false); } else { h.AssignedGameObject.SetActive(true); pcNode.hostNodeObj.gameObject.SetActive(true); pcNode.hostNodeObj.gameObject.GetComponent <LineRenderer>().enabled = true; var rtn = pcNode.hostNodeObj.gameObject.GetComponent <RouterNodeTracker>(); rtn.childrenLines.Where(p => p.childIdnex == pcNode.index).FirstOrDefault().gameObject.SetActive(true); trackingRouters.Add(rtn); } } } int k = 0; float spreadInc = 30f / trackingRouters.Count; //30 degree spread. foreach (var r in trackingRouters) { Vector3 newPosition = Quaternion.Euler(0, spreadInc * k, 0) * Vector3.forward * graphDescriptor.RouterDistanceVal; r.SetNewPosiiton(newPosition); k++; } }
void SearchAll(HostNode2 h, int[] searchArray) { for (int i = 0; i < 4; i++) { // switch search/filter modes. if (searchArray[i] != -1) { if (h.OctetInterface[i] != searchArray[i]) { h.AssignedGameObject.SetActive(false); } else { h.AssignedGameObject.SetActive(true); } } } }
private void LoadedNetworkData_finishedLoadingData(LoadingNetworkDataArgs args, object sender) { nodes = args.HDP2.data; // preprocess all GP nodes into childs of BR nodes foreach (var GP in nodes) { if (GP.deviceType == GENERAL_PURPOSE) { foreach (var BRN in GP.connections) { var BR = nodes[BRN]; if (BR.deviceType == BROADBAND_ROUTER) { if (!BR.connections.Contains(GP.id)) { BR.connections = BR.connections.Append(GP.id).ToArray(); } } } GP.connections = new int[0]; } } Random.InitState(42); // places router stuff first!// it also places all nodes in some default position. foreach (var l1n in nodes) { //string name; var go = Instantiate(nodePrefab.gameObject); if (l1n.deviceType == GENERAL_PURPOSE) { go.transform.SetParent(PCs); go.AddComponent <PCNodeTracker>(); } if (l1n.deviceType == BROADBAND_ROUTER) { go.transform.SetParent(Routers); } var octahedron = go.GetComponent <Octahedron>(); go.GetComponent <MeshRenderer>().material = nodeMat; octahedron.radius = 1; //what to do with octet 0? //var nodePosition = getLocationFromOctet(l1n.octets) * 2; var nodePosition = getFromRandomSphere(); go.transform.localPosition = nodePosition; // set text position var textObj = Instantiate(textPrefab, go.transform); textObj.transform.localPosition = new Vector3(0, 1, 0); var tmp = textObj.GetComponent <TextMeshPro>(); tmp.SetText($" {l1n.deviceType} | {l1n.octets[0]}.{l1n.octets[1]}.{l1n.octets[2]}.{l1n.octets[3]}"); // set to follow the camera's movement var script = textObj.GetComponent <FaceCamera>(); script.cameraToLookAt = playerCamera; l1n.AssignedGameObject = go; } // finally create all the connections //return; foreach (var l1n in nodes) { int index = 0; var nodePosition = l1n.AssignedGameObject.transform.position; if (l1n.connections.Length > 0) { var rtNode = l1n.AssignedGameObject.AddComponent <RouterNodeTracker>(); LineRenderer hiddenLr = l1n.AssignedGameObject.AddComponent <LineRenderer>(); hiddenLr.enabled = false; hiddenLr.sharedMaterial = searchLineMat; NodeTracker hiddenNt = l1n.AssignedGameObject.AddComponent <NodeTracker>(); hiddenNt.HostNode = l1n.AssignedGameObject; hiddenNt.ConnectionNode = CenterTransform.gameObject; // TODO: update this to whatever you want to pivot on search. // skip generals //if (l1n.deviceType == GENERAL_PURPOSE) continue; // All l2n should be GP now. foreach (var l2n in l1n.connections) { var go2 = Instantiate(linePrefab.gameObject, l1n.AssignedGameObject.transform); HostNode2 adjNode = nodes[l2n]; //go2.GetComponent<MeshRenderer>().material = Lvl2_Host_Mat; LineRenderer lr = go2.GetComponent <LineRenderer>(); // added node tracker to maintain the position of the nodes. NodeTracker nt = go2.AddComponent <NodeTracker>(); nt.HostNode = l1n.AssignedGameObject; nt.ConnectionNode = nodes[l2n].AssignedGameObject; // both are broadband types if (adjNode.deviceType == BROADBAND_ROUTER && l1n.deviceType == BROADBAND_ROUTER) { lr.sharedMaterial = lineMat2; rtNode.connectionLines.Add(nt); } // a pc node is adjacent, assign it as child. if (adjNode.deviceType == GENERAL_PURPOSE && l1n.deviceType == BROADBAND_ROUTER) { // Since I'm a PC node, I'm going to have this system override stuff. var pcnt = adjNode.AssignedGameObject.GetComponent <PCNodeTracker>(); pcnt.HostNode = l1n; rtNode.childrenNodes.Add(adjNode); pcnt.index = index; nt.childIdnex = index; rtNode.childrenLines.Add(nt); } index++; } } } }