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++; } } } }
private void LoadedNetworkData_finishedLoadingData(LoadingNetworkDataArgs args, object sender) { nodes = args.HDP.data; foreach (var l1n in nodes) { var go = Instantiate(buildingPrefab.gameObject, transform); var hexahdron = go.GetComponent <Hexahedron>(); go.GetComponent <MeshRenderer>().material = Lvl1_Host_Mat; l1n.AssignedGameObject = go; hexahdron.length = 1; hexahdron.width = 1; if (l1n.child.Length != 0) { hexahdron.height = l1n.child.Length + 1; } else { hexahdron.height = 1; } var offsetHeight = hexahdron.height / 2f; go.transform.localPosition = new Vector3(l1n.octets[2] - 128, offsetHeight, l1n.octets[3] - 128); // set text position var textObj = Instantiate(textPrefab, go.transform); textObj.transform.localPosition = new Vector3(0, offsetHeight + 1, 0); var tmp = textObj.GetComponent <TextMeshPro>(); tmp.SetText($"{l1n.octets[0]}.{l1n.octets[1]}.{l1n.octets[2]}.{l1n.octets[3]}"); var script = textObj.GetComponent <FaceCamera>(); script.cameraToLookAt = playerCamera; float index = 0; foreach (var l2n in l1n.child) { l2n.AssignedGameObject = go; var go2 = Instantiate(buildingPrefab.gameObject, go.transform); var hexahdron2 = go2.GetComponent <Hexahedron>(); go2.GetComponent <MeshRenderer>().material = Lvl2_Host_Mat; hexahdron2.length = 0.8f; hexahdron2.width = 0.8f; hexahdron2.height = 0.4f; go2.transform.localPosition = new Vector3(0, index / 1.2f - offsetHeight / 1.2f, 0); // set text position var textObj2 = Instantiate(textPrefab, go2.transform); textObj2.transform.localPosition = new Vector3(1.6f, 0, 0); textObj2.transform.localScale = Vector3.one; // set text content var tmp2 = textObj2.GetComponent <TextMeshPro>(); tmp2.SetText($"{l2n.octets[0]}.{l2n.octets[1]}.{l2n.octets[2]}.{l2n.octets[3]}"); var script2 = textObj2.GetComponent <FaceCamera>(); script2.cameraToLookAt = playerCamera; index++; } } }